1

я использую ffmpeg для создания некоторых транспортных потоков h264. битрейт для видео 496k, для аудио 64k. Однако, когда (2-проходное) кодирование сделано, я получаю поток с более чем 600 КБ. я использую следующий синтаксис в моем сценарии:

codec=h264
streamsuffix=ts
audiocutoff=15000
audioprofile=aac_low
audiosamplerate=48000
video_med=496k
audio_med=64k
suffix_med=_med
preset=veryslow
threads=4
dirname="${1%/*}"
filename=$(basename "$1")
extension="${filename##*.}"
filename="${filename%.*}"

ffmpeg -i $filename"."$extension -preset $preset -strict experimental -threads $threads -c:v $codec -b:v $video_med -bsf:v h264_mp4toannexb -pass 1 -an -f rawvideo -y /dev/null 
ffmpeg -y -i $filename"."$extension -preset $preset -strict experimental -threads $threads -c:a aac -cutoff $audiocutoff -profile:a $audioprofile -b:a $audio_med -ar $audiosamplerate  -c:v $codec -b:v $video_med -bsf:v h264_mp4toannexb -pass 2 $filename$suffix_med"."$streamsuffix

я что-то пропустил? мне нужно обеспечить целевой битрейт? большое спасибо!

2 ответа2

3

Это около 7% накладных расходов для TS. Это о праве. Вывод транспортного потока ffmpeg очень неэффективен. Потоки TS делятся на 188-байтовые пакеты. Каждый пакет имеет 4-байтовый заголовок (оставляя 184 байта полезной нагрузки), и есть один дополнительный заголовок PES на кадр. После того, как служебные данные добавляются в каждый кадр, если кадр не заканчивается на границе TS, окончательный пакет дополняется байтами 0xFF. Вы можете подтвердить это, посмотрев на файл TS с помощью шестнадцатеричного редактора. Вы также можете попробовать кодировать в mp4 и посмотреть на размер файла.

Более подробная информация здесь:http://blog.zencoder.com/2011/12/08/announcing-the-clouds-most-efficient-http-live-streaming/

1

Где определяется $video_hi и где используется video_med ? Вы уверены, что в команде есть правильные переменные?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .