Как учитывать битрейт, -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 делает, чтобы оптимизировать вывод на основе того, что он считает лучшим размером буфера для поддержания любой его скорости. Он пытается сохранить как можно меньший размер файла, сохраняя при этом некоторое качество, за счет случайных скачков.

Другие вопросы по тегам