Пожалуйста, прочитайте документацию по FFmpeg и запустите ffmpeg -h full
для получения списка опций. Кроме того, посмотрите на эту статью, которую я написал, в которой показаны различия между режимами управления скоростью в таких кодировщиках, как x264 и x265.
Как правило, вот что означают варианты:
-b:v
(или -vb
, то же самое) задает целевую среднюю битовую скорость для кодера, чтобы использовать:
-b
<int>
E..VA
установить битрейт (в битах / с) (от 0 до INT_MAX)
-minrate
определяет минимальный допуск, который будет использоваться:
-minrate
<int>
E..VA
Установите минимальный допуск битрейта (в битах / с). Наиболее полезно при настройке кодирования CBR. В противном случае это бесполезно. (от INT_MIN до INT_MAX)
-maxrate
указывает максимальный допуск. Однако, как указано в документации, это используется только в сочетании с bufsize
:
-maxrate
<int>
E..VA
Установите максимальный допуск битрейта (в битах / с). Требуется bufsize
. (от INT_MIN до INT_MAX)
-bufsize
<int>
E..VA
установить размер буфера управления скоростью (в битах) (от INT_MIN до INT_MAX)
Это имеет смысл только для кодирования с переменной скоростью передачи, где вместо использования модели с постоянной скоростью передачи или с постоянным качеством кодер имитирует передачу с виртуальным буфером в декодере. -minrate
/ -maxrate
/ -bufsize
контролируют размер буфера. Обычно вы используете этот режим только для потоковой передачи, так как метод будет ограничивать скорость передачи данных, чтобы не превысить определенное значение, что приведет к переполнению или потере буфера декодера.
Подводя итог, у вас есть несколько вариантов ограничения битрейта:
Чтобы настроить процесс CBR, вы должны проверить, что предлагает кодировщик. Как правило, вы не можете достичь "идеального" постоянного битрейта, поскольку кодер не будет тратить биты. Установка -b:v
, -minrate
и -maxrate
на одинаковые уровни позволит достичь этого, например, для libx264:
ffmpeg -i input.mp4 -c:v libx264 -x264-params "nal-hrd=cbr" -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M output.ts
Предупреждение: это может привести к низкому качеству видео, которое трудно кодировать, и это приведет к потере битов. Если вам абсолютно не нужно достигнуть постоянной скорости вывода, не используйте эту опцию.
Установите ограниченный / переменный битрейт для потоковой передачи. Используйте, например, -b:v 3500K -maxrate 3500K -bufsize 1000K
. Вам придется корректировать скорость и размеры буфера в зависимости от контекста. Чем больше размер буфера, тем выше допустимое изменение битрейта.
Используйте постоянную цель качества и ограничивайте битрейт только для ловли пиков. Например, используйте -c:v libx264 -crf 23 -maxrate 4M -bufsize 4M
для кодирования с переменной скоростью передачи битов с целевым CRF 23, но ограничьте выходной максимум 4 Мбит / с.