Создание в одну строку не улучшает читаемость.
Итак, что вы делаете:
#!/bin/bash
for file in *.mp4; do
ffmpeg -i "$file" \
-vf "select='between(t, 10, 20) \
+ between(t, 197, 207) + between(t, 393, 403) \
+ between(t, 570,580)', \
setpts=N/FRAME_RATE/TB" \
-qscale 0 \
-af "aselect='between(t, 10, 20) \
+ between(t, 197, 207) \
+ between(t, 393, 403) \
+ between(t, 570, 580)', \
asetpts=N/SR/TB" \
outputfile.mp4
done
Для подробностей:
for file in *.mp4; do
Это означает, что вы будете делать ffmpeg
для каждого файла в каталоге. Это, как указал Шелтер, эффективно перебирает все разные файлы. Но, поскольку вы пишете с фиксированным именем файла (outputfile.mp4
), остается только один выходной файл: сокращенная версия последнего mp4 в вашем цикле.
Таким образом, если вы запишите выходные данные в разные файлы, вы увидите, что на самом деле ffmpeg
выполняется для всех входных файлов.
Если вы не уверены, что зацикливаетесь, попробуйте ввести echo
s, чтобы сообщить вам, что происходит.
Что касается переменной для выходного файла: ${file%.mp4}_1.mp4
, вероятно, подойдет.
Итак, это значит:
#!/bin/bash
for file in *.mp4; do
outputfile=${file%.mp4}_1.mp4
echo "Doing $file -> $outputfile"
# the ffmpeg command
done