it-swarm.com.de

Verwenden von ffmpeg zum Ändern der Bildfrequenz

Ich versuche, einen Videoclip (MP4, yuv420p) von 30 fps in 24 fps zu konvertieren. Die Anzahl der Frames ist korrekt, daher sollte sich meine Ausgabe von 20 Minuten bei 30 Bildern pro Sekunde auf 25 Minuten bei 24 Bildern pro Sekunde ändern. Alles andere sollte gleich bleiben.

Versuchen Sie, ich könnte alles, was ich versuche, mit ffmpeg umwandeln, die Framerate ändern, aber die Anzahl der Frames ändern, um die gleiche Dauer zu erhalten, oder die Dauer ändern, ohne die Framerate zu ändern.

Also habe ich normalerweise Dinge ausprobiert wie;

ffmpeg -y -r 30 -i seeing_noaudio.mp4 -r 24 seeing.mp4

(Ich mache das unter Windows, würde aber normalerweise unter Linux sein). Dadurch wird die Framerate konvertiert, Frames werden jedoch gelöscht, und die Gesamtdauer bleibt unverändert.

Oder ich habe es versucht 

ffmpeg -y -i seeing_noaudio.mp4 -filter:v "setpts=1.25*PTS" seeing.mp4

Was ändert die Dauer, aber nicht die Framerate.

Sicherlich sollte ich dies mit einem einzigen ffmpeg-Befehl tun können, ohne neu codieren zu müssen, oder sogar, da einige Leute vorschlugen, zu den ursprünglichen rohen Frames zurückzukehren.

Hilfe bitte

21
J Brand

Mit Umcodierung:

ffmpeg -y -i seeing_noaudio.mp4 -vf "setpts=1.25*PTS" -r 24 seeing.mp4

Ohne Umcodierung:

Erster Schritt - extrahieren Sie das Video in den Rohbitstream

ffmpeg -y -i seeing_noaudio.mp4 -c copy -f h264 seeing_noaudio.h264

Remux mit neuer Framerate

ffmpeg -y -r 24 -i seeing_noaudio.h264 -c copy seeing.mp4
26
Gyan

Geben Sie einfach die gewünschte Bildrate in "-r" vor der Eingabedatei an:

ffmpeg -y -r 24 -i seeing_noaudio.mp4 seeing.mp4

Die Optionen wirken sich auf die nächste Datei aus, nachdem Sie diese aktiviert haben. "-r" zwingt eine Eingabedatei dazu, ihren Header neu zu interpretieren, als wäre das Video bei der angegebenen Bildrate codiert. Es ist keine Rekompression erforderlich. Es gab ein kleines Dienstprogramm avifrate.exe , um die Avi-Dateikopfdateien direkt zu patchen, um die Framerate zu ändern. Der obige Befehl ffmpeg macht im Wesentlichen dasselbe, muss jedoch die gesamte Datei kopieren.

2
MKaama

Sie können den Filter fps verwenden. Die Geschwindigkeit der Videowiedergabe wird nicht geändert:

ffmpeg -i <input> -filter:v fps=fps=30 <output>

Hat gut funktioniert, um die Bilder pro Sekunde von 59,6 auf 30 zu reduzieren.

1
kelin

Sie können diesen Befehl verwenden und die Videodauer bleibt unverändert.

ffmpeg -i input.mp4 -r 24 output.mp4
0
Tim Le

Soweit ich weiß, können Sie dies mit ffmpeg nicht tun, ohne erneut zu kodieren. Ich hatte eine 24fps-Datei, die ich mit 25fps wollte, um mit anderem Material übereinzustimmen, mit dem ich arbeitete. Ich habe den Befehl ffmpeg -i inputfile -r 25 outputfile verwendet, der perfekt mit einer webm-, matroska-Eingabe zusammenarbeitete und zu einer h264, matroska-Ausgabe unter Verwendung des Kodierers führte: Lavc56.60.100

Sie können dasselbe mit 6 Bildern pro Sekunde erreichen, aber wie Sie bemerkt haben, ändert sich die Dauer nicht (was in den meisten Fällen eine gute Sache ist, da Sie sonst die Audiosynchronisierung verlieren). Wenn dies nicht Ihren Anforderungen entspricht, schlage ich vor, dass Sie diese Antwort versuchen, obwohl meine Erfahrung darin besteht, dass die Ausgabedatei immer noch neu codiert wird.

Für die beste Framegenauigkeit können Sie noch besser als bisher vorgeschlagene Streams in Raw-Streams decodieren. Ich benutze dafür ein Skript, wie unten abgebildet:

#!/bin/bash
#This script will decompress all files in the current directory, video to huffyuv and audio to PCM
#unsigned 8-bit and place the output #in an avi container to ease frame accurate editing.
for f in *
do
ffmpeg -i "$f" -c:v huffyuv -c:a pcm_u8 "$f".avi
done

Natürlich erwartet dieses Skript, dass alle Dateien im aktuellen Verzeichnis Mediendateien sind. Sie können jedoch leicht geändert werden, um die Verarbeitung auf eine bestimmte Erweiterung Ihrer Wahl zu beschränken. Beachten Sie, dass Ihre Dateigröße bei der Dekomprimierung in Raw-Streams um einen ziemlich großen Faktor zunimmt.

0
Elder Geek