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

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 von 30000/1001, aber verwenden Sie 29.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 Konsolenausgabe ffmpeg 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 Seite man 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 …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.