Вопрос Скрипт для обрезки с помощью ffmpeg


Я записываю радиопередачи через DVB-C и gnutv. Чтобы обрезать записи, я использую ffmpeg.

Синтаксис длится длиннее для входа в терминал. Поэтому я работаю над сценарием, чтобы автоматизировать это. Привет, это:

#!/bin/bash
#Getting the input file:
read -e -p "Enter the absolute path for the .mpg-file: " PATH
# Start time of trimming:
read -p "Where should the trimming start? (Please enter in this format hh:mm:ss): " START
# End time of trimming:
read -p "When should the trimming end? (Please enter in this format hh:mm:ss): " END
# Informations about the song:
read -p "What song is it? " TITLE
read -p "Who sang it? " ARTIST
read -p "Which album?" ALBUM
# Determine the duration of trimming (given in seconds).
START2=$(echo $START | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')
END2=$(echo $END | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')
DURATION=$(expr $END2 - $START2)
ffmpeg -ss $ANFANG -i $PATH -t $DURATION -acodec copy -vcodec copy -metadata title=$TITLE -metadata author=$ARTIST $TITLE' · '$ARTIST'.mpg'

Когда я запускаю этот сценарий для «St Elmos Fire» от «John Parr», я получаю:

Unable to find a suitable output format for 'Elmo's'

Я думаю, что это beacause из пробелов в $ TITLE и $ ARTIST. Я уже пробовал \ и '', а также вариант -e для чтения. Но он вызывает аналогичное сообщение об ошибке. Что я делаю не так?

С наилучшими пожеланиями спасибо заранее, Markus


1
2018-01-20 10:13


происхождения




ответы:


Во-первых, и, самое главное, не используйте имена переменных верхнего регистра. Вы рискуете переопределить переменные среды и специальные переменные оболочки, и в этом случае вы сделали именно это, перезаписав PATH переменная.

Во-вторых. Цитаты очень важны в сценариях оболочки; цитирование переменных разложений позволяет избежать того, что результат подвергнется расширению имени пути и разбиению слов.

Например, если var="St. Elmo's Fire.mpg", тогда $var станут тремя словами St., Elmo's а также Fire.mpg, в то время как "$var" станет одним словом St. Elmo's Fire.mpg, Поэтому всегда указывайте разложения переменных. "$var", а не $var,

Что-то вроде этого должно быть более правильным:

#!/bin/bash
read -ep "Enter path for the .mpg-file: " file
IFS=: read -rp "Where should the trimming start? (HH:MM:SS): " shour smin ssec
IFS=: read -rp "When should the trimming end? (HH:MM:SS): " ehour emin esec
read -rp "What song is it? " title
read -rp "Who sang it? " artist
read -rp "Which album?" album

start=$(( shour*3600 + smin*60 + ssec ))
end=$(( ehour*3600 + emin*60 + esec ))
duration=$(( end - start ))

ffmpeg -i "$file" -t "$duration" -acodec copy -vcodec copy -metadata "title=$title" \
       -metadata "author=$artist" "$title · $artist.mpg"

Команда ffmpeg имела -ss "$ANFANG", но ANFANG никогда не был установлен в вашем скрипте, поэтому я опустил его.


2
2018-01-20 10:36



Большое спасибо. Теперь он отлично работает. Оригинальный скрипт - немецкий. Я пропустил замену «ANFANG» = начало. Я думаю, это также почему PATH не было проблемой, потому что в моем немецком сценарии это был PFAD. - Markus