Переменные битрейты с настройками «-vb» и «minrate» / «maxrate» в FFmpeg

12

Время рендеринга сильно отличается.

  • -b 3500K -minrate 0K -maxrate 8000K занимает 1 час 17 минут
  • vb=3000k занимает 2,5 часа

Чем vb 3000kи чем он отличается -b 3500K -minrate 0K -maxrate 8000K? Это переменные настройки скорости передачи данных?

Если я изменился на -b 3500K -minrate 3500K -maxrate 3500Kэто постоянная скорость передачи?

Скотт Дауни
источник

Ответы:

16

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

Подводя итог, у вас есть несколько вариантов ограничения битрейта:

  1. Чтобы настроить процесс 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
    

    Предупреждение: это может привести к низкому качеству видео, которое трудно кодировать, и это приведет к потере битов. Если вам абсолютно не нужно достигнуть постоянной скорости вывода, не используйте эту опцию.

  2. Установите ограниченный / переменный битрейт для потоковой передачи. Используйте -b:v 3500K -maxrate 3500K -bufsize 1000K, например. Вы должны будете настроить скорость и размеры буфера в зависимости от контекста. Чем больше размер буфера, тем выше допустимое изменение битрейта.

  3. Используйте постоянную цель качества и ограничивайте битрейт только для ловли пиков. Например, используйте -c:v libx264 -crf 23 -maxrate 4M -bufsize 4Mдля кодирования с переменной скоростью передачи битов с целевым значением CRF, равным 23, но ограничьте выходное значение максимум 4 Мбит / с.

slhck
источник
1
Как бы он кодировал, используя переменную скорость передачи данных? как в синтаксисе использовать?
Скотт Дауни
Какой кодер вы хотите использовать?
slhck
ffmpeg, я полагаю, что используется в kdenlive
Скотт Дауни
Нет, я имел в виду, как в: x264 для видео H.264 / MPEG-4 AVC или XviD для MPEG-4, или Ogg Theora и т. Д. Проще говоря, какой файл вы хотите? MP4?
slhck
3
Смотрите здесь для получения дополнительной информации о кодировании с x264 в FFmpeg; особенно смотрит на пресеты (я обычно использую очень быстрый пресет, в моих тестах самый большой спад в размере файлов был между сверхбыстрым и очень быстрым - после этого различия были гораздо более нарастающими. Конечно, YMMV).
Зло