Кодирование видео H.264 CBR с помощью FFmpeg - PullRequest
12 голосов
/ 19 августа 2011

Я пытаюсь закодировать видео с помощью ffmpeg в H.264 (через библиотеку libx264) с постоянной скоростью передачи данных. Я знаю, я знаю, VBR часто предпочтительнее, но для этой конкретной работы мне необходимо использовать CBR (до тех пор, пока это так много килобайт в секунду; это не обязательно должен быть точный килобайт в кадре) , Вот пример моего видео, которое я использую для тестирования: http://a1408.g.akamai.net/5/1408/1388/2005110403/1a1a1ad948be278cff2d96046ad90768d848b41947aa1986/sample_iTunes.mov.zip (взято из http://support.apple.com/kb/HT1425)

Я могу получить постоянную скорость передачи данных при кодировании видео с помощью видео MPEG-4 (используя команды ffmpeg -i sample_iTunes.mov -b 819968 -minrate 819968 -maxrate 819968 out.mov), и скорость передачи данных соответствует ожидаемой. При чтении спецификаций видео через QuickTime Inspector, скорость передачи данных составляет 844,94 кбит / с. Круто.

Однако, когда я изменяю кодек на libx264, он, кажется, полностью игнорирует мои запросы битрейта! Я пробую команду "ffmpeg -i sample_iTunes.mov -vcodec libx264 -vpre medium -b 819968 -vb 819968 -minrate 819968 -maxrate 819968 -bufsize 400000 test.mov". Но когда я проверяю характеристики видео через QuickTime Inspector, скорость передачи данных составляет 254,74 кбит / с. WTF? Это даже не близко!

Я пытался изменить так много параметров и добавить кучу разных вещей, и я потратил 2 дня на поиски, но я не могу заставить его работать. Если я закодирую видео с помощью кодера MainConcept H.264, я получу постоянный битрейт, но мне нужно это для работы с ffmpeg.

Если кто-то может помочь мне разобраться, как выполнять кодирование CBR H.264 с помощью FFmpeg, я буду любить вас вечно!

Ответы [ 4 ]

6 голосов
/ 15 октября 2011

Я тоже пытался вытащить CBR из x264.Я нашел этот блог post от Dark Shakari довольно интересным.

Вот что я имею для CBR-видео с малой задержкой для потока передачи MPEG:

ffmpeg -i sintel_trailer-720p.mp4 -an -tune zerolatency \
       -x264opts bitrate=4000:vbv-maxrate=4000:vbv-bufsize=166 \
       -vcodec libx264 -f mpegts -muxrate 4000K -y trailer.ts

Согласноустановленный вами блог разработчика x264:

  • vbv-maxrate = битрейт = B = целевой битрейт
  • vbv-bufsize = B / fps (в данном случае это 24 кадра в секунду)

Наконец, установите переключатель ffmpeg для x264 -tune zerolatency.

Надеюсь, это полезно.И, если у кого-то есть улучшения, пожалуйста, дайте мне знать!

4 голосов
/ 28 апреля 2014

Укажите -nal-hrd cbr после -bufsize 400000.

0 голосов
/ 13 июля 2012

Это может быть подсказка (при условии, что у вас установлен битрейт) «CBR - это когда maxrate == битрейт и установлен размер буфера»bitrate-exist-in-libx264-td2255554.html

bufsize предполагается максимальным размером буфера "принимающего клиента".

0 голосов
/ 27 августа 2011

Хорошо, так что я думаю, что, возможно, нашел часть проблемы. Создание -bufsize больше, чем скорость передачи данных, похоже, решило проблему. Конечно, я не знаю, кодирует ли он real CBR, но скорость передачи данных, которую читает Quick Time Inspector, выглядит прямо сейчас.

...