Gedanken zum x264 CLI ....

  • Da ich etwas Zeit&Nerven hatte habe ich mich mit dem x264 CLI beschäftigt.

    => Hab mal ein kleines Mapping von CLI Options zu vfw Option gemacht und darunter die Empfehlungen aus dem Wissenswertes des vfw Frontends dazugeschrieben.

    Frame-type options:
    Name in der CLI <=> Name im vfw Frontend
    1. --keyint <integer> <=> Max IDR-keyframe interval
    2. --min-keyint <integer> <=> Min IDR-keyframe interval
    3. --scenecut <integer> <=> Scene Cut Threshold
    4. --bframes <integer> <=> Max consecutive (B-frames)
    5. --no-b-adapt <=> deaktivieren der Adaptive B-Frames
    6. --b-bias <integer> <=> Bias (B-Frames)
    7. --b-pyramid <=> Use as reference (B-frames)
    8. --no-cabac <=> CABAC deaktivieren
    9. --ref <integer> <=> Max reference Frames
    10.--nf <=> deaktivieren des Deblocking Filters
    11.--filter <alpha:beta> <=> Deblocking Filter Strength und Threshold

    Empfehlungen:
    1. --keyint 250 bei PAL bzw. --keyint 240 bei NTSC Material
    2. 25 bei PAL bzw. 24 bei NTSC Material
    3. einfach weglassen und so den Standardwert --scenecut 40 nehmen
    4. --bframes 3
    5. die Option nicht benutzen und so B-Frames als Referenzen zulassen
    6. einfach weglassen und so den Standardwert --b-bias 0 nehmen
    7. aktivieren mittels: --b-pyramid
    8. die Option nicht benutzen und so CABAC verwenden
    9. --ref 3 bei DVD Auflösungen und höher,--ref 6 bei 1/2 DVD Auflösung und niedriger
    10.die Option nicht benutzen und so den Inloop-Deblocking-Filter verwenden


    Ratecontrol:
    1. --qp <integer> <=> Single pass - Quantizer, wobei 0 hier einer verludtfreien Kompression entspricht
    2. --bitrate <integer> <=> Single pass - Bitrate bzw. Bitrate für den Multipass
    3. --crf <integer> <=> Hier wird im Gegensatz zu 1. kein konstanter, sondern ein durchschnittlicher Quantizer angegeben
    4. --qpmin <integer> <=> Quality - Min QP
    5. --qpmax <integer> <=> Quality - Max QP
    6. --qpstep <integer> <=> Quality - Max QP Step
    7. --ratetol <float> <=> nur für Single pass encodings interessant, legt fest wie stark die Datenrate vom zielwert abweichen darf (etwa +/- 0.5% pro Punkt)
    8. --vbv-maxrate <integer> <=> legt die maximale Datenrate fest (siehe Wissenswertes rund um Xvid)
    9. --vbv-bufsize <integer> <=> legt die Video Buffergröße fest (siehe Wissenswertes rund um Xvid)
    10. --vbv-init <float> <=> legt fest wieviel des VBVs initial belegt sind (ist mir auch nicht ganz klar ;))
    11. --ipratio <float> <=> legt fest wieviel höher die Quantizer eines P-Frames im Vergleich zu den I-Frames seien soll auf die er referenziert
    12. --pbratio <float> <=> legt fest wieviel höher die Quantizer eines B-Frames im Vergleich zu den P-Frames seien soll auf die er referenziert
    13. --chroma-qp-offset <integer> <=> legt fest um wieviel Quantizerstufen Farbinformationen stärker als Helligkeitsinformationen quantisiert werden sollen
    14. --pass <1|2|3> <=> Multi pass - 1st/nth pass
    15. --stats <string> <=> Statsfile name
    16. --rceq <string> <=> erlaubt einem selber eine Funktion festzulegen, nach der die Flußkontrolle arbeitet :)
    17. --qcomp <float> <=> kleinere Werte geben geben mehr Bits zu einfachen Szenen, höhere Werte geben mehr Bits zu komplexeren Szenen
    18. --cplxblur <float> <=> verringert Schwankungen in der Quantizervergabe vor der Curve Compression (keine Ahnung was es genau bewirkt=>kann ja wer mal in den Code gucken )
    19. --qblur <float> <=> verringert Schwankungen in der Quantizervergabe nach der Curve Compression (keine Ahnung was es genau bewirkt=>kann ja wer mal in den Code gucken )
    20. --zones <zone0>/<zone1>/... <=> Zone Options, wobei jede Zone aus <start frame>,<end frame> und <option> besteht, wobei die Option hier q=<integer> (force QP) oder b=<float> (bitrate multiplier) beinhalten muß


    Empfehlungen:
    1. --qp 0 wenn man verlustfrei Komprimieren will ansonsten sind --qp 20 und --qp 30 ganz brauchbar
    2. --bitrate 1000 und höher sollte man bei DVD Auflösungen schon nehmen, würde empfehlen einen Bitratenklkulator zur Hilfe zu nehmen
    3. --crf 20 oder --crf 30 sind ganz brauchbar
    4. einfach weglassen und so den Standardwert --qpmin 10 nehmen
    5. einfach weglassen und so den Standardwert --qpmax 10 nehmen
    6. --qpstep 4 ist der Standardwert, aber gerade bei niedrigen Datenraten kann man hier durchaus auch --qpstep 8 nehmen
    7-13. einfach weglassen und so die Standardwerte nehmen, man kann gerade bei 11-13 sicher noch nette Sachen machen, jedoch muß man dafür viele Tests machen um Änderungen hier in ihrer Auswirkung abschätzen zu können
    14. Im ersten Durchlauf --pass 1 im zweiten Durchlauf --pass 2
    15. --stats x264_stats.log
    16. Keine Ahnung was da ein besserer Vorschlag wäre als der Defaultwert => weglassen
    17. einfach weglassen und so den Standardwerte nehmen
    18&19. Keine Ahnung, da ich nicht weiß wie stark die Werte die Quantizerglättung wirklich beeinflußt => viel testen => weglassen
    20. weglassen wenn man sie nicht braucht


    Werde demnächst auch noch was zu den Bereichen Analysis, Video Usability Info und Input/Output schreiben wenn ich Zeit&nerven finde.

    Würde mich über Meinungen, Verbesserungen usw. freuen. Vorallem im RateControlBereich kann ich nicht wirklich etwas empfehlen, da man bei den meisten Features erstmal einiges rumtesten müßte (2pass Encodes! 1pass reicht hier i.d.R. nicht!) und die Features sich durchaus untereinander beeinflussen.

    Cu Selur

  • Hi,

    sehr schön gemacht - vielen Dank. Auf den ersten Blick, glaube ich, das das mit ratetol nicht stimmt.

    Ich glaube hier gehen Werte > 1. Akupenguin sagt 0-100. Aber Du hast das richtig abgelesen aus der Beschreibung unter -info

    cu

    Joe
    __________________
    Freedom ist just another word for nothing left to loose.

  • Zitat von Selur

    hmm,... müßten man wohl mal antesten.

    Meine Standarteinstellung für pass 1 ist "ratetol 2"
    Im zweiten pass kommt das nicht zum Einsatz :)

    cu

    Joe
    __________________
    Freedom ist just another word for nothing left to loose.

  • ratetol 2 ist eher das Gegenteil von CBR. Da ist wohl die Quantizerverteilung ähnlich wie bei 2 Pass.

    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.

  • Okay, kann einer was genaueres zu dem Mapping sagen wie die Verteilung dann aussieht?
    (was macht denn dann 100 ?)

    => mal etwas im englischen Forum gelesen => scheint so, als ob Ratetolerance festlegt um wieviel sich Quantizer in aufeinanderfolgenden Frames maximal unterscheiden dürfen. D.h. wenn ein Quantizer nicht durch durch cplxblur und qcomp ien einen Bereich kommt der in noch von ratetol akzeptiert wird er entsprechend angepasst.

    Cu Selur

    Ps.:weiß jemand wue stark der Einfluß von cplxblur und qblur auf die Quantizerverteilung ist ?

  • soweit ich das aus dem Code lese, hat man über das vfw Iterface nicht die möglichkeit rate_tol einzustellen, sondern nur qcomp, bei dem 0 = CBR 1 = konstanter Quantizer.


    aku hat die Ratecontrol in diesem Threads recht gut erklärt:

    http://forum.doom9.org/showthread.php?t=98386

    Ausserdem aus dem doc Verzeichnis von x264:

    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.

  • Hab mal ein paar Sachen zusammen kopiert:

    Zitat

    qcomp : QP curve compression
    Ratecontrol equation : blurCplx^(1-qComp)

    if qcomp = 1.00 then quantizer is constant for second pass. Real variable bitrate with constant quality.

    if qcomp = 0.00 then bitrate is constant for second pass. Real constant bitrate with variable quality.

    defaut value is 0.60 (best value for dev eyes)
    best value for metric is in 0.70-0.80 interval

    Quelle: http://forum.doom9.org/showpost.php?p=700253&postcount=3

    Zitat

    ... When we set qcomp to be 1.0, the quantisation parameter is a contant, thus the quantisation errors of different pictures are at the same level. In this sense, the quality is constant. On the other hand, if we set qcomp to be 0.6, the quality is said to be constant in terms of human visual perception, although different frames may have different levels of quantisation error due to different QPs.


    Quelle: http://forum.doom9.org/showpost.php?p=700398&postcount=7


    Zitat

    If you set qcomp=0 (i.e. "bitrate variability"), then it tries to make each frame use exactly the same number of bits. It's not quite that precise, but that's its goal.

    If you set vbv-maxrate and vbv-bufsize to some nonzero values, then it restricts the average bitrate of a certain number of frames (the number being howevermany can fit in your specified vbv-bufsize (which is specified in kbit)). If vbv-maxrate==bitrate, then it's CBR; otherwise it just restricts the peak bitrate.

    You can mix any value of qcomp with the vbv stuff, in which case qcomp controls the local allocation of bits within the averaging window. (As opposed to the non-vbv case, where qcomp distributes bits over the whole movie.)

    I think the name "VBV" was taken from MPEG-2 or the like. The H.264 standard calls it "HRD". Theoretically, vbv-maxrate is the rate at which the decoder can read from the medium (DVD, network, etc) and vbv-bufsize is the amount of memory it has available to pre-buffer the incoming stream.

    Quelle: http://forum.doom9.org/showpost.php?p=699596&postcount=16

    Zitat

    Example: you want to encode a movie in 700 MB.

    2pass: will get exactly 700 MB, and maximize quality.

    1pass ABR, ratetol=inf: will get somewhere between, say, 600 and 800 MB. Whatever filesize it happens to produce, the quality will be almost as good as a 2pass encode of that same size.

    1pass ABR, ratetol=1 (or the like): will get very close to 700 MB (e.g. 699-701), but will have lower quality than either of the above.

    Quelle: http://forum.doom9.org/showpost.php?p=704099&postcount=23

    Zitat

    ...ratetol is not in any particular units. I tried to make it that a given value of ratetol produced the same %error in filesize independent of movie length, but of course longer movies will tend to average out closer to the target even without enforcing anything.

    In practice (see some examples), it looks like ratetol=1 is about +/- .5% bitrate, so ratetol=2 would be about +/- 1%. (This does not, however, scale to very large values of ratetol: it converges asymptotically to some maximum variance depending on the content and other settings. ...

    Quelle: http://forum.doom9.org/showpost.php?p=705225&postcount=25


    Okay, d.h. dann wohl erstmal folgendes:

    1. ratetol ist nur für 1pass ABR interessant
    2. ratetol beschreibt wieviel die Datenrate eines Frames von der angestrebten Durchschnittlichen Datenrate abweichen darf. Hierbei wird bedeutet ratetol=inf nicht, dass jedes Frame mit minQP encoded wird, sondern dass nach der initialen Quantizerverteilung-/schätzung keine Anpassung mehr anfällt.

    Seht ich das auch so?

    Cu Selur

  • @ Selur

    Habe nun ratetol aus allen meinen batchfiles gelöscht. Irgendwie habe ich damals als die Funktion rauskam das ganz anders verstanden. Aber MegUI setzt das feature nie ein, Du hast das ganz klasse hergeleitet => JoeB muss da was falsch verstanden haben :(

    cu

    Joe
    __________________
    Freedom ist just another word for nothing left to loose.

  • Scheint so zu sein. Also ratetol klein, wenn genaue Zielgröße getroffen werden muss, und groß, wenn es auf ein paar MB nicht ankommt, und man sich einen 2Pass sparen will.

    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.

  • hab da mal Fragen an Leute die das CLI nutzen:

    1. Welche Optionen verwendet x264 wenn ich die optionale Option options weg lasse ?

    2. Wenn ich die optionale Option widthxheight verwende, wird der Output dann geresized vor dem Encoden oder wird nur ein Picture Aspect Ratio Flag gesetzt, oder passiert was ganz anderes?

    3. Wenn man ein avi öffnet werden dann vfw Decoder oder DirectShow Decoder zum Decoden verwendet? (vermute DirectShow)

    4. Wenn ich mkv oder mp4 als output format nehmen, werden dann 'nur' (wenn überhaupt) im Videostream etweillige Aspect Ratio Flags gesetzt oder auch (nur?) im Container?

    Cu Selur

  • 2. Diese Option wird nur verwendet, wenn RAW Daten eingelesen werden. Bei avs/avi Input werden die Bilddimensionen aus dem Input ermittelt.

    3. Es werden die Microsoft VfW Routinen verwendet, um auf die avi zugreifen zu können, daher vermute ich, dass auch vfw decoder zum decodieren verwendet werden.

    1. Aus dem Code, das meiste sollte selbsterklärend sein:

    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.

  • Danke für die Infos ;)

    zu 2.: Was passiert den wenn ich da ne andere Auflösung angebe als meien Rawdaten eigentlich haben? Verabschiedet sich x264 dann oder geschehen merkwürdige Dinge? ;)

    zu 1.: Seh ich das richtig, dass das ein 1pass cbr Encode mit konstantem Quantizer 26 und maximal einem B-Frame in Folge ist?

  • Nein, x264 verabschiedet sich nicht, das Bild wird nur schief und läuft durch, denn es wird die falsche Anzahl Pixel pro Reihe ausgelesen.

    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.

  • Hab mal ein bissel was getippt:

    So, mehr gibt's erst demnächst, wobei ich mich schon über Feeedback und Verbesserungen freuen würde. ;) Da muß sicher einiges noch umgeschrieben werden.

    Cu Selur

  • zu 1

    vielleicht ein Beispiel
    Hinweis, dass avs (mkv/mp4) support miteincompiliert sein muss.

    zu 2.1.4

    "Der Standardwert den x264 nimmt wenn man den Parameter weglässt ist 0"

    Ich dachte 1?

    zu 2.1.9

    das maximum an Referenzen ist 16

    zu 2.1.10

    weglassen des Loopfilters bei sehr hohen Datenraten?


    Ich denke man sollte noch die Möglichkeit erwähnen mit --ratetol inf einen 1Pass mit 2Pass ähnlicher Quantizerverteilung zu erzielen.

    Sonst schon sehr ansprechend :)

    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.

  • zu 1: werd anmerken, dass ich mich auf die Version beziehe die von shaarktooth kommt :)
    zu 2.1.4: Sicher? Wenn man die x264.exe aufruft sagt die 0. :)
    zu 2.1.9: werd ich anmerken
    zu 2.1.10: Wenn man nah an Lossless kommt, halte ich Loopfilter irgendwie für kontraproduktiv. ;)

    Zitat

    Ich denke man sollte noch die Möglichkeit erwähnen mit --ratetol inf einen 1Pass mit 2Pass ähnlicher Quantizerverteilung zu erzielen.

    wird gemacht :)

    Zitat

    Sonst schon sehr ansprechend

    *freu* zumindest für den ersten Entwurf soweit :)
    Bin noch am Überlegen ob ich das ganez später als pdf mit Formatierung&Cod oder einfach als txt veröffentlichen soll.
    (Hat da wer vorlieben?)

    Cu Selur

  • Also ich finde, so ein suaber getextes PDF hat mehr Stil als eine txt Datei.

    Zu 2.10

    Soweit ich weiß, wird der Loopfilter bei Q<15 oder so sowieso automatisch deaktiviert, von dem her hast du recht. Bei q=0 ist er laut standard deaktiviert.

    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.

Jetzt mitmachen!

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