Ich wollte das Keyframe-Intervall eines Eingangsvideos auf 5 Sekunden einstellen. Nur dann kann ich mit FFmpeg eine konstante HLS-Segmentierung von 5 Sekunden erreichen. Wie stelle ich das Keyframe-Intervall mit FFmpeg auf 5 Sekunden ein? (FFmpeg Prompt Line Code geschätzt)
Sie müssen neu codieren. Setzen Sie den Keyint-Parameter von x264 auf 5 * fps und deaktivieren Sie Scenecut. Wenn dein fps zum Beispiel 24 ist:
ffmpeg -i <input> -vcodec libx264 -x264-params keyint=120:scenecut=0 -acodec copy out.mp4
Dies ist natürlich nicht optimal für die Qualität, entspricht aber Ihren Anforderungen.
Bearbeitet, um no-scenecut
In scenecut=0
Zu ändern, wie vom Seufzerjungen vorgeschlagen.
Seufzer.
Die Fehlinformationen bezüglich der Option no-scenecut
Sind schon länger gültig, als ich mich erinnern kann. Geben Sie niemals einen Wert für no-scenecut
Ein.
Einen Link zur Dokumentation finden Sie hier .
Für FFmpeg müssen Sie die folgenden zwei Schalter verwenden:
-g 120
Definiert eine GOP von 120 Frames, um eine fünf Sekunden lange GOP für 23.976fps-Inhalte zu erstellen. Dies funktioniert in Verbindung mit der Option no-scenecut
.
-x264opts no-scenecut
Erzwingt die Erstellung von Keyframes gemäß dem von FFmpeg verwendeten GOP-Wert. Standardmäßig wird für libx264
Ein Keyframe erstellt, wenn ein Szenenwechsel erkannt wird. Wenn Sie eine Ausgabedatei mit MediInfo ohne diese Option überprüfen, wird scenecut=40
Angezeigt. Bei richtiger Ausführung ist das scenecut=0
. Wenn diese Option nicht verwendet wird, werden Keyframes für ABR-Inhalte falsch ausgerichtet und die Segmentgrößen sind nicht vorhersehbar.
Nehmen Sie nicht mein Wort dafür, bitte führen Sie das Folgende unter einer Bash-Shell aus, wobei $ inputfile der Name der Datei ist, die Sie analysieren möchten. Wenn Sie die beiden oben gezeigten Schalter verwenden, wird eine sehr gleichmäßige Kadenz des Keyframe-Dumps für die Eingabeaufforderung angezeigt.
ffprobe -select_streams v -show_frames -show_entries \
frame=pict_type -of csv $inputfile | grep -n I | cut -d ':' -f 1
Sie können auch auf einen Artikel verweisen, den ich geschrieben habe, in dem es darum geht, richtigen ABR-Frame-ausgerichteten Inhalt zu erstellen hier .