Почему FFMPEG всегда делает большие файлы WebM?

Я пытаюсь закодировать свои фильмы в WebM:

ffmpeg -i input.MOV -codec:v libvpx -quality good -cpu-used 0 -b:v 10k
-qmin 10 -qmax 42 -maxrate 10k -bufsize 20k -threads 8 -vf scale=-1:1080
-codec:a libvorbis -b:a 192k
output.webm

Я хочу кодировать на нескольких разных битовых скоростях (видео и аудио в сочетании):

  • 2192 Кбит/
  • 1692 Кбит/
  • 1000 Кбит/

проблема в том, что независимо от того, какие битовые скорости я ввожу, я всегда получаю файл с битовой скоростью выше 1900 Кбит / с. (1914 kbps с примером кода выше.)

что я делаю не так?

1 ответов


libvpx немного сложно в отношении контроля скорости и настроек качества. Пожалуйста, обратитесь к руководство по кодированию vpx и VP8 кодировать параметр руководство для получения дополнительной информации. Мне потребовался час, чтобы разобраться в исходном коде.

если вы хотите установить постоянный битрейт, вам нужно будет установить b:v, maxrate и minrate к тем же значениям, например, как так (Обратите внимание, что я оставил здесь параметры звука для краткость):

ffmpeg -i input.mov -c:v libvpx -b:v 1900K -maxrate 1900K -minrate 1900K output.webm

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

ffmpeg -i input.mov -c:v libvpx -b:v 1900K -crf 10 output.webm

значение 10 для ОФД является хорошей отправной точкой, но libvpx смогите изменить качество в рамку внутри границы qmin ≤ q ≤ qmax, который вы также можете указать, если вы хотите. Установка нижней границы 10 для qmin кажется мне немного высоким, но по сути вам все равно придется делать некоторые проб и ошибок, так как если максимальный битрейт слишком низок, вы будете постоянно насыщать его.