ffmpegの結果ビットレートが予想よりも高くなりました。私は何か見落としてますか?


1

ffmpegを使用して、いくつかのh264トランスポートストリームを作成しています。ビデオのビットレートは496k、オーディオのビットレートは64kです。ただし、(2パス)エンコードが完了すると、600k以上のストリームが得られます。私は私のスクリプトで次の構文を使用しています:

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

私は何か見落としてますか?ターゲットビットレートを適用する必要がありますか?どうもありがとう!

回答:


3

これは、TSの約7%のオーバーヘッドです。そうです。ffmpegのトランスポートストリーム出力は非常に非効率的です。TSストリームは188バイトのパケットに分割されます。各パケットには4バイトのヘッダー(184バイトのペイロードを残す)があり、フレームごとに1つの追加のPESヘッダーがあります。各フレームにオーバーヘッドが追加された後、フレームがTS境界で終了しない場合、最終パケットは0xFFバイトで埋められます。これは、16進エディターでtsファイルを調べることで確認できます。mp4にエンコードして、ファイルサイズを確認することもできます。

詳細はこちら:http : //blog.zencoder.com/2011/12/08/announcing-the-clouds-most-efficient-http-live-streaming/


1

どこで$video_hi定義され、どこでvideo_med使用されますか?コマンドに正しい変数が含まれていますか?


こんにちは、その情報をありがとう。私はコードからいくつかのものを切り取ったので、失われました...元のシェルスクリプトは正しいです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.