ffmpeg: Как ограничить битрейт вывода видео?

К необработанному видеофайлу размером 2 ГБ, снятому перед зеленым экраном, я хочу добавить альфа-канал.

Моя проблема в том, что выходные файлы кажутся мне слишком большими (примерно в 20 раз больше входных), а OpenShot, видеоредактор, кажется, не может обрабатывать такие огромные файлы. Сравнение свойств входных и выходных файлов показывает битрейт около 15 КБ во входных файлах и 150–250 КБ в результирующих файлах, что, похоже, указывает на проблему.

(Кстати, я также хочу отбросить первую часть клипа, а также его звуковой канал и уменьшить частоту кадров с 30 до 24 кадров в секунду, что все работает нормально.)

Это моя команда:

ffmpeg.exe -i <in.MOV> -vf chromakey=0x007d06:0.15:0.0 -ss 40.420 -r 24 -b:v 15840k -maxrate 15840k -bufsize 15840k -an -c:v <encoder> <out.mov>

Параметры как я их понимаю:

-i <in.mov> ... infile
-vf chromakey=0x007d06:0.15:0.0 ... chroma, tolerance & blend of greenscreens
-ss 40.420 ... skip before second 40.420 (this works)
-r 24 ... frame rate (this works, too)
-b:v 15804k ... bitrate (seemingly no effect)
-maxrate 15840k ... maximum BitRate (seemingly no effect)
-bufzise 15840k ... Buffer size (can't tell)
-an ... no audio channel (works fine)
-c:v <encoder> ... Video Encoder (ffvhuff, png, qtrle and tiff were tried, all to the same result)
<out.mov> ... outfile

b, maxrate и bufsize описываются как глобальные параметры. Независимо от настройки, во время процесса сообщается о скорости передачи данных до 3000000 кбит/с (tiff).

(Я также добавил -pixel_format argb, но это тоже, похоже, было проигнорировано, ffmpeg всегда сообщает, что нужно писать yuva420p.)

Что мне не хватает?


person Mat    schedule 27.03.2017    source источник


Ответы (1)


Все кодировщики, которые вы пробовали, работают без потерь. Вы не можете установить битрейт для кодировщика без потерь.

Попробуйте VP8/9, т. е. -c:v libvpx или libvpx-vp9 с форматом пикселей -pix_fmt yuva420p. Удалите битрейт/максимальную скорость/размер буфера и установите -crf N -b:v 0, где N может варьироваться от 0 до 63. Попробуйте со значением 20. Перемещайтесь вверх/вниз для уменьшения/улучшения видеопотока соответственно.

person Gyan    schedule 27.03.2017
comment
Большое спасибо! К сожалению, безуспешно. libvpx дает мне кодирование прозрачности с auto_alt_ref не работает. (Добавление -auto_alt_ref 0 приводит к ошибке нераспознанной опции.) Я пробовал 18 кодировщиков, используя вашу подсказку. Каждый из них потерпел неудачу (по разным причинам). Libvpx-vp9, казалось, работал (без предупреждений), хотя и с кропотливой скоростью (0,03, то есть 40-футовый клип займет 50 часов). Однако в видеоредакторе 3 секунды, которые я визуализировал, все равно не показали прозрачности. Есть ли список, если кодеры с потерями и совместимы с пиксельным форматом, содержащим альфа-канал? Я ничего не нахожу. - person Mat; 27.03.2017
comment
Это -auto-alt-ref 0. Мои данные настройки применимы только для энкодеров VPx; они не общие. - person Gyan; 27.03.2017
comment
Я не знаком с Openshot, но можете ли вы использовать отдельный слой/видео в качестве альфа-канала, т.е. alpha matte - person Gyan; 27.03.2017
comment
Я далеко не уверен, но боюсь: нет. - person Mat; 27.03.2017