2

MPEG-2 ビデオの長さを計算するために、何年も前の古いコードを使用しています。49 秒の動画で 1 時間 49 秒を取得しているため、何かが変わったようです。

ファイル内で最後の GOP ヘッダーが検出され、4 バイトの TimeCode が抽出されます "040E2AC0"。32 ビットの LongWord では、これはリトルエンディアンで 3223981572 として読み取られます。

エンディアンは、アセンブラ関数 bswap eax を使用してスワップされます。結果は 68037312 です。一部の Pascal コードは、次のように期間を抽出します...

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

時間は 1 ですが、0 である必要があります。分は 0 で正しいです。秒は 49 で正しいです。

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

どうもありがとう、ロス。

4

1 に答える 1

2

ファイルを投稿することは良い考えでした。

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

最初の GOP が手順で実行されると、結果は 01:00:00、つまり 1 時間になります。

これに関する仕様は見つかりませんでしたが、明らかに長さは最初と最後の GOPの差です。

于 2016-07-05T23:31:12.660 に答える