2-проходное кодирование ffmpeg за один раз

2-проходное кодирование ffmpeg за один раз

Я кодирую видеофайл с помощью ffmpeg следующим образом.

$ ffmpeg -i input.avi -pass 1 -an output.mp4
$ ffmpeg -i input.avi -pass 2 -ab 128k -y output.mp4

Итак, я всегда печатаю 2 раза. Есть ли способ кодировать видео в 2 прохода сразу?

Я часто меняю параметры, и, конечно, имена входных и выходных файлов каждый раз разные.

решение1

Вместо того, чтобы запускать их как две отдельные команды, вы можете запустить их в одной командной строке, например так:

$ ffmpeg -i input.avi -pass 1 -an output.mp4 && \
    ffmpeg -i input.avi -pass 2 -ab 128k -y output.mp4

Разница в &&нотации, которая запустит вторую команду (2-й проход) только в том случае, если первая команда была успешной. Это все еще 2 отдельные операции, но это позволит вам запустить одну командную строку вместо 2, которые вам приходилось делать ранее.

Также это даст преимущество в том, что второй проход будет выполнен сразу после завершения первого, тогда как в вашем случае вам пришлось бы ждать завершения первого, прежде чем начинать второй.

решение2

Я использую mencoder, но уверен, что нечто подобное можно сделать с помощью ffmpeg/avconv, используя устройство fifo:

$ mkfifo passlog

$ mencoder infile.flv -passlogfile passlog ........... pass=1 &

$ mencoder infile.flv -passlogfile passlog ........... pass=2

Связанный контент