x264 Frameanalyse (B-Frame-Häufigkeit)

  • Hallo,

    beim Encodieren mit x264 lasse ich max. 4 konsekutive B-Frames zu. Auf ein P oder I-Frame kann also folgendes folgen:

    - kein B-Frame
    - ein B-Frame
    - zwei B-Frames
    - drei B-Frames
    - vier B-Frames

    Gibt es ein Tool, daß mir obige Verteilung für den ganzen Film anzeigt, z.B. 250x0, 3257x1, 1742x2, 230x3, 97x4?

    Gruß

    akapuma

    Wer weiß, wovon er redet, kann es sich leisten, sich verständlich auszudrücken.
    Besucht auch meine Homepage: http://akapuma.info

  • Mit dem -v Parameter gibt x264 dir detaillierte Statistiken zu jedem encodeten Frame aus. Da steht auch dabei welcher Frametyp. Falls dir das zu unübersichtlich ist, müsstest du vielleicht die ausgabe in eine Datei schreiben und mit einem Skript die Verteilung rauslesen.

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Zitat von Selur

    Mal die loglevel Einstellungen durchgechecked?

    Wo find ich die? Das müßten ja die Werte von 2ten Pass sein, oder steht schon beim ersten fest, welcher Frame was wird?

    Zitat von Kopernikus

    Falls dir das zu unübersichtlich ist, müsstest du vielleicht die ausgabe in eine Datei schreiben und mit einem Skript die Verteilung rauslesen.

    Leider gelingt es mir nicht, die Daten (z.B. mit >x264.log) in eine Datei umzuleiten.

    Am liebsten wäre mir natürlich ein Tool, das alle Info's am fertigen Film ermitteln könnte.

    Gruß

    akapuma

    Wer weiß, wovon er redet, kann es sich leisten, sich verständlich auszudrücken.
    Besucht auch meine Homepage: http://akapuma.info

  • Zitat von akapuma


    Leider gelingt es mir nicht, die Daten (z.B. mit >x264.log) in eine Datei umzuleiten.


    Versuch mal sowas wie "x264 irgendwelche Optionen 1>x264.log 2>1 3>1" Damit wird stdout stderr und stdlog (oder so) auf die Datei umgeleitet.

    Zitat


    Am liebsten wäre mir natürlich ein Tool, das alle Info's am fertigen Film ermitteln könnte.

    Gruß

    akapuma

    Es gibt die Kommerzielle Variante Elecard Streameye für 300 $ (aber auch eine kostenlose Testversion)
    http://elecard.com/products/product.php?product_id=146

    oder du versuchst mal h264_parse aus dem MPEG4IPTools:

    http://www.aziendeassociate.it/cd.asp?dir=/mpeg4iptools

    Das funktioniert aber wahrscheinlich nur mit RAW Streams.

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Wie gesagt, oder so...;)

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Hallo,

    der Tip von Kopernikus mit h264_parse war gut. Auch wenn ich per graphedit erst eine RAW-Datei draus machen mußte (wo Selur sich überall rumtreibt:D)

    h264 zeigt z.B. meine Encodingeinstellungen:

    Code
    cabac=1 ref=6 deblock=1:1:1 analyse=0x3:0x133 me=hex subme=6 brdo=1 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 chroma_qp_offset=0 slices=1 nr=0 bframes=4 b_pyramid=1 b_adapt=1 b_bias=30 direct=2 wpredb=1 bime=1 keyint=300 keyint_min=25 scenecut=40 rc=2pass bitrate=490 ratetol=1.0 rceq='blurCplx^(1-qComp)' qcomp=0.60 qpmin=10 qpmax=51 qpstep=8 cplxblur=20.0 qblur=0.5 ip_ratio=1.40 pb_ratio=1.30.


    Dann folgen die Info's zu den einzelnen Frames:


    Das Ergebnis verwirrt mich etwas. Was heißt "frame_num" und "pic_order_cnt_lsb"? Eine Duchnummerierung gibt's ja nicht, der Film hat (geschätzt) > 100000 frames.

    Gruß

    akapuma

    Wer weiß, wovon er redet, kann es sich leisten, sich verständlich auszudrücken.
    Besucht auch meine Homepage: http://akapuma.info

  • frame_num und pic_ord_cnt sind Laufvariablen, die relativ zum letzten IDR Frame laufen. In diesem Fall ist frame_num*2 = pic_ord_cnt, denn das Video ist progressive. Wenn es interlaced encodet wäre, würde mit mbaff und paff das alles nochmal anders aussehen.

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Bevor ich mich in den nächsten Tagen ans Auswerten mache: Die Reihenfolge der Frames ist doch die gleiche, wie sie abgespielt werden, oder? Also nix vertauscht wie bei XviD und packed bitstream?

    Gruß

    akapuma

    Wer weiß, wovon er redet, kann es sich leisten, sich verständlich auszudrücken.
    Besucht auch meine Homepage: http://akapuma.info

  • Nein, beide Werte steigen in Decoding Reihenfolge an, d.h. die Referenzen, auf die sich ein B-Frame bezieht, haben eine niedrigere frame_num als das B-Frame selbst. Die Reihenfolge in deiner Textdatei ist also eine andere als die Darstellungsreihenfolge.

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Hallo,

    ich habe mal mit der Auswertung angefangen. Zuerst habe ich mal die Anzahl aufeinanderfolgender B-Frames gezählt:

    1: 19798
    2: 3009
    3: 2040
    4: 10768

    Das hatte ich schonmal nicht erwartet! Ich hätte eher mit kleiner werdenden Zahlen gerechnet.

    Ein Problem hab ich aber noch. Der Film beginnt von vorn wie folgt:

    Code
    IPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBPPIPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPBPBBBPBBPBBBPBBPBBBPBBPBBPBBBPBBBPBBBPBBBBPBBPBPBPBPBPBPBPPPPPBPBPPPPPPIPBPBPBPBPBPBPBPBBPBPBPBBPBBPBBBPBBBBPBBPBBBPBBPBBPBBPBBPBBPBPBPBBPBBBPBBPBPBPBPBPBPBPPPPBPBPBPBPBPBPBPBPBPBPBPPBPPBPPPBPPBPBPPBPBPBPBPBPBPBPBPBPBPBBBBPBBBPBPBPBPBPPPPPPPPPPPPPBPBPBBBBPBBBBPBBBBPBBBBPBPIPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPBPBBPBPPPPPPPPBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBPBBBPBBPBBPBBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBPBBBPBBBPBBPBBPBBPBPIPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPBPBPBPBPBPBPBPPBPBPPBPBPBPBPBPBPBPBPBPB

    Erst kommt ein I-Frame, dann ein P-Frame, dann 4 B-Frames. Die Wiedergabereihenfolge lautet aber (wie ich Kopernikus verstanden habe) IBBBBP. Woran erkenne ich aber dann 0 B-Frames, also, wenn z.B. auf ein wiedergegebenes I-Frame ein wiedergegebenes P-Frame kommt? An der Reihenfolge "IP" jedenfalls nicht.

    Gruß

    akapuma

    Wer weiß, wovon er redet, kann es sich leisten, sich verständlich auszudrücken.
    Besucht auch meine Homepage: http://akapuma.info

  • In MPEG-1/2 wird in einer GOP zu jedem Frame die Wiedergabeposition abgespeichert, wobei die Frames normalerweise in der Decodier-Reihenfolge im Datenstrom abgelegt sind (am Beispiel der verbreiteten 2-B-Variante):

    Group Start Code
    - Picture Start Code: I-Frame an Playback-Position 0
    - Picture Start Code: P-Frame an Playback-Position 3
    - Picture Start Code: B-Frame an Playback-Position 1
    - Picture Start Code: B-Frame an Playback-Position 2
    - Picture Start Code: P-Frame an Playback-Position 6
    - Picture Start Code: B-Frame an Playback-Position 4
    - Picture Start Code: B-Frame an Playback-Position 5
    - ...

    MPEG-4 kenne ich noch nicht auswendig; die Struktur wird hier eventuell etwas komplexer sein, aber generell sicher vergleichbar.

  • Hallo,

    ich glaube, das Zählen geht viel einfacher:
    IBPBPBBPBBPBBBPBBBP
    Zu jeder B-Frame-Gruppe (B, BB oder BBB) gehört anteilmäßig ein I oder P-Frame. Jetzt habe ich z.B. 20x1B, 10x2B, 5x3B und 8x4B = 43 B-Frame-Gruppen. Wenn ich jetzt in Summe 50 P+I-Frames habe, brauche ich für die B's aber nur 43. Daher habe ich 50-43=7 x 0 B's. (Genau genommen 50-43-1=6, da der Film mit einem I oder B enden sollte)

    Gruß

    akapuma

    Wer weiß, wovon er redet, kann es sich leisten, sich verständlich auszudrücken.
    Besucht auch meine Homepage: http://akapuma.info

  • Hallo,

    ich hab mal was gebastelt:

    - mache aus der mkv-x264-Datei eine RAW-Datei (siehe Post 8)
    - mache mit h264_parse eine Log-Datei, z.B. h264_parse film.raw >film.log (siehe Post 5)
    - rufe h264ex film.log auf

    Man erhält auf dem Bildschirm:

    Code
    [size=8]x264 - core 44 svn-436 - H.264/MPEG-4 AVC codec - Copyleft 2005 - http://www.videolan.org/x264.html - options: cabac=1 ref=6 deblock=1:1:1 analyse=0x3:0x133 me=hex subme=6 brdo=1 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 chroma_qp_offset=0 slices=1 nr=0 bframes=4 b_pyramid=1 b_adapt=1 b_bias=30 direct=2 wpredb=1 bime=1 keyint=300 keyint_min=25 scenecut=40 rc=2pass bitrate=490 ratetol=1.0 rceq='blurCplx^(1-qComp)' qcomp=0.60 qpmin=10 qpmax=51 qpstep=8 cplxblur=20.0 qblur=0.5 ip_ratio=1.40 pb_ratio=1.30."Frames: 136412IDR:    1230      .9 %I:      1332      .98 %P:      60072     44.04 %B:      75008     54.99 %b0: 25788    72.41 %GB      0 %FBb1: 19798    55.59 %GB      26.39 %FBb2: 3009     8.45 %GB       8.02 %FBb3: 2040     5.73 %GB       8.16 %FBb4: 10768    30.23 %GB      57.42 %FB[/SIZE]

    - Zuerst die verwendeten x264-Einstellungen
    - Anzahl der Frames
    - Anzahl der IDR-Frames
    - Anzahl der I, P und B-Frames
    - Häufigkeit konsekutiver B-Frames. %GB heißt Gruppenbezogen (auf die Anzahl der Häufigkeiten 0, 1, 2 etc. bezogen). %FB heißt Framebezogen. b2: 26,39%FB bedeutet, 26,39% aller B-Frames sind zu zweit

    Man erhält noch zusätzlich 2 Dateien. In der einen stehen die Frames:

    Code
    RPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBPPRPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPBPBBBPBBPBBBPBBPBBBPBBPBBPBBBPBBBPBBBPBBBBPBBPBPBPBPBPBPBPPPPPBPBPPPPPPRPBPBPBPBPBPBPBPBBPBPBPBBPBBPBBBPBBBBPBBPBBBPBBPBBPBBPBBPBBPBPBPBBPBBBPBBPBPBPBPBPBPBPPPPBPBPBPBPBPBPBPBPBPBPBPPBPPBPPPBPPBPBPPBPBPBPBPBPBPBPBPBPBPBBBBPBBBPBPBPBPBPPPPPPPPPPPPPBPBPBBBBPBBBBPBBBBPBBBBPBPRPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPBPBBPBPPPPPPPPBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBPBBBPBBPBBPBBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBBPBBBPBBBPBBBPBBPBBPBBPBPRPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPBPBPBPBPBPBPBPPBPBPPBPBPBPBPBPBPBPBPBPBP

    R bedeutet IDR-Frame

    In der nächsten stehen Häufigkeiten der IDR-Intervalle:


    Gruß

    akapuma

    Wer weiß, wovon er redet, kann es sich leisten, sich verständlich auszudrücken.
    Besucht auch meine Homepage: http://akapuma.info

  • bond: nein, pic_order_cnt_lsb ist in decoding reihenfolge.

    akapuma: mmmh, ob man es sich so einfach machen kannn, weiß ich nicht, es können z.B. auch B-Frames als Referenzen verwendet werden.

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Zitat von Kopernikus

    bond: nein, pic_order_cnt_lsb ist in decoding reihenfolge.

    sicher? ich dachte decoding order ist storage order

    wenn du dir die werte für pic_order_cnt_lsb ansiehst sieht man, dass sie für b-frames nicht mit der storage order übereinstimmen.

    Ich weiß, daß ich nichts weiß (Sokrates)

  • Ok, ich habs nochmal genau nachgelesen:

    Zitat

    pic_order_cnt_lsb specifies the picture order count modulo MaxPicOrderCntLsb for the top field of a coded frame or
    for a coded field. The size of the pic_order_cnt_lsb syntax element is log2_max_pic_order_cnt_lsb_minus4 + 4 bits.
    The value of the pic_order_cnt_lsb shall be in the range of 0 to MaxPicOrderCntLsb – 1, inclusive.

    und

    Zitat

    picture order count: A variable having a value that is non-decreasing with increasing picture position in
    output order relative to the previous IDR picture in decoding order or relative to the previous picture
    containing the memory management control operation that marks all reference pictures as “unused for
    reference”.

    und

    Zitat

    output order: The order in which the decoded pictures are output from the decoded picture buffer.

    somit steigt der pic_ord_cnt_lsb in Anzeigeeihenfolge an.

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Zitat von Kopernikus

    somit steigt der pic_ord_cnt_lsb in Anzeigeeihenfolge an.

    und wird bei jedem IDR-Frame wieder auf 0 gesetzt. Dann werde ich mich nächste Woche mal hinsetzen und die Frames sortieren.

    Sehe ich es richtig, daß ein IDR-Frame immer ein I-Frame ist?

    Gruß

    akapuma

    Wer weiß, wovon er redet, kann es sich leisten, sich verständlich auszudrücken.
    Besucht auch meine Homepage: http://akapuma.info

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!