Ich habe ein mkv (h264) -Video mit 23,976 fps (24000/1001), aber ich möchte es in 25 fps konvertieren, ohne es neu zu codieren und die Qualität zu verlieren. Ich weiß, dass mkvmerge dies kann (mit der Option --default-duration '0: 25fps'), aber ich möchte es wenn möglich direkt von ffmpeg aus tun. Laut den Dokumenten sollte dies funktionieren:
ffmpeg -i input.mkv -r 25 -vcodec copy output.mkv
aber wenn ich es ausführe, bekomme ich nur die gleichen Video-FPS. Was ist die richtige Methode, um dies in ffmpeg zu tun (falls vorhanden)?
-r
ist nicht mit der Stream-Kopie kompatibel und es gibt keine Bitstream-Filter zum Ändern der Framerate.Antworten:
Hier ist die Methode mit aktuellen Versionen von FFmpeg. Es basiert darauf, dass der Concat-Demuxer das PTS der Eingaben nach der ersten Datei nicht neu skaliert, sondern einfach einen festen Offset anwendet. Angenommen, Sie haben einen 30-fps-Stream mit einer Zeitskala von
15360
(typisch für die FFmpeg-Ausgabe). Das heißt, Frame0
hat PTS0
und Frame30
hat PTS15360
. Dies würde zu einem 45-fps-Stream werden, wenn wir die Zeitskala ändern könnten,23040
ohne die PTS-Werte zu beeinflussen.Im Wesentlichen ist dies die folgende Methode.
1 . Identifizieren Sie die Quelleneigenschaften.
Sie möchten die Quelleneigenschaften notieren, insbesondere die Auflösung und
tbn
.2a . (Optional) Ändern Sie die Zeitskala auf einen geeigneten Wert, um die Berechnung zu vereinfachen.
Das bringt uns
Wenn Sie diesen Schritt ausführen, sollte die neue Zeitskala gleich oder ein ganzzahliges Vielfaches der ursprünglichen Bildrate sein.
2b . Berechnen Sie die benötigte Zeitskala, damit der
x
PTS von Frame #x
in der Quelle für die Zielframerate den gleichen Wert wie der neue hattbn
. Wenn Sie Schritt 2a ausgeführt haben, ist dies sehr einfach und es ist einfach die neue Framerate. Für Ziel-FPS sollte also45
neutbn
sein45
.3 . Dummy-Video generieren.
Alle Eigenschaften sollten identisch sein wie Auflösung, H.264-Profil, Pixelformat, Refs-Anzahl usw. für beste Ergebnisse.
4 Konzentrieren Sie sich auf die Videos.
Erstellen Sie zuerst eine Textdatei
Dann der Concat
In der Ausgabedatei wird das 2. Video mit 45 fps abgespielt.
5 . Jetzt spalten Sie das Dummy-Preroll ab
und du hast
Ich habe gesagt, das war verworren!
quelle