web-dev-qa-db-ja.com

ffmpegはどのようにして個々のストリームビットレートを決定しますか?

たとえば、ffmpegが表示するビデオがあります

再生時間:00:46:43.72、開始:0.540000、ビットレート:2593 kb/s 
ストリーム#0.0 [0x1e0]:ビデオ:mpeg2video(メイン)、yuv420p、720x576 [PAR 16:15 DAR 4:3]、9000 kb/s、25 fps、25 tbr、90k tbn、50 tbc 
ストリーム#0.1 [0x80]:オーディオ:ac3、48000 Hz、ステレオ、s16、448 kb/s 

ファイルのサイズは908843008バイトであるため、2593 kb/sが正しいです。しかし、なぜビデオストリームのビットレートが9000 kb/sであると言われるのでしょうか?

4
Prateek

MPEGストリームは通常、エンコードが容易なビデオのセクションのスペースを節約するために可変ビットレートエンコーディングを使用するため、品質が向上します。 FFMpegは、ビデオストリームのシーケンスヘッダーに保存されているビットレートを報告しています。これは、ファイル全体の最大ビットレートです(または、多くの場合、エンコーダーが許可するように構成された最大ビットレートです。実際のファイルには、を使用するセクションがない場合があります。これと同じくらい高いビットレート)。値9000kbpsは、DVDからの(またはDVD宛ての)MPEG2ストリームの典型的な値です。DVDのビデオとオーディオの最大ビットレートは9800kbpsであるため、オーディオ用に最大500kbps、ナビゲーションパケットやその他のオーバーヘッド用にいくらかのスペアが可能です。

4
Jules

一般に、ffmpegは、可能な場合(ヘッダー形式を認識する場合)にファイルヘッダーを使用し、それ以外の場合は、期間とファイルサイズからの計算にフォールバックします。

ラッパー形式(mov、mp4など)には独自のビットレートはありません(ビットレートは個々のストリームの特性です)が、継続時間はあります。 ffmpegは、ファイルサイズと期間からビットレートを計算できます。

ただし、ストリーム自体のビットレートはストリームヘッダーで指定されるため、メタデータから直接読み取ることができます。これは、ビットレートがヘッダーで誤って指定されているか、開始時に9000kb/sであり、より低いビットレートに減少するか、ファイルが完全ではないためにストリームが切り捨てられる可能性があることを意味します。期待されます。

ビデオコンポーネントを抽出する場合(例:ffmpeg -i myfile.mov -vcodec copy -an testfile.m2v、使用法はソフトウェアのバージョンによって異なります)、さらに調査して、表示されているビットレートがどこから来ているのかを突き止めることができる場合があります。

2
tenorkev