Ich versuche, die Framerate eines MP4-Videos zu ändern (es ist ein GoPro-Video mit 120 Bildern pro Sekunde, ich möchte es für einen Zeitlupeneffekt mit 30 Bildern pro Sekunde wiedergeben).
Ich benutze dafür avconv:
avconv -i SourceMovie.mp4 -vf setpts=4.0*PTS -r 30 DestMovie.mp4
Das funktioniert technisch, aber es kodiert den Film neu. Es ist nicht nur langsam, sondern auch ein Qualitätsproblem. Technisch sollte es eine Möglichkeit geben, einfach die fps im Header des Videos einzustellen, wie kann ich das ändern? (Jedes andere Tool als avconv würde auch funktionieren.)
quelle
MP4Box -add source.mp4#video -raw 1 -new test
) und speichern Sie ihn dann erneut als MP4 (MP4Box -add test_track1.h264:fps=30 -new dest.mp4
). Sie können dort auch eine Audiospur hinzufügen (über #audio).-single
Option für den ersten Befehl zu verwenden.MP4Box -single 1 -raw 1 SourceMovie.mp4
Erstellt nur eine DateiSourceMovie_track1.h264
anstelle von zwei.Das Ändern der Framerate im Header des Videos (Containers) hat keine Auswirkungen auf den Videostream (oder den Audiostream). Neucodierung ist die einzige Option.
Videostreams haben Zeitstempel und in den meisten Videos sind die Frames aufgrund der Interframe-Komprimierung voneinander abhängig. Einige Player können das Video beschleunigen und verlangsamen, jedoch nicht mit eingebetteten Befehlen oder Ähnlichem. Kein Spieler kann die Framerate im laufenden Betrieb ändern, wenn er von einem Containerbefehl dazu aufgefordert wird. Die Spezifikation der Videodatei wird nicht eingehalten (dh sie entspricht nicht den Standards), und 99,9% der Player lehnen die Einhaltung ab. Ohne Neukodierung ist es unmöglich, das zu tun, was Sie wollen. Natürlich können Sie mit dem Umkodieren bis zum letzten Schritt Ihrer Bearbeitung warten.
quelle
Für den Fall, dass Sie die Datei hauptsächlich in Zeitlupe wiedergeben und nicht als MP4 speichern möchten, können Sie sie mit dem MKVmerge-GUI-Tool in einen Matroska-Container umwandeln, mit dem sich die Framerate leicht ändern lässt. Remuxen ist viel besser als Neukodieren, da nur die Metadaten und nicht der Stream selbst geändert werden.
Zuerst installieren Sie das Paket
Dann starten Sie MKVmerge GUI. Sie werden mit einem solchen Fenster konfrontiert
Drücken Sie einfach die Schaltfläche Hinzufügen und wählen Sie Ihre Datei aus oder ziehen Sie die Datei einfach per Drag & Drop in den Bereich "Eingabedateien". Zu diesem Zeitpunkt sollten Sie in der Lage sein, den Videostream in Ihrem Video auszuwählen. Sie können auch andere Streams löschen, da diese sowieso nur stören.
Nachdem Sie es ausgewählt haben, sollten die unteren Registerkarten aktiv werden:
Wechseln Sie zu "Spezifische Aktionen formatieren"
Sie können sehen, dass es ein Feld "FPS" gibt, in das Sie den Wert für Frames pro Sekunde eingeben können. Es sah so aus, als ob Sie vorhatten, die Geschwindigkeit viermal zu senken, also wären etwa 7 Bilder pro Sekunde Ihr Ziel. Sie können auch die Option "Strecken nach" verwenden.
Danach können Sie einfach den Namen der Ausgabedatei ändern (wenn Sie möchten) und auf "Muxen starten" klicken.
Das Programm wird ausgeführt und Sie sollten Ihre Datei haben.
quelle
Ich wollte auch verlustfrei meine 120 FPS Filme auf 30 FPS verlangsamen. Ich habe ein Skript erstellt, indem ich das Sound-Tempo geändert und die FPS direkt im MP4-Container geändert habe. Folgende Werkzeuge werden benötigt:
Das für die Konvertierung verwendete Skript ist hier:
Dieses Skript erstellt eine Kopie von MP4 mit _slow Postfix.
quelle