2016-05-23 2 views
0

私は通常MediaInfoを使用してメディアファイルを調べ、ファイル内のビデオ/オーディオトラックの長さを確認します。私は、おそらくスピードのために、実際のファイルストリームではなく、ファイル(ヘッダー)のメタデータをMediaInfoが見ていると思います。私は実際にファイルを通ってメディアファイル内のビデオ/オーディオトラックの長さを調べるツールを望んでいます。ビデオ/オーディオファイル分析 - MediaInfoに似たメタデータ

これは、正しいオーディオトラック期間を報告していないメディアファイルのインスタンスがあるためです。例:オーディオファイルとビデオファイルvid1.mxfとaud1.mxfの2つのファイルがありますが、これらは同じ長さです。私はこれらをまとめてFFMPEGを使用していますが、ストレージ障害/ネットワークの問題により、結果ファイルのオーディオトラックが短くなります。 MediaInfoでは短いとは報告されません。ファイルを聞いても明らかに短いですが、ネットワーク/ストレージデバイスは、「ステッチング」の間にアクセスできない状態になっているに違いありません。オーディオおよびビデオ入力ファイルは、異なるストレージデバイス上にあります。

これまでこのC#ライブラリhttps://github.com/naudio/NAudioを使用していましたが、コンテナ内のビデオ(.mxf)があるファイルではなく単数.wavファイルのみで動作します。

おかげ

答えて

1

これは、ファイル、それが取るより多くの時間をffprobeを使用して行われますが、大きなことができます。

ステップ1これは、ラインがビデオの両方のために、この

packet|pts_time=4.480000|duration_time=0.040000 

ステップ2計算期間

のように見える読み出しを生成

ffprobe input.mxf -select_streams v -show_entries packet=pts_time,duration_time -of compact 

ffprobe input.mxf -select_streams a -show_entries packet=pts_time,duration_time -of compact 

生の情報を抽出し、オーディオストリーム、あなたは、一見でpts_timeを見てほしい最後の行にはpts_timeduration_timeがあります。ストリーム期間は、その後

pts_time(last line) + duration_time(last line) - pts_time(first line) 

durationフィールドにもありますが、それはすべてのコンテナ形式で値を記録しません。

ffprobe input.mxf -show_entries stream=duration 
+0

実際には、これは機能しません。それは完全に(ビデオと同じ持続時間)オーディオトラックをデコードし、MediaInfoとまったく同じ持続時間を示します。私はffmpegでそれをデコードし、オーディオストリームをコピーしてヌルに出力して同様のことを試しましたが、オーディオを聞いても約25秒でオーディオが停止しますが、30秒(ビデオ)は完全にデコードされます。 – user3585420

+0

その後、最後の5秒間、ヌルオーディオサンプルがあります。オーディオストリームとビデオストリームは独立したエッセンスです。 ffprobeはパケットエントリがない場合はパケットエントリを生成しません。これを試してみましょう:オーディオ抜粋 'ffmpeg -i video -t 5 -vn aud.mp4'を抽出します。ここで' 5 'は動画の継続時間よりも小さい値です。その後、 'ffmpeg -i video -i aud.mp4 -c copy -map 0:v -map 1:a joined.mp4'を実行します。次に、ステップ1のコマンドを実行し、最後のpts_time値を比較します。 – Mulvya

関連する問題