Hast, recht, die 64bit Variante läuft ohne Probleme,.. ich guck noch mal drauf,.. (muss irgendwas beim Compilieren schief gelaufen sein)
-> noch mal 32bit neu compiliert, getestet und neu hochgeladen
Wie schnell den Framecount eines H.264 raw streams ermitteln?
-
-
Korrigiert mich bitte, wenn ich mich irre, aber wäre es nicht am einfachsten die Access Units zu zählen?
Grüße
-
Wenn Du mir sagst an welchen Bytesequenzen die erkenne kann ich eine entsprechende Version schreiben.
-
Den Access Unit Delimiter am Anfang jeder Access Unit erkennst an folgender Sequenz:
ZeroByte->Start_Code_Prefix_One_3Bytes
Wobei das ZeroByte(treffenderweise) 0x00 ist und die 3 Bytes des Start_Code_Prefix_One_3Bytes die Struktur 0x000001 haben.
Grüße
-
00 00 00 01 ist der Start-code-prefix für eine NAL Unit und nicht für Access Units. Damit kannst du die Anzahl der NAL Units ermitteln, hat aber mit der Frameanzahl absolut nichts zu tun.
-
Yup, das ist bei dem Samplestream von vorher gut zu sehen.
-
Sorry mein Fehler! Der Accesss Unit Delimiter wird natürlich durch den Bytewert 9 nach dem Start_Code_Prefix der NAL Unit festgelegt, d.h. die Byte Sequenz zur Erkennung des AUD lautet: 00 00 00 01 09
Grüße
-
Den Accesss Unit Delimiter zu zählen wäre sicherlich die einfachste Lösung, leider ist dieser nur optional.
-
Hab eine Command Line .exe des FrameCounter für avc und vc-1 raw streams erstellt: http://www.selur.info/framecounter.zip
Aufruf:Cu Selur
-
Mit rohen AVC-Videos klappt es ... ob es korrekt ist, weiß ich noch nicht.
-
Falls jemand ein kleines Sample hat bei dem die Anzahl nicht korrekt ist würde ich mich über so ein Sample freuen, damit ich mir das mit nem Hexeditor mal genauer angucken kann.
Cu Selur
-
Aktuellen source code findet man hier: http://forum.selur.de/post42.html#p42
Kleines Problem besteht aktuell: Wenn der Input mit x264 und --sliced-threads erstellt wurde, ist der FrameCount viel zu hoch, d.h. es muss wohl irgendwas geändert werden damit man auch in solchen Clips den Framecount richtig ermittelt.
Cu Selur
-
Zitat
ist der FrameCount viel zu hoch, d.h. es muss wohl irgendwas geändert werden damit man auch in solchen Clips den Framecount richtig ermittelt.
Sind im ersten Slice weniger als 255 Makroblocks, so stimmt die Kalkulation nicht.
Probier mal nicht die NAL Units mitZitatY != 0
sondern nur die
ZitatY >= 0x80
zu zählen.
Der first_mb_in_slice Wert ist Exp-Golomb kodiert.
Das heißt er ist nur dann 0 wenn das MSB 1 ist, ergo Byte >= 0x80. -
Mift, erst nach dem aktuellen Hybrid update gelesen,..
ehmm,... 0x80 ist doch gerade 0x01 0x00,... (von wegen Hex 8 = 0) -> UNfug,...
meinste ich soll also ein byte später auch 00 checken? -> macht die Sache nur schlimmeres klappt wenn ich auf y < zero teste,..
-
Zitat
meinste ich soll also ein byte später auch 00 checken? -> macht die Sache nur schlimmer
00 00 00 01 65 X
00 00 00 01 41 X
1) Dieses Byte X enthält als erstes den Wert für "first_mb_in_slice" ,
2) du willst von jedem Frame nur das erste Slice haben
3) das erste Slice hat als Wert für "first_mb_in_slice" immer 0
4) "first_mb_in_slice" is Exp-Golomb kodiert
5) das heißt im ersten Slice ist für X das erste bzw MSB immer gesetztZitat1000 0000
-> der HEX Wert ist größer gleich 0x80
-> du sollst den HEX Wert nicht auf X != 0 prüfen und zählen sondern auf HEX Wert X >= 0x80 prüfen und zählen. -
Oder eine AND-Prüfung: Wenn (X & 0x80h) > 0, dann ist das Bit gesetzt, dann ist es das erste Slice im Frame.
-
Danke!!
-
Wollte mal fragen ob sich jemand mit H.265 beschäftigt hat und etwas dazu sagen kann wie man einen H.265 raw stream parsen müsste. (Würde gerne FrameCounter ausbauen, aber noch 0-Plan von dem Bitstream.)
-
Weiß ich auch noch nicht; aber im englischen doom9-Forum sind doch auch die Entwickler von x265 und anderer Software, da weiß bestimmt jemand genaueres.
-
Sollte eigentlich ähnlich funktionieren wie bei H.264
Die NAL Units sind nun aber nur mehr durch 6 Bits gekennzeichnet.
00 00 01 XX YY ZZ
XX - 00000000 - rote Bits auswerten (0 bis 31 sind Picture Slices)
YY - 00000000
ZZ - 00000000 - rotes Bit ist das first_slice Flag, wenn 1 dann die Unit als Frame zählen -
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!