Я кодирую видеофайл с помощью 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