Ich habe keinerlei Kenntnisse über die Videokodierung. Ich habe eine Anwendung in OpenGL und I geschrieben Ich speichere die erzeugten Frames in png
Bildern. Die Frames meiner App haben eine Geschwindigkeit von 7 FPS und ich versuche, daraus ein Video zu erstellen.
Zu diesem Zweck verwende ich ffmpeg wie folgt
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
, das von dieser Site genommen wurde , aber ich habe mich gefragt, ob es möglich ist, ein Video zu haben, das die Animation zeigt bei 30 FPS?
Kommentare
- Ähnliche Frage und Handbuch .
- Passen Sie einfach den Parameter
-framerate
an, um die gewünschten Ergebnisse zu erzielen.
Antwort
Ich verwende den folgenden Code, um dasselbe zu tun.
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -pix_fmt yuv420p -crf 23 output.mp4
Aufschlüsselung des Befehls:
ffmpeg <- call ffmpeg -framerate 30 <- set the input framerate to 30 -i img%03d.png <- read PNG images with filename img001, img002, img003, etc.. img can be changed to another prefix %03d can be changed to %04d for 0001, %05d for 00001 formats, etc... -c:v libx264 <- Set the codec to libx264 -pix_fmt yuv420p <- Set the pixel format to planar YUV 4:2:0, 12bpp -crf 23 <- set the Constant Rate Factor to 23 (default value) -output.mp4 <- the output filename
Hiermit wird die Eingabe mit 30 fps gelesen (-framerate 30
Option) und codiert es mit dem Codec libx264
mit dem konstanten Ratenfaktor von 23 (der -crf 23
Option).
Antwort
Es sind zwei Bildraten zu berücksichtigen: die Eingabe und die Ausgabe.
Standardmäßig beträgt die Eingabebildrate 25 und die Ausgabe verwendet dieselbe Bildrate wie die Eingabe, sofern Sie nichts anderes angeben.
Gleiche Bildrate für Eingabe und Ausgabe
Wenn Sie und geben die gleiche Bildrate aus und geben dann einfach die Eingabebildrate an. In diesem Beispiel wird eine Bildrate von 30000/1001 (NTSC-Video) festgelegt:
ffmpeg -framerate 30000/1001 -i input output.mp4
-
Alternativ können Sie in diesem Beispiel auch verwenden
ntsc
anstelle von30000/1001
, aber verwenden Sie29.97
nicht, da dies nicht korrekt ist oder Richtig. Siehe andere Bildraten-Aliase . -
Da die Standardeingabe-Bildrate 25 ist und wenn Sie Stellen Sie nur eine Ausgabe-Bildrate ein, dann werden Bilder gelöscht oder dupliziert, um dies zu kompensieren. Aus diesem Grund wird in dieser Situation die Eingabe-Bildrate festgelegt.
Unterschiedliche Bildrate für die Eingabe und Ausgabe
Manchmal möchten Sie möglicherweise, dass sich die Eingabe-Framerate und die Ausgabe-Framerate unterscheiden. Beispielsweise möchten Sie die Frames möglicherweise mit einer bestimmten Rate eingeben und dann Frames duplizieren oder löschen, sodass die Ausgabe eine hat Unterschiedliche Bildrate. Möglicherweise möchten Sie dies aufgrund von Kompatibilitätsproblemen mit Ihrem Ausgabeformatcontainer, Ihrem Player und / oder Ihrem Gerät tun:
-
In diesem Beispiel werden Frames von 10 auf 25 dupliziert. Die Konsolenausgabe zeigt an, ob Frames gelöscht oder dupliziert werden.
-
Der Bilddatei-Demuxer verwendet
-framerate
, während die Bildrate ausgegeben wird wird mit-r
festgelegt. -
Möglicherweise müssen Sie die Option
-pix_fmt yuv420p
in hinzufügen Unter bestimmten Umständen, wenn Sie H.264-Video ausgeben (die Konsolenausgabeffmpeg
warnt Sie, wenn dies erforderlich ist). Dies verwendet ein Chroma-Subsampling-Schema, das mit allen Spielern kompatibel ist.
Kommentare
- ffmpeg Version 3.2.2 sagt mir:
Option framerate not found.
🙁 - Ja, Sie haben Recht. Trotzdem gibt es die Option
-framerate
nicht Ich werde meinen Kommentar löschen, da er wirklich nichts mit der Konvertierung einer Reihe von Bildern in ein Video mit einer bestimmten Bildrate zu tun hat. - @erik
-framerate
existiert. Es ' wird von den Image- und Rawvideo-Demuxern und einigen Eingabegeräten wie x11grab und v4l2 verwendet. - Wo ist die Option
-framerate
dokumentiert? Ich ' habe die Seiteman ffmpeg
gelesen, konnte aber nicht ' finde es nicht. Vielleicht einen Zeiger? - OK, habe es gefunden …
FFMPEG-DEVICES(1)
.
Antwort
ffmpeg -framerate 30 -i img%03d.png output.mp4
wird in den letzten Jahren ausreichen t Version von ffmpeg.
Kommentare
- Vergessen Sie nicht die
-pix_fmt yuv420p
, da Sie sonst möglicherweise Dateien erhalten dass viele Software-Tools ' nicht mögen: trac.ffmpeg.org/ticket/8856
/ ul>
Antwort
Sie sprechen von Videointerpolation. Es gibt keine Möglichkeit, aus 7 fps 30 fps ohne Video-Interpolation zu machen … Grundsätzlich möchten Sie beim Erstellen von Videos von Anfang an 30 fps erhalten … Da die Video-Interpolation viel Ressourcen und Zeit in Anspruch nimmt und dies möglicherweise auch tun wird mit Artefakten gefüllt sein.Ich habe gehört, Sie können mit Adobe ein Einzelbild in einen Kurzfilm verwandeln, aber dort gibt es viel manuelle Arbeit …