Как создать пакетный скрипт FFMPEG VIDSTAB для Windows - PullRequest
0 голосов
/ 02 октября 2019

Я фотограф, и я загружаю фотографии (.jpg) и видео (.mov) в одну папку Windows

Я ищу сценарий, который будет запускать следующие 3 строки FFMPEGдля каждого экземпляра .mov в папке, и пусть он создает стабилизированные .mp4 копии видео. Я удалю оригиналы вручную позже.

ffmpeg -i DSCF0229.MOV -vf vidstabdetect=shakiness=5:accuracy=15:stepsize=6:mincontrast=0.3:show=2 -y dummy.mp4

ffmpeg -i DSCF0229.MOV -vf scale=trunc((iw*1.15)/2)*2:trunc(ow/a/2)*2 -y scaled.mp4

ffmpeg -i scaled.mp4 -vf vidstabtransform=smoothing=30:input="transforms.trf":interpol=linear:crop=black:zoom=0:optzoom=1,unsharp=5:5:0.8:3:3:0.4 -y DSCF0229stabilized.mp4

Я могу немного подправить код, но я не знаю, с чего начать. Я пытался "сделать" и даже файл batch.bat, но я просто не могу понять правильный синтаксис.

очень ценю любую помощь здесь !!

Ответы [ 2 ]

1 голос
/ 02 октября 2019

Что касается части вопроса ffmpeg:

ffmpeg -y -i DSCF0229.MOV -vf vidstabdetect=shakiness=5:accuracy=15:stepsize=6:mincontrast=0.3:show=2 -an -f null -
ffmpeg -i DSCF0229.MOV -vf vidstabtransform=smoothing=30:input="transforms.trf":interpol=linear:crop=black:zoom=0:optzoom=1,unsharp=5:5:0.8:3:3:0.4 -c:a copy DSCF0229stabilized.mp4
  • Нет необходимости выводить видео для первой команды, если вы действительно не хотите видеть поля и преобразования. Пропуск, который сэкономит время. Добавлен -an, чтобы избежать обработки звука, потому что нет необходимости делать это для первой команды.

  • Я не вижу причин для 15-процентного масштабирования, поэтому пропустите его. Этот шаг вызывает ненужную потерю генерации, потому что он без необходимости перекодирует. Если вы действительно хотели увеличить масштабирование, просто добавьте фильтр масштабирования после фильтра нерезкости, и вы избежите потери при генерации.

  • Предполагая, что входное аудио уже AAC, вы можете скопировать его в потоковом режиме (-c:a copy) и избегайте перекодирования.

1 голос
/ 02 октября 2019

Для выполнения этой задачи вам обычно нужно использовать . Чтобы узнать, как его использовать, используйте встроенную справку и информацию об использовании для команды, открыв окно командной строки и введя for /?

Вот пример использования базового цикла с вашим , расположенный в том же каталоге, что и ваши .mov файлы:

@For %%A In (*.mov)Do @(
    ffmpeg -i "%%A" -vf vidstabdetect=shakiness=5:accuracy=15:stepsize=6:mincontrast=0.3:show=2 -y "dummy.mp4"
    ffmpeg -i "%%A" -vf scale=trunc((iw*1.15^)/2^)*2:trunc(ow/a/2^)*2 -y "scaled.mp4"
    ffmpeg -i "scaled.mp4" -vf vidstabtransform=smoothing=30:input="transforms.trf":interpol=linear:crop=black:zoom=0:optzoom=1,unsharp=5:5:0.8:3:3:0.4 -y "%%~nAstabilized.mp4"
)

Вы заметите, что, поскольку команды ffmpeg находятся внутри блока в скобках, яизбежание закрытия каждой закрывающей скобки в этих командных строках (с использованием каретки ^), чтобы предотвратить преждевременное закрытие блока do.

В приведенном выше коде предполагается, чтоffmpeg.exe находится рядом с командным файлом в текущем каталоге, расположенном где-то в пределах %PATH%, или имеет запись реестра, позволяющую запускать его независимо от полного пути. Если нет, вам нужно добавить к этому пути исполняемый файл.

...