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.
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. –
OK. Denken Sie daran, dass Sie kein [Bearbeiten] vorgenommen haben, um die Informationen, die ich Ihnen zur Verfügung gestellt habe, ebenfalls anzugeben. :-) –
Ich machte die Änderungen, als Sie Ihren Kommentar abgaben. Das ist erledigt. Bitte sag mir was du denkst. – Ross