Как учитывать битрейт, -maxrate и -bufsize видео для веб
Я использую ffmpeg для кодирования своих видео и загрузки их в Интернет. Я видел этот пост об использовании ffmpeg, но не совсем понял, как считать значения.
Предположим, у меня есть видео размером 70 МБ с продолжительностью 4 минуты. Как бы я оценил значение этих флагов: -b:v
, -maxrate
а также -bufsize
для этой команды?
ffmpeg -i input -codec:v libx264 -profile:v main -preset slow -b:v ? -maxrate ? -bufsize ? -vf "scale=720:trunc(ow/a/2)*2" -threads 0 -codec:a libfdk_aac -movflags +faststart output
Или есть ли нормальное значение, как для crf
значения 19-24? Буду очень признателен за вашу помощь и руководство.
1 ответ
Это действительно зависит от вашей скорости загрузки.
bufsize
определит, насколько религиозно ffmpeg поддерживает постоянный битрейт. Если вы установите bufsize
64 КБ, согласно FFmpeg Wiki: ограничивая выходной битрейт, он будет рассчитывать свой текущий битрейт каждые 64 килобайта и корректировать его соответствующим образом. Меньшие размеры для bufsize
может быть вредным для качества в том смысле, что они не дают достаточно места между проверками для x264, чтобы сделать внезапные изменения - вы получите блочность.
Если твой maxrate
это 640kbps, а ваш bufsize
составляет 64 КБ, то каждую десятую секунды x264 будет проверять. Это неоптимально - FFmpeg Wiki: кодирование для потоковых сайтов рекомендует запускать его каждые 1-2 секунды. Если это не имеет смысла, думайте об этом как maxrate
/bufsize
= частота проверок. Держите эту частоту от 1 до 2 секунд, как правило.
Если вы установите оба maxrate
а также bufsize
, вам следует:
- задавать
maxrate
какой бы ни была ваша самая низкая скорость загрузки (в примере ffmpeg wiki это 80% от общей скорости загрузки, но ваш пробег может отличаться). - задавать
bufsize
где-то между так же, как вашmaxrate
(одна секунда) и в два раза большеmaxrate
(2 секунды). Если это все еще не достаточно низко, опуститеmaxrate
а затем заново установитьbufsize
соответственно.
Затем вам придется немного поиграть, но так как вы должны начать где-то, я просто начну с maxrate
около 600 тыс., что обычно было достаточно для меня, прежде чем я использовал crf
За все.
Если вы хотите, вы можете попробовать более низкие значения для bufsize
Например, каждые три или четыре секунды, просто чтобы увидеть, как значение меняется, как выглядит ваш вывод. Затем вы можете определить, насколько вы должны беспокоиться об этом для вашего видео.
Там нет нормального значения, на самом деле - что crf
делает, чтобы оптимизировать вывод на основе того, что он считает лучшим размером буфера для поддержания любой его скорости. Он пытается сохранить как можно меньший размер файла, сохраняя при этом некоторое качество, за счет случайных скачков.