Hallo,
ich verwende für meine x264-Encodings u.a. folgende Parameter:
[FONT=TimesNewRoman, serif]--min-keyint 120 --keyint 300[/FONT]
Das bedeutet, daß bis zu 120 Frames nach einem IDR-I-Frame ein non-IDR-I-Frame gesetzt werden kann. Non-IDR-I-Frames haben den Vorteil, daß über sie hinweg referenziert werden kann. Das ist aber auch ihr Nachteil, denn an ihnen kann man nicht schneiden.
Wird im Bereich von 120-300 Frames nach einem IDR-I-Frame ein neuer I-Frame gesetzt, so ist dies ein IDR-I-Frame. x264 sucht nach Szenenwechseln (beinflussbar durch den Parameter --scenecut), um die IDR-I-Frames sinnvoll zu setzen, immerhin benötigen diese relativ viel Platz. Wurde 300 Frames nach einem IDR-I-Frame kein weiteres IDR-I-Frame gesetzt, wird zwangsweise ein IDR-I-Frame gesetzt. Zwangsweise, weil es nicht an sinnvoller Stelle (Szenenwechsel) gesetzt wurde, sondern weil die 300 "um" sind.
In einem Testfilm gibt es 515 IDR-I-Frames. 219/515=43% sind „Zwangs“-IDR-I-Frames, 57% hingegen nicht. Das sind mir zu viele "Zwangs"-IDR-I-Frames. Nun könnte man meinen, daß der verwendete Parameter „--min-keyint 120“ daran „schuld“ ist, denn ein I-Frame ist wahrscheinlich erst 120 Frames nach einem IDR-I-Frame ein IDR-I-Frame, vorher wäre es wahrscheinlich ein non-IDR-I-Frame. Das ist aber nicht so. In meinem Beispielfilm kommen 166 von 219=76% aller Zwangs-IDR-I-Frames direkt nach einem IDR-I-Frame, demzufolge kommen nur (219-166)/219=53/219=24% Zwangs-IDR-I-Frames nach einem non-IDR-I-Frame.
Als "Lösung" schwebt mir nun vor, den Parameter "--keyint" von 300 kräftig hochzusetzen. Das es dann nur wenig Stellen gibt, an denen man den fertigen Film schneiden kann, ist mir egal. Zum Schneiden ist die Quelle eh viel besser geeignet. Mit zu großen --keyint-Werten wird allerdings auch das Springen im Film problematischer. Gibt es hier Erfahrungen, wie groß der --keyint-Parameter werden darf, so daß Springen im Film noch akzeptabel möglich ist? Wäre 500 noch gut?
Wenn ich mir was wünschen dürfte...
Nein, ich meine hier nicht das Lied von Friedrich Holländer, sondern einen neuen x264-Parameter, etwa wie folgt:
--min-keyint 120 --reduced-scenecut 250,10 --keyint 350
Bis 120 werden non-IDR-I-Frames gesetzt.
Von 120-250 werden IDR-I-Frames gesetzt.
Von 250-350 werden ebenfalls IDR-I-Frames gesetzt, allerdings wird der --scenecut-Wert um 10 reduziert, so daß IDR-I-Frames eher gesetzt werden.
Bei 350 wird ein Zwangs-I-Frame gesetzt.
Oder so:
--min-keyint 120 --reduced-scenecut 250 --keyint 350
Bis 120 werden non-IDR-I-Frames gesetzt.
Von 120-250 werden IDR-I-Frames gesetzt.
Von 250-350 werden ebenfalls IDR-I-Frames gesetzt, allerdings wird der --scenecut-Wert vom aktuellen Wert (Standard: 40) kontinuierlich bis zum Frame 350 auf 0 gesenkt, so daß IDR-I-Frames immer eher gesetzt werden.
Da der scenecut-Wert bei 350 dann 0 ist, wäre ein Zwangs-I-Frame (außer bei Standbild) nicht nötig.
Wäre das eine Idee?
Gruß
akapuma