MeGUI, x264, Fragen zu Profile@Level

  • Hallo!

    Ich experimentiere mit einem 1080p Schnipsel. Wenn ich einmal so codiere:

    Code
    program --preset slow --tune animation --crf 20 --output "output" "input"


    erhalte ich folgende Datei

    Code
    VideoID                                       : 1Format                                   : AVCFormat/Info                              : Advanced Video CodecFormat profile                           : High@L5.0Format settings, CABAC                   : YesFormat settings, ReFrames                : 10 framesCodec ID                                 : V_MPEG4/ISO/AVCDuration                                 : 41s 750msBit rate                                 : 6 360 KbpsWidth                                    : 1 920 pixelsHeight                                   : 1 080 pixelsDisplay aspect ratio                     : 16:9Frame rate                               : 23.976 fpsColor space                              : YUVChroma subsampling                       : 4:2:0Bit depth                                : 8 bitsScan type                                : ProgressiveBits/(Pixel*Frame)                       : 0.128Stream size                              : 31.7 MiB (98%)Writing library                          : x264 core 129 r2230 1cffe9fEncoding settings                        : cabac=1 / ref=10 / deblock=1:1:1 / analyse=0x3:0x113 / me=umh / subme=8 / psy=1 / psy_rd=0.40:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=5 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=240 / keyint_min=23 / scenecut=40 / intra_refresh=0 / rc_lookahead=50 / rc=crf / mbtree=1 / crf=20.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:0.60Language                                 : EnglishDefault                                  : YesForced                                   : No

    Die kann ich mit meinem Samsung SmartTV nicht abspielen. Nach http://www.samsungdforum.com/Guide/rel00010/index.html dürfte das an dem Level liegen. Der Fernseher kann nur bis Level 4.1 wiedergeben. Allerdings verstehe ich nicht, warum x264 in diesem Fall überhaupt Level 5.0 wählt, denn nach http://de.wikipedia.org/wiki/H.264#Level würde Level 4.0 doch auch reichen, oder nicht?

    Wenn ich dann also nochmal so codiere:

    Code
    program --level 4 --preset slow --tune animation --crf 20 --output "output" "input"


    erhalte ich folgende Datei

    Die kann der Fernseher jetzt tatsächlich wiedergeben, aber ich verstehe nicht warum? Die Bitrate ist bei beiden Dateien gleich hoch und auch die Parameter sind fast alle gleich. Ich würde denken, der einzige signifikante Unterschied ist die Anzahl der Referenz-Frames (oben 10 unten 4). Warum wurde dieser Parameter mit Beschränkung des Levels auf 4.0 verändert? Ich dachte die Levels sind nur Grenzwerte für die Bitrate, die ja auch noch bei beiden Dateien gleich ist?

    Warum tritt dieses Verhalten nur bei diesem Schnipsel auf, dessen Auflösung volle 1920x1080 beträgt? Wenn ich einen Schnipsel verwende, bei dem ich schwarze Ränder entfernen musste und die Zielauflösung 1920x800 beträgt wird auch ohne Festlegung des Levels automatisch High@L4.0 gewählt?

    Wer kann ein bischen Licht ins Dunkel bringen!

    Guten Rutsch und ein frohes und erfolgreiches Jahr 2013!
    Indy

  • Hallo nochmal!

    Witzig! Das ganze hängt auch mit dem --tune Parameter zusammen. Wenn man AVC Level auf "unrestricted/autoguess" belässt ergibt sich folgendes Bild:
    1080p
    --tune film -> High@L5.0
    --tune animation -> High@L5.0
    1920x800 (wg. schwarzer Balken)
    --tune film -> High@L4.0 <----------
    --tune animation -> High@L5.0

    Wie geht das?

    Gruß,
    Indy

  • + Wenn Du Profile&Level Beschränkungen erfüllen willst/musst, so sollte:
    1. das Profile&Level eingestellt sein
    2. die entsprechenden VBV Einschränkungen gesetzt sein (nicht 0 !)
    3. falls b-frame Pyramid genutzt wird, muss dieses auf 'strict' stehen

    Zitat

    --tune Parameter zusammen.


    deshalb wäre es vermutlich sinnig mal zu gucken was der Parameter denn genau bewirkt,.. ;)

  • Guten Morgen!

    + Wenn Du Profile&Level Beschränkungen erfüllen willst/musst, so sollte:
    1. das Profile&Level eingestellt sein

    check.

    Zitat

    2. die entsprechenden VBV Einschränkungen gesetzt sein (nicht 0 !)

    Du meinst, dass das nicht automatisch mit der Wahl des entsprechenden Levels eingestellt wird? Z.B. in meGUI? Wird's nicht, wie ich gerade sehe. Deshalb die wahrscheinlich dumme Frage, wo ich diese Zahlen herbekomme!?

    Zitat

    3. falls b-frame Pyramid genutzt wird, muss dieses auf 'strict' stehen

    Warum? Das wird in meGUI auch nicht automatisch gesetzt. Woher weiß man diese Sachen?

    Zitat

    deshalb wäre es vermutlich sinnig mal zu gucken was der Parameter denn genau bewirkt,.. ;)

    Aus Brother Johns Encodingwissen:

    Was ich aber eigentlich wissen müsste: Scheinbar wird das Level eben nicht nur durch die Bitrate bestimmt, oder? Welche Parameter beeinflussen denn wie das Level?

    Gruß,
    Indy

  • Schau mal in die englische Wikipedia, dort findest Du in der rechten Spalte der entsprechenden Tabelle auch Beispiele für die Anzahl der erlaubten Ref-Frames und darunter auch eine Erklärung dazu. Die Level beschränken nicht nur die Bitrate, sondern auch Auflösung/Bildrate und eben die Ref-Frames. --tune-animation verdoppelt die Anzahl der Ref-Frames und verändert dementsprechend auch das level.

  • Hallo nochmal!

    Wenn ich noch einmal drüber nachdenke: Wenn man (besonders auch bei aktiviertem B-Pyramid) sowohl die Anzahl der B-Frames als auch die Anzahl der möglichen Referenz-Frames erhöht (bei --tune animation im Vergleich zu --tune film), dann müssen für die Decodierung eines bestimmten Frames viel mehr andere Frames im Speicher gehalten werden. Sprich der VBV-Buffer muss größer sein - definitiv eine Gerätebeschränkung (Fernseher). Dann verstehe ich noch nicht ganz, warum hier http://de.wikipedia.org/wiki/H.264#Level die Gesamtvideobitrate (?) angegeben ist und nicht die Größe des VBV-Buffer und woher man "die richtigen" Werte für --vbv-maxrate und --vbv-bufsize bekommt.

    Gruß,
    Indy

  • Deshalb die wahrscheinlich dumme Frage, wo ich diese Zahlen herbekomme!?

    Zum Beispiel aus der zweiten dieser schönen Tabellen, falls es um Kompatibilität zu Blu-ray von gebrannter Scheibe geht. Die VBV-Größen hängen unter anderem von der Geschwindigkeit ab, mit der encodiertes Material gelesen werden kann (der Flaschenhals bei Geräten mit optischen Laufwerken oder Netzwerkanbindung), aber auch, wie groß der verbaute Pufferspeicher ist (der Flaschenhals bei kleinen mobilen Playern); solche Werte zu berechnen erfordert also technisches Hintergrundwissen und ist immer abhängig vom Gerät bzw. dem Hardwarestandard, den der Player erfüllen will.

    Die Option "--b-pyramid strict" ist auch Teil des Sammel-Parameters "--bluray-compat" von x264, um Kompatibilität mit Blu-ray-kompatiblen Playern herzustellen.


    Was ich aber eigentlich wissen müsste: Scheinbar wird das Level eben nicht nur durch die Bitrate bestimmt, oder? Welche Parameter beeinflussen denn wie das Level?

    Nicht die encodierte Bitrate, sondern Bildfläche und Framerate, also "Makroblocks pro Sekunde":

    Deutsche / englische Wikipedia zu H.264

  • Nicht die encodierte Bitrate, sondern Bildfläche und Framerate, also "Makroblocks pro Sekunde":

    Doch, auch von der Bitrate.

    Hier mal die allgemeine, nicht Blu-Ray-spezifische H.264-Tabelle:
    [Blockierte Grafik: https://forum.handbrake.fr/download/file.php?id=50&sid=27ffdae5eb5f5a8993c782e0d94f70fb&mode=view]

    Der vbv-Puffer ist der Puffer der komprimierten Daten und hat mit den Referenzen nicht direkt etwas zu tun. Diese lagern im DPB, also dem Puffer für die unkomprimierten Bilder.

  • Zitat

    Du meinst, dass das nicht automatisch mit der Wahl des entsprechenden Levels eingestellt wird?


    Machen nur wenige GUIs. (Hybrid sicher, andere Tools kann Dir sicher wer anders empfehlen)

    Zitat

    Wird's nicht, wie ich gerade sehe. Deshalb die wahrscheinlich dumme Frage, wo ich diese Zahlen herbekomme!?


    sollte z.B. im Wiki stehen: https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC
    (hab ich mir damals für Hybrid mal rausgeschrieben,...)

    Zitat

    Warum? Das wird in meGUI auch nicht automatisch gesetzt.


    k.A. ob MeGui das selber einstellt, ich vermute aber nicht, da es die VBV Werte auch nicht anpasst.
    Strict wird vor allem für Blu-ray Kompatibilität gebraucht, sollte also zumindest verwendet werden, wenn man Level&Profile verwendet die Blu-ray konform sind.

    Zitat

    Woher weiß man diese Sachen?


    Wissen tut man das weil man sich damit beschäftigt hat. :D

    Zitat

    Scheinbar wird das Level eben nicht nur durch die Bitrate bestimmt, oder? Welche Parameter beeinflussen denn wie das Level?


    Nicht nur. Manche Optionen, Auflösungen, Datenraten, Anzahl Referenzframes, Anzahl der Markoblöcke pro Sekunde setzen ein gewisses Level/Profile voraus.
    x264 setzt automatisch das Level&Profile, welches es vermutet das benötigt wird, dies muss aber nicht richtig sein! (da z.B. wenn nur VBV-Werte z.B. High@4.1 benötigen und der Rest nicht, x264 nur eine Warnung bzgl. der VBV Werte ausgibt und nicht das Level entsprechend anpasst -> man sollte also Wissen was man tut, oder ein GUI verwenden die solche Einstellungen für einen macht)
    -> was für Einschränkungen die Profiles&Level haben steht im Wiki

    Zitat

    Aus Brother Johns Encodingwissen: ...


    Bin mir nicht ganz im klaren darüber was Du mir damit sagen willst. :)

    Cu Selur

    Ps.: hui, LigH und sneaker2 waren flotter und sneaker2 ne schöne Übersicht bzgl. VBV gepostet. (-> Handbrake scheint also die richtigen VBV Werte auch zu kennen)
    PPs.: da bei den Beschränkungen spielt einige mit rein. :)

  • 3. falls b-frame Pyramid genutzt wird, muss dieses auf 'strict' stehen

    Warum? Das wird in meGUI auch nicht automatisch gesetzt. Woher weiß man diese Sachen?

    k.A. ob MeGui das selber einstellt, ich vermute aber nicht, da es die VBV Werte auch nicht anpasst.
    Strict wird vor allem für Blu-ray Kompatibilität gebraucht, sollte also zumindest verwendet werden, wenn man Level&Profile verwendet die Blu-ray konform sind.

    Noch mal ganz ausdrücklich zur B-Pyramid-Diskussion:
    Ist hier irrelevant und muß nicht verstellt werden, weil das Blu-Ray-spezifisch ist und mit dem Samsung-Fernseher nichts zu tun hat. Der entsprechende Hinweis verwirrt hier IMHO nur.

  • Ich rätsel momentan auch noch, wie das Level zustande kommt. Ich kodiere einen Zeichentrickfilm mit x264 in MeGUI in der Auflösung 1920x1080. Ich setze Tuning auf "Animation" und den AVC Level auf "Unrestricted/Autoguess". Das Ergebnis hat 10 Reference Frames und laut MediaInfo das Profil "High@L5.0". Soweit so gut. Wenn ich mit "--level 4" kodiere, hat das Ergebnis 4 Reference Frames und als Profil "High@L4.0". Auch das verstehe ich.

    Was ich nicht verstehe: Wenn ich einen anderen Film mit Tuning "Film" in der Auflösung 1920x800 kodiere, hat das Ergebnis 5 References Frames und als Profil "High@L4.0". Wenn ich den Zeichentrick nun ebenfalls mit Ref 5 kodiere, ist das Profil hinterher aber "High@L5.0", selbst dann, wenn ich die Auflösung verringere. Der Logik zufolge müsste ja einer der "Animation"-Parameter verantwortlich sein, weil sich ja sonst nichts ändert, aber wie kommt dann "High@L4.0" zustande, wenn man Ref 4 setzt und die anderen Parameter unverändert sind? Müsste es im Falle dieses Zeichentrickfilms nicht trotzdem "High@L5.0" sein. Die resultierenden Dateigrößen unterscheiden sich nur um wenige MB und sehen optisch für meine Augen gleich aus, also worin genau besteht jetzt der Vorteil bzw. der Flaschenhals?

  • Kleiner Ausschnitt aus x264 --fullhelp:

  • --tune animation passt mehr als einen Parameter an.

    Schon klar, ich verstehe nur nicht die Regel, nach der das Level "geschätzt" wird. Nochmal zum Verständnis:

    Zeichentrickfilm, --tune animation, -ref 4:

    Code
    Format                                   : AVCFormat/Info                              : Advanced Video CodecFormat profile                           : High@L4.0Format settings, CABAC                   : YesFormat settings, ReFrames                : 4 framesDuration                                 : 1h 15mnBit rate                                 : 7 186 KbpsWidth                                    : 1 920 pixelsHeight                                   : 1 040 pixelsDisplay aspect ratio                     : 1.85:1Frame rate                               : 23.976 fpsColor space                              : YUVChroma subsampling                       : 4:2:0Bit depth                                : 8 bitsScan type                                : ProgressiveBits/(Pixel*Frame)                       : 0.150Writing library                          : x264 core 129 r2230 1cffe9fEncoding settings                        : cabac=1 / ref=4 / deblock=1:1:1 / analyse=0x3:0x113 / me=umh / subme=8 / psy=1 / psy_rd=0.40:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-2 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=4 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=1 / weightp=2 / keyint=240 / keyint_min=23 / scenecut=40 / intra_refresh=0 / rc_lookahead=50 / rc=crf / mbtree=1 / crf=16.0 / qcomp=0.60 / qpmin=0 / qpmax=48 / qpstep=4 / ip_ratio=1.40 / aq=1:0.60

    Zeichentrickfilm, --tune animation, -ref 5:

    Code
    Format                                   : AVCFormat/Info                              : Advanced Video CodecFormat profile                           : High@L5.0Format settings, CABAC                   : YesFormat settings, ReFrames                : 5 framesDuration                                 : 1h 15mnBit rate                                 : 7 158 KbpsWidth                                    : 1 920 pixelsHeight                                   : 1 040 pixelsDisplay aspect ratio                     : 1.85:1Frame rate                               : 23.976 fpsColor space                              : YUVChroma subsampling                       : 4:2:0Bit depth                                : 8 bitsScan type                                : ProgressiveBits/(Pixel*Frame)                       : 0.150Writing library                          : x264 core 129 r2230 1cffe9fEncoding settings                        : cabac=1 / ref=5 / deblock=1:1:1 / analyse=0x3:0x113 / me=umh / subme=8 / psy=1 / psy_rd=0.40:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-2 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=4 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=1 / weightp=2 / keyint=240 / keyint_min=23 / scenecut=40 / intra_refresh=0 / rc_lookahead=50 / rc=crf / mbtree=1 / crf=16.0 / qcomp=0.60 / qpmin=0 / qpmax=48 / qpstep=4 / ip_ratio=1.40 / aq=1:0.60

    Es ist alles gleich bis auf die Anzahl der ReFrames. Der Unterschied bei der Bitrate ist vernachlässigbar. Daraus ziehe ich den Schluss, dass im Falle von "--tune animation" 4 ReFrames Level 4 bedeutet und 5 oder mehr ReFrames Level 5.

    Realfilm, --tune film, -ref 5:

    Es unterscheiden sich aufgrund des Tunings diverse Parameter von dem Zeichentrickfilm, außerdem haben wir eine andere Auflösung und Bitrate. Dennoch ist es "High@L4.0". Logisch gefolgert ergibt sich:

    Wenn --tune animation gesetzt ist, erhalten wir beim selben Film Level 4 mit 4 ReFrames und Level 5 ab 5 ReFrames.

    Wenn --tune film gesetzt ist, erhalten wir Level 4 auch bei 5 ReFrames, aber welche der anderen Parameter verursachen das und warum? Bitrate und Auflösung scheiden aus, denn sonst wäre der Zeichentrickfilm mit 4 ReFrames ebenfalls Level 5.

  • Zitat

    Wenn --tune film gesetzt ist, erhalten wir Level 4 auch bei 5 ReFrames, aber welche der anderen Parameter verursachen das und warum? Bitrate und Auflösung scheiden aus, denn sonst wäre der Zeichentrickfilm mit 4 ReFrames ebenfalls Level 5.

    --bframes?

    EDIT: Oder --bframes wirkt sich auf VBV buffer size und VBV max rate aus und das auf das Level?

    Gruß,
    Indy

  • Zitat

    Wenn --tune film gesetzt ist, erhalten wir Level 4 auch bei 5 ReFrames, aber welche der anderen Parameter verursachen das und warum? Bitrate und Auflösung scheiden aus, denn sonst wäre der Zeichentrickfilm mit 4 ReFrames ebenfalls Level 5.

    Das sehe ich anders. :)

    --tune animation, -ref 4 mit 7 186 Kbps -> High@L4.0
    --tune animation, -ref 5 mit 7 158 Kbps -> High@L5.0
    Level 5 wurde gewählt weil mehr Referenzen gewählt wurden

    Realfilm, --tune film, -ref 5 mit 5 459 Kbps -> High@L4.0
    Level 4 wurde gewählt weil dank der niedrigeren Datenrate&Auflösung 5 Referenzen auch in Level 4 fallen.

    Wenn Du die Heuristik die x264 da verwendet genau wissen willst, dann musst Du in den SourceCode von x264 gucken.

    Cu Selur

Jetzt mitmachen!

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