Ich habe ein Video im MP4-Format mit einer Bildrate von .33
(1 Bild für 3 Sekunden). Ich möchte die Bildrate auf 5 Bilder / Sek. Erhöhen. Ich habe den folgenden Befehl ausprobiert, aber er macht nichts:
ffmpeg -i <input.mp4> -r 5 <output.mp4>
Irgendeine Idee, warum ffmpeg die -r
Option ignoriert ?
Antworten:
Ich weiß, dass dies eine alte Frage ist, aber keine der aktuellen Antworten ist mehr der empfohlene Weg.
Verlustfreies (Video-) Remuxing
Wie in den Kommentaren erwähnt, gibt es eine Möglichkeit, dies zu tun, wenn das Video nicht neu codiert werden muss. Es erfordert das Remuxen der Datei in ein anderes Containter-Format MKV und das anschließende Remuxen in ein MP4. Hier ist ein Beispiel, das ein Video auf 12 Bilder / Sekunde ändert:
Wenn das Video Audio enthält, können Sie dies auch verlangsamen, ohne die Tonhöhe zu ändern. Dies ist jedoch keine verlustfreie Konvertierung. Im folgenden Beispiel wird davon ausgegangen, dass das Quellvideo 24 Bilder / Sekunde betrug, sodass das Audio mit dem atempo- Filter von ffmpeg auf die halbe (0,5) Geschwindigkeit verlangsamt werden musste.
FFMPEG Wiki-Anleitung
Dies ist die Anleitung aus dem ffmpeg-Wiki . Beachten Sie, dass für alle diese Optionen das Video neu codiert werden muss.
Video beschleunigen / verlangsamen
Sie können die Geschwindigkeit eines Videostreams mithilfe des Setpts-Videofilters ändern. Beachten Sie, dass in den folgenden Beispielen der Audiostream nicht geändert wird. Daher sollte er idealerweise mit -an deaktiviert werden.
Um die Geschwindigkeit des Videos zu verdoppeln, können Sie Folgendes verwenden:
Der Filter ändert den Präsentationszeitstempel (PTS) jedes Videobilders. Wenn beispielsweise zwei aufeinanderfolgende Frames bei den Zeitstempeln 1 und 2 angezeigt werden und Sie das Video beschleunigen möchten, müssen diese Zeitstempel 0,5 bzw. 1 werden. Wir müssen sie also mit 0,5 multiplizieren.
Beachten Sie, dass bei dieser Methode Frames gelöscht werden, um die gewünschte Geschwindigkeit zu erreichen. Sie können verworfene Frames vermeiden, indem Sie eine höhere Ausgabe-Framerate als die Eingabe angeben. Um beispielsweise von einem Eingang mit 4 FPS zu einem Eingang mit einer Geschwindigkeit von bis zu 4x (16 FPS) zu wechseln:
Um Ihr Video zu verlangsamen, müssen Sie einen Multiplikator größer als 1 verwenden:
Glatt
Mit dem Minterpolate-Videofilter können Sie langsame / schnelle Videos glätten. Dies ist auch als "Bewegungsinterpolation" oder "optischer Fluss" bekannt.
Weitere Optionen sind slowmoVideo und Butterflow. Audio beschleunigen / verlangsamen
Mit dem atempo-Audiofilter können Sie Audio beschleunigen oder verlangsamen. So verdoppeln Sie die Audiogeschwindigkeit:
Der atempo-Filter kann nur Werte zwischen 0,5 und 2,0 verwenden (daher kann er auf nicht weniger als die Hälfte der ursprünglichen Geschwindigkeit und auf nicht mehr als das Doppelte der Eingabe verlangsamen). Wenn nötig, können Sie diese Einschränkung umgehen, indem Sie mehrere atempo-Filter aneinanderreihen. Folgendes vervierfacht die Audiogeschwindigkeit:
Mit einem komplexen Filtergraphen können Sie Video und Audio gleichzeitig beschleunigen:
quelle
mkvmerge --default-duration 0:24000/1001fps --fix-bitstream-timing-information 0 in.mkv -o out.mkv
Framerate am MKV-Container ändern . Sie können zu MKV und zurück zu MP4 remuxen oder ein Tool finden, das dies direkt für MP4 erledigt. Das xcodieren des Videos ist sehr CPU-intensiv und verlustbehaftet, daher ist es eine schreckliche Option.Wenn die Eingabedatei keine gültige Bildrate hat, müssen Sie sie möglicherweise explizit festlegen
quelle
Ich konnte die geänderte Bildrate nur dann wirksam werden lassen, wenn die Eingabedatei als "Rohdatei" klassifiziert wurde:
Ohne Angabe
-f h264
würde standardmäßig 25 fps verwendet und es könnte nicht geändert werden. Anscheinend lag dies daran, dass dem Stream überhaupt keine Framerateninformationen fehlten und dies die Standard-Framerate von ffmpeg ist.Wenn Sie
-r
als Ausgabeoption verwenden, werden anscheinend Frames dupliziert oder gelöscht, sodass das Video mit der gleichen Geschwindigkeit abgespielt wird - in diesem Fall nicht das, was Sie wollen! Wenn Sie jedoch die Framerate des Eingangs wie oben ändern, wird das Video beschleunigt oder verlangsamt, ohne dass Frames verloren gehen oder dupliziert werden.quelle
Ein solches Merkmal - das Ändern der Framerate - wird als "konform" bezeichnet und wird häufig verwendet, um Zeitlupe oder Schnellvorlauf zu erzeugen, wie das Wachstum einer Pflanze in Minuten innerhalb von Tagen. ffmpeg erlaubt kein Überschreiben / Ändern der Framerate ohne Neucodierung . In diesem Fall ändert sich die Dauer und der Ton ist nicht synchron, sofern er nicht separat repariert wird. Ich befürchte jedoch, dass Audio in Ihrem Fall mit einer Bildrate von 0,33 nicht von Interesse ist
Sie möchten sich anpassen, weil Sie nur die Framerate ändern möchten, aber ffmpeg ignoriert dies
-r
stillschweigendwenn die Framerate in der Eingabedatei angegeben ist. Da Ihre Eingabedatei im MP4-Format vorliegt, hat die eigene Framerate Vorrang vorwenn keine Neucodierung erforderlich ist. Dafür benötigen Sie ein anderes Werkzeug: Mencoder.-r
Angenommen, Ihre Eingabedatei enthält keinen Ton - wahrscheinlich für jedes Video mit einer Bildrate von 0,33 -, benötigen Sie Folgendes:
Beachten Sie, dass Mencoder standardmäßig eine Ausgabe im AVI-Format erzeugen.
quelle
r
als Ausgangsschalter angegeben, erzeugt ffmpeg unabhängig von der Framerate des Eingangs eine Ausgabe mit der angegebenen Framerate. Wennr
als Eingangsschalter angegeben, dupliziert oder löscht ffmpeg Frames nach Bedarf, um die angegebene Anzahl von Frames pro Sekunde des Eingangs dem Filter / Encoder zuzuführen.r
es sich um einen Eingabeschalter handelt, widerspricht meinem früheren Experiment zum MP4-Format, dem Hinweis von Malvineous (auf dieser Seite) und der Fehlerbeschreibung 403 trac.ffmpeg.org/ticket/403 ; Ihre Beschreibung, wannr
sie für die Ausgabe verwendet wird, erfolgt bei der Neucodierung, während das OP-Szenario aufgrund der Tatsache, dass er eine Framerate von 0,33 hatte, ein konformer Fall zu sein scheint (Framerate ohne Neucodierung korrigieren).r
fps generieren .-r
. Diese Verwendung konnte meine früheren Experimente als Reaktion auf OP nicht beeinflussen, da ich in einem konformen Fall den Kopierparameter nie aus ffmpeg entfernt habe und-r
daher ignoriert werde. Ich schrieb eine Feature-Anfrage: trac.ffmpeg.org/ticket/5170Am schnellsten erstellen Sie eine BAT-Datei im Verzeichnis mit den folgenden Zeilen:
Sie müssen mkvmerge und ffmpeg im selben Verzeichnis haben. Es ändert jede mp4-Datei in Sekunden automatisch ohne Qualitätsverlust.
quelle