Handbrake Keyframes

samuelclemens

Lieutenant
Registriert
Nov. 2017
Beiträge
893
Ich möchte mit Losless Cut einige Videos etwas einschrumpfen mit H265 und dabei auch gleich den Keyframe Intervall von standardmäßig 10 sekunden auf 2 s reduzieren. Ich habe das in Handbrake unter "Zusätzliche Parameter" im "Video" Reiter so eingegeben:
keyint=2:min-keyint=1:scenecut=40
Scheint aber nicht zu funktionieren. Es bleibt bei den 10 Sekunden. Ne Idee was ich falsch mache?

Zwischenablage01.jpg
 
die parameter kann man mit nvenc wohl nicht verwenden:

Option Type H.264H.265Detail
gpu string GPU selection. Values: any (default), 0 (first GPU), 1 (second GPU), etc.
coder string Coder selection. Values: auto (default), cabac, cavlc.
temporal-aq boolean Set to 1 to enable Temporal Adaptive Quality, 0 to disable (default). Note the hyphen for H.264.
temporal_aq boolean Set to 1 to enable Temporal Adaptive Quality, 0 to disable (default). Note the underscore for H.265. Requires RTX Turing 1660 or better.
spatial-aq boolean Set to 1 to enable Spatial Adaptive Quality, 0 to disable (default). Note the hyphen for H.264.
spatial_aq boolean Set to 1 to enable Spatial Adaptive Quality, 0 to disable (default). Note the underscore for H.265.
aq-strength int When Spatial AQ is enabled, the values scale is 1 (low) – 15 (aggressive). Default: 8.
nonref_p boolean Set to 1 to enable automatic insertion of non-reference P-frames, 0 to disable (default).
strict_gop boolean Set to 1 to minimize GOP-to-GOP rate fluctuations, 0 to disable (default).
weighted_pred boolean Set to 1 to enable weighted prediction, 0 to disable (default).
rc-lookahead int Number of frames to look ahead for rate control. Default: 0.
b_adapt boolean When lookahead is enabled, set this to 1 to enable adaptive B-frame decision (default), 0 to disable.
no-scenecut boolean When lookahead is enabled, set this to 1 to disable adaptive I-frame insertion at scene cuts, 0 to enable (default).

https://handbrake.fr/docs/en/1.9.0/technical/video-nvenc.html

musst wohl mit cpu statt gpu enkodieren, wenn dir die settings wichtig sind.
 
@0x8100 Hmm.. da hast wohl recht.

Aber über die CPU verdreifacht sich fast die rechen zeit.
Der zweck mit den Keyframes sollte das schneiden in Losless Cut etwas genauer ermöglichen.
Da kann ich sie gleich in Shotcut framegenau schneiden und neu codieren über die GPU.
Ist halt nur ne deftige fummelei... 😓

Ich möchte neben dem einschrumpfen ja auch hier und da was wegschneiden am Anfang oder Ende.
Mit Handbrake wär das in einem rutsch durch und ich hätt am ende nur jeweils sekunden zum wegschneiden gebraucht pro Datei. Leider liegt der Keyframe intervall bei fast allen Dateien bei 10 Sekunden. Zu viel um sinnvoll zu schneiden.
Das mach ich aber nur weil ich sie eh recodieren muss zum einschrumpfen.
 
Zuletzt bearbeitet:
LossLessCut einzusetzen wird etwas sinnig, wenn du verlustbehaftet den ganzen Spaß recodieren willst.
Das Intervall für die Keyframes herabzusetzen vergrößert die Videos, wobei es normalerweise für die Qualität nicht viel bringt. Moderne Encoder erkennen Scenenwechsel und erstellen entsprechend dynamisch Keyframes wenn es sein muss. Ja nach Bildinhalt kann das Erzwingen von vielen Keyframes bei der selben Datenrate sogar das Bild verschlechtern.

Dokumentation gibt es hier:
https://x265.readthedocs.io/en/master/cli.html

An deiner Stelle würde ich den Wert für "scenecut-bias" hoch setzen, wenn du bei Szenenwechseln Probleme hast und vielleicht mit "intra-refresh" experimentieren.
 
  • Gefällt mir
Reaktionen: samuelclemens und ghecko
Warum nicht einfach gleich den gewünschten Bereich in Handbrake eingeben?
HandBrake.webp
(CLI: --start-at und --stop-at)

samuelclemens schrieb:
keyint=2:min-keyint=1
Neben dem bereits gesagten: Bei x265 ist die Einheit dieser Parameter Einzelbilder, nicht Sekunden. Sprich, mindestens jedes zweite Einzelbild wäre dann ein Keyframe. Für einen Abstand zwischen Keyframes von maximal 2 Sekunden müsste die Zahl gleich 2x Bildwiederholrate sein (also z.B. keyint=60 für ein Video mit 30 FPS).

Edit: Wichtig für dein Vorhaben wäre auch noch no-open-gop=1, ansonsten können sich Inter-Frames auch auf Einzelbilder vor dem vorherigen Intra-Frame beziehen.
 
Zuletzt bearbeitet:
@SJAFNWEIF Ja bei den werten mit Keyint=2 hab ich mich vertan. Wären tatsächlich ca 60 Frames für 2 Sekunden.
Den Bereich gleich in Handbrake schneiden wäre in der tat interessant sofern es eine Möglichkeit gäbe entsprechende schnittmarker visuell zu setzen. So müsste ich die genauen werte jedoch bei jedem Video eh mit nem Editor erstmal mühsam ermitteln da sie nicht immer exakt gleich sind.
Aber selbst wenn die schnittmarke bei allen gelich wäre wüsste ich nciht wie man das allen dateien auf einmal im entsprechenden ordner zuweisen sollte. Be iallen anderen einstellungen scheint es zu gehen. Bei dieser jedoch nicht.
 
Zuletzt bearbeitet:
samuelclemens schrieb:
Auch Handbrake kann nicht außerhalb der Keyframes schneiden (korrigiert mich wenn ich irre).
Du irrst dich. ^^

samuelclemens schrieb:
Außerdem müsste ich die genauen werte bei jedem Video eh mit nem Editor erstmal mühsam ermitteln.
Musst du ja so oder so irgendwann? Und wenn es nicht ganz so genau sein muss, kann man den Bereich in Handbrake auch in Sekunden anstatt in Bildern angeben.
 
  • Gefällt mir
Reaktionen: Piktogramm
SJAFNWEIF schrieb:
Du irrst dich. ^^
Das hab ich bemerkt und sofort korrigiert. Da Handbrake ja eh neu codiert! 😓

Der Wert scheint aber eh nicht im Batchmodus für alle Dateien übernommen zu werden. Vermutlich weil der Endwert immer variiert.🤔
Vielleicht über die Zusatzparamater!?

Wie ich oben schon schrieb. Wenn ich eh nen richtigen Editor (Shotcut) bemühen muss kann ich das auch gleich dort manuell in eine Jobliste einpflegen und laufen lassen.
 
Zuletzt bearbeitet:
samuelclemens schrieb:
Da Handbrake ja eh neu codiert! 😓
Wenn du auf Zwang den Abstand von Keyframes neu erzwingst, läuft es sowieso auf Reencoding hinnaus. Wobei das etwas sinnlos ist, wenn das eingehende Video bereits verlustbehaftet kodiert ist. Denn die erzwungenen Keyframes sind dann ja auch nur aus den berechneten Bildern erzeugt.

Der Zaubertrick, mehr Keyframes ohne Reencoding geht nicht.
 
Zurück
Oben