So codieren Sie ein Video mit 30 FPS aus Bildern, die mit 7 FPS aufgenommen wurden


21

Ich habe keinerlei Kenntnisse über die Videokodierung, habe eine Anwendung in OpenGL geschrieben und speichere die erzeugten Frames in pngBildern. Die Frames meiner App haben eine Geschwindigkeit von 7 FPS und ich versuche, daraus ein Video zu erstellen.

Zu diesem Zweck benutze ich ffmpeg wie folgt

ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

Was wurde von dieser Seite genommen , aber ich habe mich gefragt, ob es möglich ist, ein Video zu haben, das die Animation mit 30 FPS zeigt?



Passen Sie den -framerateParameter einfach an, um die gewünschten Ergebnisse zu erzielen .
nullptr

Antworten:


21

Ich benutze den folgenden Code, um das Gleiche zu tun.

ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -pix_fmt yuv420p -crf 23 output.mp4

Kommando aufschlüsseln:

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

Dadurch wird der Eingang mit 30 fps ( -framerate 30Option) gelesen und mit dem libx264Codec mit dem konstanten Ratenfaktor 23 ( -crf 23Option) codiert .


26

Es sind zwei Bildraten zu berücksichtigen: die Eingabe und die Ausgabe.

Standardmäßig ist die Eingangsbildrate 25, und die Ausgabe verwendet dieselbe Bildrate wie die Eingabe, sofern Sie nichts anderes angeben.

Gleiche Bildrate für Ein- und Ausgabe

Wenn Sie ein- und ausgeben möchten, um die gleiche Bildrate zu erhalten, geben Sie einfach die Eingangsbildrate 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 ntscanstelle von verwenden 30000/1001, aber nicht verwenden, 29.97da dies nicht genau oder korrekt ist. Siehe andere Frameraten-Aliase .

  • Da die Standardeingabebildrate 25 ist und Sie nur eine Ausgabebildrate festlegen, werden Bilder gelöscht oder dupliziert, um dies zu kompensieren. Deshalb wird in dieser Situation die Eingangsbildrate eingestellt.

Unterschiedliche Framerate für Ein- und Ausgabe

Manchmal möchten Sie möglicherweise, dass sich die Eingangs- und Ausgangsbildrate unterscheiden. Beispielsweise möchten Sie die Frames möglicherweise mit einer bestimmten Rate eingeben und dann Frames duplizieren oder löschen, damit die Ausgabe eine andere Framerate aufweist. Möglicherweise möchten Sie dies aufgrund von Kompatibilitätsproblemen mit Ihrem Ausgabeformat-Container, Ihrem Player und / oder Ihrem Gerät tun:

ffmpeg -framerate 10 -i input -r 25 output.mp4
  • In diesem Beispiel werden Frames von 10 auf 25 dupliziert. Die Konsolenausgabe teilt Ihnen mit, ob Frames gelöscht oder dupliziert werden.

  • Der Bilddatei-Demuxer verwendet -framerate, während die Ausgabe- Framerate mit festgelegt wird -r.

  • Unter bestimmten Umständen müssen Sie diese -pix_fmt yuv420pOption hinzufügen, wenn Sie H.264-Video ausgeben (die ffmpegKonsolenausgabe warnt Sie, wenn dies erforderlich ist). Dies wird ein Chroma-Subsampling-Schema verwenden, das mit allen Playern kompatibel ist.


2
ffmpeg version 3.2.2 sagt mir: Option framerate not found.:-(
erik

Ja, du hast recht. Die Option -framerategibt es aber trotzdem nicht mehr. Ich werde meinen Kommentar löschen, da er wirklich nichts mit der Konvertierung einer Bildserie in ein Video mit einer bestimmten Bildrate zu tun hat.
Erik

4
@erik -framerateexistiert. Es wird von Image- und Rawvideo-Demuxern sowie einigen Eingabegeräten wie x11grab und v4l2 verwendet.
Logan

1
Wo ist die Option -frameratedokumentiert? Ich habe die man ffmpegSeite gelesen , konnte sie aber nicht finden. Irgendein Zeiger vielleicht?
Atcold

1
OK, fand es ... FFMPEG-DEVICES(1).
Atcold

1
ffmpeg -framerate 30 -i img%03d.png output.mp4  

wird in der neuesten version von ffmpeg ausreichen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.