Zwangs-IDR-I-Frames

  • Ps.: das Sample was ich hier anteste ist übrigens nur 9min lang. ;)
    kannst unter http://selur.movie2digital.com/Filmworks/Sample.html mal angucken


    Hab mal Dein Sample mit meinen Einstellungen getestet:

    300/125:
    69 IDR (hiervon 12 Zwang) / 49 non-IDR / 118 Summe
    nur 5 der 12 Zwangs-IDR folgten auf ein non-IDR-Frame, 7 der 12 hingegen direkt auf ein IDR-Frame (also ohne daß ein non-IDR-I-Frame dazwischen war).

    300/25:
    113 IDR (hiervon 9 Zwang) / 1 non-IDR / 114 Summe
    alle 9 Zwangs-IDR folgten auf ein IDR-Frame

    Original (250/25)
    (Nicht direkt vergleichbar, da auch sonst andere Einstellungen)
    112 IDR (hiervon 17 Zwang) / 0 non-IDR / 112 Summe

    => Fazit:

    • --min-keyint 120 statt 25 erhöht die Anzahl der non-IDR-I-Frames massiv (von 1 auf 49 = Faktor 49)
    • die Anzahl der Zwangs-IDR-I-Frames erhöht sich (bezogen auf alle I-Frames) hingegen nur um 2,3%
    • Das Original hat keine non-IDR-I-Frames, dafür aber mit 17 Zwangs-IDR-I-Frames mehr als mein Test mit 300/125
    • Die Zwangs-IDR-I-Frames möchte ich nun durch Erhöhung von --keyint senken. 300 ist ein Wert, der für NTSC üblich ist. Technisch (Puffergröße, Sprungverhalten) sollte sich PAL mit 300 genau so verhalten, deshalb nehme ich bisher auch für PAL 300 (statt 250). Für meine nächsten Encodings werd ich mal ein Drittel dazutun und gucken, wie sich 400 verhält.
    • Mein Wunsch: Ein Zwangs-IDR-I-Frame nicht nach einem fixen Wert (--keyint) an eine Stelle zu setzen, wo sich vielleicht garnichts ändert, sondern durch Senken von --scenecut ab xxx Frames ein wenig geschickter zu setzen (Idee unabhängig von --min-keyint)
    • Das Original ist sehr hektisch, dadurch dürfte der Anteil von Zwangs-IDR-Frames niedriger liegen als bei Spielfilmen, die auch mehr ruhigere Szenen haben.

    Gruß

    akapuma

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

  • Zitat

    Das Original ist sehr hektisch, dadurch dürfte der Anteil von Zwangs-IDR-Frames niedriger liegen als bei Spielfilmen, die auch mehr ruhigere Szenen haben.


    Das Beispiel ist noch nicht wirklich hektisch, hab die Tage einiges chaotischeres encoded. ;) Deine Aussage ist sonst aber definitiv richtig, das Problem ist das man möglichst ein Verfahren braucht was sowohl bei schnellen als auch langsamen Szenen keine Probleme macht.

    Dem Wunsch würde ich zustimmen, ideal wäre es wenn kein IDR-Frame erzwungen werden muss und die I- und IDR Frames an sinnigen Stellen erscheinen. -> Problem was ich halt sehe ist, dass ich denke das:

    1. dies problematisch ist ohne genaue Informationen über die Quelle zu haben
    2. das das aktuelle Verfahren nicht ausreichend flexibel ist.

    Cu Selur

    Ps.: Hab den Clip mal wieder offline gesetzt

  • Nice, mal gucken was es für Feedback gibt,.. ;)

    Zitat

    First, you mean increase scenecut value as it nears keyint.

    Das versteh ich nun garnicht???

    Zitat

    It already does that, though the increase is linear, starting at 0 immediately after the previous keyframe and sloping up to the scenecut at keyint. Yes, maybe some shape other than linear would be slightly better.

    Nun vesteh' ich den scenecut-Parameter nicht mehr. Aus dem man x264: Dieser Schwellenwert legt fest ab wie viel Prozent an Bildänderung ein neues Bild als Szenenwechsel erkannt wird, was direkt beeinflusst ob ein I-Frame gesetzt wird oder nicht. Scenecut-Standard ist 40. Ich dachte nun, wenn ein Frame um 40% vom vorhergehenden abweicht, wird ein I-Frame gesetzt.

    Gruß

    akapuma

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

  • Ich dachte das auch bis dato, hab auch mal was dazu geschrieben. :)

    => erstmal Wissenswertes rund um x264 und man x264 anpassen. ;)

    Wissenswertes:

    Zitat

    [FONT=Times New Roman, serif]3.3.1 Scene Cut Threshold:[/FONT] Dieser Schwellenwert legt fest wann nur ein P-Frame oder wann ein I- bzw. IDR-Frame gesetzt werden soll. Genauer, falls das Verhältnis zwischen der Größe die das aktuelle Bild als P-Frame und der Größe die das aktuelle Bild als I-Frame in Bit belegen würde kleiner als der Scene Cut Threshold mal Abstand zum letzten IDR-Frame durch 'Max IDR-keyframe intervall' sein sollte wird ein I-/IDR-Frame gesetzt, sonst ein P-Frame. Das 'Problem' ist, dass I-Frames idealerweise immer bei stärkeren Änderungen als qualitativ hochwertige Referenzframes gebraucht werden, sie jedoch einiges mehr an Datenrate benötigen als P- und B-Frames.

    man x264:

    Zitat

    2.1.3 --scenecut <integer> (-1 bis 100)</integer>

    Dieser Schwellenwert legt fest wann nur ein P-Frame oder wann ein I- bzw. IDR-Frame gesetzt werden soll. Genauer, falls das Verhältnis zwischen der Größe die das aktuelle Bild als P-Frame und der Größe die das aktuelle Bild als I-Frame in Bit belegen würde kleiner als scenecut mal Abstand zum letzten IDR-Frame durch 'Max IDR-keyframe intervall' sein sollte wird ein I-/IDR-Frame gesetzt, sonst ein P-Frame. Das 'Problem' ist, dass I-Frames idealerweise immer bei stärkeren Änderungen als qualitativ hochwertige Referenzframes gebraucht werden, sie jedoch einiges mehr an Datenrate benötigen als P- und B-Frames. Der Standardwert den x264 nimmt wenn man den Parameter weglässt ist 40.

    Cu Selur

  • Hallo,

    bei welcher Schwelle ein I-Frame gesetzt wird, ist lt. der Formel nicht nur von --scenecut abhängig, sondern auch von --keyint.

    Beispiel: --keyint 300 --scenecut 40
    Es wird bis 300 bei einem bestimmten Verhältnis der Größe von P-Frame und I-Frame ein I-Frame gesetzt. Falls keins gesetzt wurde, wird bei 300 ein Zwangs-I-Frame gesetzt.

    Nun möchte ich weniger Zwangs-I-Frames und daher --keyint auf 450 (Faktor 1,5) erhöhen. Nun würde sich aber auch das Verhalten im Bereich von 0-300 verändern! Wo bei --keyint 300 --scenecut 40 vielleicht noch eins gesetzt würde, würde bei --keyint 450 --scenecut 40 keins mehr gesetzt. Um im Bereich von 0-300 das gleiche Verhalten wie zuvor zu erhalten, müßte ich --keyint 450 --scenecut 60 verwenden.

    Nun stellt sich natürlich die Frage, ob man --scenecut einfach so erhöhen kann, denn wenn dieser Wert noch woanders in x264 verwendet würde, würden sich noch andere Effekte ergeben.

    Gruß

    akapuma

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

  • Zitat

    bei welcher Schwelle ein I-Frame gesetzt wird, ist lt. der Formel nicht nur von --scenecut abhängig, sondern auch von --keyint.


    Ich weiß, aber irgendwie wurde der Satz dann noch unklarer. Würde mich da über Vorschläge für bessere Formulierungen freuen. :)

    Zitat

    Nun stellt sich natürlich die Frage, ob man --scenecut einfach so erhöhen kann, denn wenn dieser Wert noch woanders in x264 verwendet würde, würden sich noch andere Effekte ergeben.


    Gehe davon aus, dass der Wert sonst nicht noch groß verwendet wird, wobei ich ja noch hoffe, das akupenguin seine crf Variante implementiert und man dann auch die Möglichkeit bekommt x264 die Wahl komplett zu überlassen und nur wenn es datenratentechnisch sinnig ist IDR-/I-Frames gesetzt werden. :)

    Cu Selur

  • Code
    (100 * (bit size of P-frame) / (bit size of I-frame) < scenecut * (distance from previous keyframe) / keyint)

    Kann das sein?

    Wenn sich das Bild stark ändert, dann soll ein I-Frame gesetzt werden.

    Wird sich das Bild stark ändert, dann wird ein P-Frame gegenüber einem I-Frame groß. Dann wird aber nach obiger Formel kein I-Frame gesetzt. Vielleicht ein ">" statt einem "<"?

    Gruß

    akapuma

    Edit: An sich müßte es doch

    Code
    (100 * (bit size of P-frame) / (bit size of I-frame) [B]>[/B] scenecut * [B](1-[/B](distance from previous keyframe) / keyint)[B])[/B]

    heißen. Am besten, ich geh' jetzt erstmal ins Bett...

    Gruß

    akapuma

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

  • Hast recht, denke auch da ist ein Dreher drinne. Hab mal akupenguin im Thread danach gefragt + ne Frage bezüglich dem von ihm erwähnten --pre-scenecut. Hatte es so verstanden, dass das automatisch benutzt wird wenn man mehr als einen Thread benutzt, hört sich bei ihm etwas anders an. ;)

    Zitat

    Am besten, ich geh' jetzt erstmal ins Bett...

    Ja, irgendwo ist da noch der Wurm drinne, denke akupenguin wird dazu was sagen. ;)
    (Argh auch mal flott ins Bett kriechen, morgen früh raus)

    Cu Selur

  • Hallo,

    in der von akupenguin geposteten Formel ist rechts des ">" eine Gerade. Nun kann man alle Zwangs-I-Frames loswerden, in dem man diese Gerade einfach verlängert. Das läßt sich erreichen durch folgende Parameter:

    --scenecut 100 --keyint 750 für ein Verhalten im unteren Bereich wie --scenecut 40 --keyint 300
    oder
    --scenecut 100 --keyint 625 für ein Verhalten im unteren Bereich wie --scenecut 40 --keyint 250

    Sind solche großen keyint-Werte nun absolutes Gift?
    DeathTheSheep glaubt, daß Werte "to set this up to 1000 or even higher" möglich sind. Gegenüber "normalen" Werten schreibt mplayerhq "Wenn es dir nur um Qualität geht und nicht um die Durchsuchbarkeit, kannst du viel höhere Werte setzen". Zu bemerken ist noch, daß der --keyint-Wert mit --scenecut 100 allerdings praktisch nie erreicht werden dürfte.

    Mit Selur's Testfilm habe ich mal --scenecut 100 --keyint 600 --min-keyint 150 einen maximalen Abstand von 500 Frames erhalten, das Mittel liegt bei 256. Da ich beim Spulen keine Probleme hatte, werde ich diese Einstellung mal für meinen nächsten Spielfilm probieren.

    Gruß

    akapuma

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

  • Hab schon einige male mit höheren Keyint werten rumgespielt, gab keine Probleme soweit, hatte nur einmal einen Clip in dem wirklich klassisch immer abwechselnd vor einem Vorhang Leute gequatscht haben. (also ideal für mpeg) Dort gab es dann nur an den Forcestellen Keyframes, was aber auch zu erwarten war. Denke bei normalen Filmen sollte es keine Probleme geben, da es dort sehr selten ist, dass nicht alle 20Sekunden ein "Szenenwechsel" ist.

    Cu Selur

Jetzt mitmachen!

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