2016-06-30 15 views
2

Ich verwende einen alten Code von vor vielen Jahren, um die Dauer von MPEG-2-Videos zu berechnen. Es scheint, dass sich etwas geändert hat, da ich 1 Stunde und 49 Sekunden für ein 49-Sekunden-Video bekomme.MPEG-2-Timecode lesen

Der letzte GOP Header befindet sich in der Datei und der 4 Byte TimeCode wird "040E2AC0" extrahiert. In einem 32-Bit-LongWord liest dies Little Endian als 3223981572 ein.

Der Endian wird dann mit einer Assembler-Funktion bswap eax ausgetauscht. Das Ergebnis ist 68037312. Einige Pascal Code extrahiert dann die Dauer so ...

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

Stunden 1 ist aber sollte 0 Minuten korrekt auf 0 Sekunden bei 49 richtig ist

I‘ Ich bin nicht gut mit Bit-Manipulation, um das Problem zu debuggen. Stimmt etwas nicht? Ich könnte einen Link zu dem Video arrangieren, wenn das helfen würde.

Vielen Dank, Ross.

+0

Es wäre hilfreich zu sehen 1) den tatsächlichen Wert der Datei enthält; 2) der Code, der dazu führt, * dass der Endian umgekehrt wird *; und 3) der Wert nach dieser Umkehrung ('TimeCode'). Es hilft auch fast immer, ein Tag für die spezifische Sprache zu verwenden, die Sie verwenden, wenn Sie danach fragen, warum der Code nicht funktioniert. Ein Link zum Video wäre irrelevant; Wenn diese Verbindung in der Zukunft verschwindet, hat das keinen Wert mehr für die Frage. –

+0

OK. Denken Sie daran, dass Sie kein [Bearbeiten] vorgenommen haben, um die Informationen, die ich Ihnen zur Verfügung gestellt habe, ebenfalls anzugeben. :-) –

+0

Ich machte die Änderungen, als Sie Ihren Kommentar abgaben. Das ist erledigt. Bitte sag mir was du denkst. – Ross

Antwort

2

Das Posten Ihrer Datei war eine gute Idee.

Wenn Sie bei der ersten GOP in der Datei suchen, hat es Byte-Werte von 04 08 00 40 (und die letzte GOP hat 04 0E 2A C0 wie Sie gesagt haben)

Wenn die erste GOP durch Ihre Prozedur ausgeführt wird das Ergebnis 01: 00:00, das ist genau 1 Stunde.

Ich habe keine Spezifikation für diese gefunden, aber offensichtlich ist die Länge der Unterschied zwischen ersten und letzten GOP.

+0

Ich hätte nie gedacht, das zu überprüfen, aber das klingt nach einer guten Lösung. Dank dafür! – Ross