9

Я использую 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 ответ1

14

Это действительно зависит от вашей скорости загрузки.

bufsize определит, насколько религиозно ffmpeg поддерживает постоянный битрейт. Если вы установите bufsize 64 КБ, согласно FFmpeg Wiki: Ограничение выходного битрейта, он будет вычислять свой текущий битрейт каждые 64 килобайта и корректировать его соответствующим образом. Меньшие размеры для размера bufsize могут быть вредны для качества, поскольку они не дают достаточно места между проверками для x264, чтобы сделать внезапные изменения - вы получите блочность.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .