Пакетное конвертирование * .avi файлов с использованием ffmpeg

13

Я пытаюсь конвертировать более 20 файлов .avi в пакетном режиме, используя ffmpeg.

У меня есть следующее

@echo off.

for file in *.avi
do
   ffmpeg -i "$file" -s 640x480 -vcodec msmpeg4v2 "'basename "$file" .avi'.mpg';
done

в моем .bat файле, но он не работает. Как я могу заставить его работать под ОС Windows. Да, и да, все файлы находятся в одной папке.

Сообщение об ошибке я получаю:

Файл был неожиданным в это время

Darius
источник
И что именно не работает по этому поводу?
Slhck
Если вы можете указать мне, как получить сообщение об ошибке, поскольку cmd исчезает очень быстро, я смогу рассказать вам, с чем у меня проблема.
Дарий
Вы должны иметь возможность просто открыть командное окно до ( Пуск »Выполнить ...»cmd ), а затем запустить пакетный файл, используя его полный путь оттуда. Что вы на самом деле хотите сделать с видео? Что это за видео? Вам просто нужно переместить их в контейнер MPG? Или вам нужно изменить их размер? Или вам конкретно нужен msmpeg4v2кодек?
Slhck
Файлы снимаются с цифрового видеорегистратора и представляют собой клипы объемом более 1 ГБ в течение 5 минут Да, программное обеспечение DVR жалко на сжатие. Кодек работает, поскольку он занимает от 1 ГБ до примерно 7 МБ файлов, которые более управляемы. И при попытке запустить этот пакет я получаю сообщение «Файл был неожиданным в это время».
Дарий
Понимаю. Если вас не интересует результирующий видеокодек и контейнер, я бы предложил вместо этого использовать x264 в качестве кодера, что дает гораздо лучшее качество, чем MPEG-4. Командой будет что-то вроде того, ffmpeg -i input.avi -c:v libx264 -crf 23 -s 640x480 output.mp4где значение CRF устанавливает качество (чем меньше, тем лучше, чем хуже, тем вменяемые значения от 19 до 24). См. Также: Преобразование старых видео, чтобы иметь меньшие размеры и Какие параметры я должен смотреть, чтобы уменьшить размер файла .MOV?
Slhck

Ответы:

26

Ваш пакетный файл имеет неправильный формат для сценария Windows bat. Вместо этого ваш скрипт выглядит так, как будто он предназначен для Linux. Вам нужно будет изменить скрипт, чтобы использовать цикл for , поддерживаемый оболочкой Windows.

Ниже приведен пример того, как выполнить эту задачу с помощью цикла Windows for. Просто поместите следующую строку в ваш пакетный файл и переместите скрипт в тот же каталог, что и avi-файлы, а затем запустите его.

for %%A IN (*.avi) DO ffmpeg -i "%%A" "%%A.mpg"
Brett
источник
С этим я получаю[NULL @ 000000000037e360] Unable to find a suitable output format for 'outputfile.avi.mpg;' outputfile.avi.mpg:: Invalid argument
Дарий
1
Нужно удалить эту точку с запятой в конце строки
Бретт