Снижение битрейта с помощью ffmpeg с использованием `-b: v 500k` фактически не снижает битрейт до 500k

3635
nburk

Я пытаюсь создать несколько более ранних версий видеофайла с помощью ffmpeg . Я использую следующую команду через командную строку (команда взята из документации ):

ffmpeg -i ../../tos.avi -b:v 500k tos_500k.avi

Я пытаюсь сделать это с несколькими значениями ниже 2000 кбит / с (до ~ 125 кбит / с), однако нижний предел, который фактически получается при проверке сгенерированных видеофайлов, составляет около 2000 кбит / с. Я проверяю значения с помощью программного обеспечения videospec .

  1. У кого-нибудь есть идея, почему дальнейшее снижение битрейта, похоже, не имеет никакого эффекта?
  2. Можете ли вы дать мне подсказку, как эффективно снизить битрейт видео до заданного уровня?

[EDIT] Чтобы быть более точным, мое оригинальное видео имеет разрешение 1920x1080 с битрейтом около 15 Мбит / с. Используя вышеупомянутую команду, я могу без проблем понизить ее до больших битрейтов, таких как 8000, 5000, до 2000 кбит / с. Тем не менее, все, что ниже 2000, кажется, не обрабатывается, в результате выходные файлы всегда застряли с битрейтом чуть более 2000 кбит / с. (Размер файла также очень близок к файлу, который был успешно уменьшен до 2000 кбит / с.)

1

1 ответ на вопрос

5
Ely

При перекодировании файла вы не должны просто указывать битрейт. Я предполагаю, что ffmpeg пытается использовать кодек mpeg4 по умолчанию и отказывается использовать менее 2 Мбит / с, потому что он просто не может опуститься ниже с таким высоким разрешением.

Я предлагаю вам перекодировать с помощью кодека H.264, который вы можете сделать так:

ffmpeg -i ../../tos.avi -c:v libx264 -b:v 500k tos_500k.mp4 

Тем не менее, обратите внимание, что при этом будет использоваться метод средней скорости передачи данных за 1 проход, что довольно плохо сказывается на качестве. Вместо этого вы должны попробовать кодирование с «коэффициентом постоянной скорости», то есть вы нацеливаетесь на определенное качество, и кодировщик решает, какой средний битрейт является лучшим для вашего файла:

ffmpeg -i ../../tos.avi -c:v libx264 -crf 23 tos_500k.mp4 

Вы можете экспериментировать со значением crf. Увеличение его будет означать более низкий битрейт и худшее качество, а наоборот - снижение.

Если вы абсолютно хотите выбрать среднюю скорость передачи данных, вам следует воспользоваться 2-проходной кодировкой . Также не забывайте про пресеты !

Как примечание: 500k для 1080p слишком мало, и вы получите плохие результаты. Если вы хотите использовать такой низкий битрейт, я советую уменьшить его до 480p (854x480). 720p должен иметь битрейт не менее 1,5 Мбит / с и 3 Мбит / с 1080p.

Для ваших будущих вопросов, не забудьте опубликовать журналы ввода / вывода из ffmpeg, они всегда полезны :-).

Отлично, большое спасибо за информацию и дополнительный вклад! :) nburk 9 лет назад 0

Похожие вопросы