Я использую 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? Буду очень признателен за вашу помощь и руководство.
Ответы:
Это действительно зависит от вашей скорости загрузки.
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
значит оптимизировать вывод на основе того, что, по его мнению, является наилучшим размером буфера для поддержания любой установленной скорости. Он пытается сохранить как можно меньший размер файла при сохранении некоторого качества за счет случайных скачков.источник
crf
, то мне не нужно указыватьbitrate
,buffsize
аmaxrate
? И если да, то, что является более эффективным (использоватьcrf
илиbitrate
,buffsize
иmaxrate
)?bufsize
иmaxrate
. Вам не нужноbitrate
, хотя. Как сказал Эли, это будет лучше для потоковой передачи.