FFmpeg пакетное преобразование нескольких файлов - PullRequest
0 голосов
/ 11 марта 2019

Эта команда прекрасно работает:

ffmpeg \
-i /mnt/share/Movies2/"nameofmovie.mkv" \
-map 0:0 \
-map 0:1 \
-map 0:2 \
-c:v libx264 \
-preset veryfast \
-tune film \
-crf 18 \
-c:a:0 copy \
-c:a:1 copy \
/mnt/share/Converted/"nameofmovie".mkv

Но я хочу либо иметь возможность прочитать входной файл из текстового файла, либо выполнить эту команду одну за другой для каждого файла, который я хочу преобразовать. Есть ли скрипт, который я могу настроить для этого? Не все файлы находятся в одной и той же папке или в одном и том же формате, поэтому было бы здорово изменить имя и формат файла. Раньше у меня был скрипт bash, который мог бы делать это для всей папки, но это не то, что я пытаюсь сделать здесь. Я использую Ubuntu Server 18.04 Также я довольно новичок в этом, я нашел это для всей папки:

for i in *.avi;
do name=`echo $i | cut -d'.' -f1`;
echo $name;
ffmpeg -i "$i" "${name}.mov";
done

Но я не знаю, как адаптировать это для отдельных файлов

1 Ответ

0 голосов
/ 11 марта 2019

Создайте текстовый файл the_list.txt следующим образом:

File1.mp4:mp4
File2.avi:avi

Здесь первое поле - это имя файла, а второе - исходный формат (может быть получен из расширения файла, но с простотой).

Создание сценария do_conv.sh:

cat the_list.txt | while read L
do
   FNAME=$( echo $L | cut -d':' -f1 )
   SRCFMT=$( echo $L | cut -d':' -f2 )
   echo 'Next File: ${FNAME}"
   if [ "${SRCFMT}" = "mp4" ]
   then
      ffmpeg -i ${FNAME} ....
   elif [ "${SRCFMT}" = "mp4" ]
   then
      ffmpeg -i ${FNAME} ....
   else
      ffmpeg -i ${FNAME} ....
   fi
done

Не совсем точно, каким преобразованием вы хотите стать, но, надеюсь, этот шаблон поможет вам начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...