У меня есть куча файлов, которые нужно конвертировать из .mp4
в .mpeg.one
. Мой друг предложил мне этот простой сценарий. Однако это не работает, потому что имена файлов содержат пробелы.
Вот сценарий:
for f in $(ls *.mp4); do ffmpeg -i "$f".mp4 "$f".mprg; done
В этом случае вам не нужно использовать ls
. Как правило, всегда старайтесь использовать встроенные функции оболочки и глобальные функции, а не полагаться на внешние программы (например, ls
), которые могут создавать проблемы с уродливыми обходными путями.
Кроме того, вы не должны «вручную» добавлять расширение к имени входного файла (которое вы даете -i
), и вы должны удалить расширение в выходном файле.
Таким образом, команда должна быть:
for f in *.mp4; do ffmpeg -i "$f" "${f%.mp4}".mprg; done
ls
необходимо .mpeg
как расширение "
вправо, пробелы не станут проблемой ffmpeg -i "$f".mp4
в вашей команде будет искать, например, files.mp4.mp4, который вы, вероятно, не имели в виду Возможное решение:
for f in *.mp4; do ffmpeg -i "$f" "$f".mpeg; done
Вместо ls
вы можете использовать find -print0
и xargs -0
:
find -name '*.mp4' -print0 | xargs -0 -n1 ffmpeg -i '{}' '{}'.mpeg
, а затем переименовать:
rename s/mp4.mpeg$/mpeg/ *.mp4.mpeg