Fügen Sie der Mitte des Videos einen Keyframe hinzu, ohne das gesamte Video neu zu codieren

1

Ich muss bei Werbeunterbrechungen I-Frames in die Mitte von MP3s einfügen, damit ich zu HLS segmentieren und I-Frames haben kann, wenn das Video wieder aufruft Stellen, aber ich würde es vorziehen, die Stelle (möglicherweise 1 Sekunde des Videos) auszuschneiden, an der der Keyframe benötigt wird, den Keyframe hinzuzufügen und das Video dann wieder zusammenzufügen. Dies sollte die Codierungszeit erheblich verkürzen, da ich mit Ausnahme der Sekunde, in der der I-Frame hinzugefügt wird, die meisten Codecs kopieren kann.

Das einzige Problem ist, dass sich das Videoprofil und die Einstellungen ändern, wenn ich den I-Frame hinzufüge, und ich beim Zusammenfügen keinen sauberen Stich erhalte. Ich verstehe, dass ich mit dem einen neuen Code erstellen kann concat, aber ich versuche, diese Verarbeitungszeit zu vermeiden.

Einige einfache Beispiele für das, was ich mit ffmpeg versuche:

ffmpeg -i input.mp4 -ss 30 -t 1 -c:a copy -y -copyts clipped2.mp4

ffmpeg -i input.mp4 -t 30 -c copy -y -copyts clipped1.mp4

ffmpeg -i "concat:clipped1.mp4|clipped2.mp4" -c copy -y newOutput.mp4

Möglicherweise muss ich ffprobedie Bitrate, das Profil und andere Einstellungen für den 1-Sekunden-Clip festlegen, damit nicht standardmäßig zufällige Inhalte verwendet werden, aber ich kann trotzdem nicht dafür sorgen, dass dies richtig funktioniert.

Hat jemand dies erreicht? Dies erfolgt speziell für die serverseitige Anzeigeneinfügung.

pgm
quelle
Siehe diese Frage
reynoldsnlp

Antworten:

0

Ich kopiere diese Antwort :

Mit ffmpeg können Sie mithilfe der -force_key_framesOption Keyframes an der gewünschten Stelle einfügen .

z.B:

./ffmpeg -i input.mp4 -c:a copy -c:v copy -force_key_frames 0:05:00,0:10:00 out.mp4

Fügt einen Keyframe so nahe wie möglich an die Markierung 5 und 10 ein. Die Zeitwerte können im Format hh: mm: ss oder nur in Sekunden angegeben werden (Einzelwerte, keine Doppelpunkte).

Sie können überprüfen, ob an der gewünschten Stelle Frames eingefügt wurden:

./ffprobe -select_streams v:0 -skip_frame nokey -show_entries frame=pkt_pts_time out.mp4
reynoldsnlp
quelle