Comment encoder une vidéo à 30 FPS à partir d'images prises à 7 FPS

21

Je n'ai aucune connaissance du codage vidéo, j'ai une application écrite en OpenGL et je sauvegarde les images générées en pngimages. Les images de mon application sont à 7 FPS et j'essaie de créer une vidéo à partir de celles-ci.

À cette fin, j'utilise ffmpeg comme ceci

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

qui a été prise sur ce site , mais je me demandais s'il était possible d'avoir une vidéo qui montre l'animation à 30 FPS?

BRabbit27
la source
Ajustez simplement le -framerateparamètre pour obtenir les résultats souhaités.
nullptr

Réponses:

21

J'utilise le code ci-dessous pour faire la même chose.

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

Décomposer la commande:

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

Celui-ci lit l'entrée à 30 ips (en -framerate 30option) et l'encode à l'aide du libx264codec avec un facteur de débit constant de 23 (en -crf 23option).

Saaru Lindestøkke
la source
26

Il y a deux fréquences d'images à considérer: l'entrée et la sortie.

Par défaut, la fréquence d'images en entrée est de 25 et la sortie utilisera la même fréquence d'images que l'entrée, sauf indication contraire.

Même fréquence d'images pour l'entrée et la sortie

Si vous souhaitez que l'entrée et la sortie aient la même fréquence d'images, fournissez simplement la fréquence d'images en entrée. Cet exemple définit une fréquence d'images de 30000/1001 (vidéo NTSC):

ffmpeg -framerate 30000/1001 -i input output.mp4
  • Alternativement, dans cet exemple, vous pouvez utiliser à la ntscplace de 30000/1001, mais ne l'utilisez pas 29.97car ce n'est pas précis ou correct. Voir les autres alias de fréquence d'images .

  • Étant donné que la fréquence d'images d'entrée par défaut est 25, et si vous définissez uniquement une fréquence d'images de sortie, les images seront supprimées ou dupliquées pour compenser. C'est pourquoi la fréquence d'images en entrée est définie dans cette situation.

Fréquence d'images différente pour l'entrée et la sortie

Parfois, vous souhaiterez peut-être que la fréquence d'images en entrée et la fréquence d'images en sortie diffèrent. Par exemple, vous souhaiterez peut-être saisir les images à une certaine fréquence, puis dupliquer ou supprimer des images afin que la sortie ait une fréquence d'images différente. Vous pouvez le faire en raison de problèmes de compatibilité avec votre conteneur de format de sortie, votre lecteur et / ou votre appareil:

ffmpeg -framerate 10 -i input -r 25 output.mp4
  • Dans cet exemple, les images seront dupliquées pour passer de 10 à 25. La sortie de la console vous indiquera si des images sont supprimées ou dupliquées.

  • Le démultiplexeur de fichiers image utilise -framerate, tandis que la fréquence d'images de sortie est définie à l'aide de -r.

  • Vous devrez peut-être ajouter l' -pix_fmt yuv420poption dans certaines circonstances si vous sortez de la vidéo H.264 (la ffmpegsortie de la console vous avertira si vous en avez besoin). Cela utilisera un schéma de sous-échantillonnage chromatique compatible avec tous les lecteurs.

llogan
la source
2
ffmpeg version 3.2.2 me dit: Option framerate not found.:-(
erik
Oui, tu as raison. Mais néanmoins l'option -frameraten'existe plus. Je vais supprimer mon commentaire, car cela n'a vraiment rien à voir avec la conversion d'une série d'images en une vidéo avec un certain taux de rafraîchissement.
erik
4
@erik -framerateexiste. Il est utilisé par les démultiplexeurs image et rawvideo et certains périphériques d'entrée tels que x11grab et v4l2.
llogan
1
Où l'option est-elle -frameratedocumentée? J'ai lu la man ffmpegpage, mais je ne l'ai pas trouvée. Un pointeur, peut-être?
Atcold
1
OK, trouvé ... FFMPEG-DEVICES(1).
Atcold
1
ffmpeg -framerate 30 -i img%03d.png output.mp4  

sera suffisant dans la dernière version de ffmpeg.

Tessaracter
la source