2016-06-30 8 views
2

私は何年も前の古いコードを使ってMPEG-2ビデオの長さを計算しています。 49秒のビデオでは1時間49秒ということで何か変わったようです。MPEG-2タイムコードを読む

最後のGOPヘッダーがファイルにあり、4バイトのTimeCodeが "040E2AC0"で抽出されます。 32ビットのLongWordでは、リトルエンディアンで3223981572を読み込みます。

次に、アセンブラ関数bswap eaxを使用してエンディアンをスワップします。結果は1 68037312.いくつかのパスカル・コードは、その後...このよう

Hours := (TimeCode shr 26) and $1F; 
Minutes := (TimeCode shr 20) and $3F; 
Seconds := (TimeCode shr 13) and $3F; 

時間を所要時間を抽出されているが、0分でなければなりません0秒で正確である私が「49

で正しいです問題をデバッグするためにビット操作でうまくいかない。これに何か問題はありますか?それが助けになるなら、私はビデオへのリンクを手配することができました。

多くのおかげで、 ロス。

+0

ファイルに含まれる実際の値、 2)*エンディアンが逆転するコード*; 3)その逆転後の値(「TimeCode」)。また、ほとんどの場合、コードが機能しない理由を尋ねるときに、使用している特定の言語のタグを含めることがほとんど役に立ちます。ビデオへのリンクは無関係です。そのリンクが将来消える場合は、その質問には何の価値もありません。 –

+0

OK。私があなたに提供するように頼んだ情報を含めることを[編集]していないことに留意してください。 :-) –

+0

あなたのコメントをしたときに編集していました。それは終わった。あなたの考えを教えてください。 – Ross

答えて

2

ファイルを投稿することをお勧めしました。

あなたはファイルの最初のGOPを見れば、それは04 08 00 40のバイト値を持っている(とあなたが言ったように、最後のGOPが04 0E 2A C0を持っている)

最初のGOPが、結果は01である、あなたの手順を経て実行されます。 00:00、それは正確に1時間です。

私はこれについて何の仕様も見つけられませんでしたが、長さはの差異と最初と最後のGOPの間にあることは明らかです。

+0

これを確認することは決して考えられませんでしたが、それは良い解決策のように思えます。ありがとう! – Ross

関連する問題