So zwingen Sie ffmpeg, beim ersten Downsampling einer Framerate eines Videos mit x264-Vcodec das Keyframe im ersten Frame einzufügen


7

Ich habe ein mpeg4-Video mit 25 fps. Dieses Video enthält nur einen statischen Frame. Ich versuche, die Bildrate auf 1 fps herunterzusampeln und das Video in x246 (mp4) zu konvertieren.

Ich habe den folgenden Befehl ffmpeg ausgeführt:

ffmpeg -i vid.avi -acodec aac -ar 32000 -ab 64k -ac 2 \
-vcodec libx264 -strict -2 -y -r 1 -force_key_frames 0 vid.mp4

FFmpeg löscht dann viele Frames, bis der erste Keyframe eingefügt wird. Manchmal erscheint das Bild erst nach 16 oder 20 Sekunden.

Ich nehme an, ffmpeg fügt zu Beginn keinen Keyframe ein.

Weiß jemand, wie ich den ersten Frame von vid.avi als Schlüsselframe für vid.mp4 verwenden kann?


Hast du es ohne versucht -force_key_frames 0? Vielleicht möchten Sie auch versuchen, die 0 in eine 1 zu ändern, damit sie stattdessen im ersten Frame beginnt-force_key_frames 1
Travis Crum

Ja, ich habe es ohne -force_key_frames 0 und mit -force_key_frames 1 versucht, aber das hat nicht geholfen. Ich stecke ziemlich fest.
Bodacydo

ist es genau so erforderlich? Ich werde eine wilde Vermutung anstellen und Folgendes annehmen: Das Audio steht im Mittelpunkt des Videos. Das Bild ist kein großes Problem. Sooo, konnten Sie nicht eine MP3-Datei aus dem Video extrahieren (natürlich verlustfreie Qualität) und dann das Bild aufnehmen, vielleicht sogar einen Screenshot, wenn Sie so verzweifelt sind, und dann ein neues Video in ffmpeg mit der extrahierten MP3-Datei und dem Bild mit dem erstellen fps auf 1 gesetzt?
Travis Crum

1
Die force_key_frames-Syntax für die Verwendung der Frame-Nummer lautet-force_key_frames "expr:eq(n,0)"
robd

Ich bin mir ziemlich sicher, dass das Grundproblem hier etwas anderes war. Encoder beginnen immer mit einem Keyframe.
Gyan

Antworten:


6

Um einen Keyframe mit dem Zeitcode 00: 00: 00.000 zu erzwingen, sollten Sie versuchen, das folgende Flag zu verwenden:

-force_key_frames 00:00:00.000

Was macht das genau?
Krieger Bob

Dadurch wird die Position des Keyframes um 00: 00: 00.000 erzwungen, der mit der ursprünglichen Anforderung abgefragt wurde.
Maxim

Könnten Sie bitte näher erläutern: Gilt dies nur für x264 oder einen Codec? Worauf bezieht sich die Zeit - die Zeit der Ausgabedatei? Wie kann ich für Overlays einen Keyframe an den Anfang eines überlagerten Videos setzen? Danke
Ondra Žižka
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.