web-dev-qa-db-fra.com

Comment créer une vidéo à partir d'images avec FFmpeg?

ffmpeg -r 1/5 -start_number 2 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

Cette ligne a bien fonctionné, mais je souhaite créer un fichier vidéo à partir d’images situées dans un autre dossier. Les noms d'images dans mon dossier sont:

img001.jpg
img002.jpg
img003.jpg
...

Comment puis-je entrer des fichiers images d'un autre dossier? Exemple: C:\mypics

J'ai essayé cette commande mais ffmpeg n'a généré qu'une vidéo avec la première image (img001.jpg).

ffmpeg -r 1/5 -start_number 0 -i C:\myimages\img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
115
user3877422

Voir le Créer un diaporama vidéo à partir d'images - FFmpeg

Si votre vidéo ne montre pas correctement les images Si vous rencontrez des problèmes, tels que la première image est ignorée ou ne s'affiche que pour une image, utilisez la touche Filtre vidéo fps au lieu de - r pour le nombre d'images par seconde en sortie

ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4

Alternativement, le filtre vidéo de format peut être ajouté à la chaîne de filtres pour remplacer - pix_fmt yuv420p comme "fps = 25, format = yuv420p ". L'avantage de cette méthode est que vous pouvez contrôler quel filtre va en premier

ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4

J'ai testé les paramètres ci-dessous, cela a fonctionné pour moi

"e:\ffmpeg\ffmpeg.exe" -r 1/5 -start_number 0 -i "E:\images\01\padlock%3d.png" -c:v libx264 -vf "fps=25,format=yuv420p" e:\out.mp4

les paramètres ci-dessous ont également fonctionné, mais la première image est toujours ignorée

"e:\ffmpeg\ffmpeg.exe" -r 1/5 -start_number 0 -i "E:\images\01\padlock%3d.png" -c:v libx264 -r 30 -pix_fmt yuv420p e:\out.mp4

créer une vidéo à partir d'images placées dans différents dossiers

Tout d’abord, ajoutez les chemins d’image à imagepaths.txt comme ci-dessous.

# this is a comment details https://trac.ffmpeg.org/wiki/Concatenate

file 'E:\images\png\images__%3d.jpg'
file 'E:\images\jpg\images__%3d.jpg'

Exemple d'utilisation comme suit;

"h:\ffmpeg\ffmpeg.exe" -y -r 1/5 -f concat -safe 0 -i "E:\images\imagepaths.txt" -c:v libx264 -vf "fps=25,format=yuv420p" "e:\out.mp4"

- safe 0 paramètre empêche erreur de nom de fichier

Liens connexes

FFmpeg réalise une vidéo à partir d’images placées dans différents dossiers

FFMPEG Un guide intermédiaire/séquence d'images

concaténer - FFmpeg

118
khan

-pattern_type glob

Cette excellente option facilite la sélection des images dans de nombreux cas.

Diaporama vidéo avec une image par seconde

_ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
  -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
_

Ajoutez de la musique, coupez quand le son quand les images se terminent:

_ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
  -c:a copy -shortest -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
_

Voici deux démos sur YouTube:

Soyez un hippie et utilisez le format vidéo non breveté de Theora :

_ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
  -c:a copy -shortest -c:v libtheora -r 30 -pix_fmt yuv420p out.ogg
_

Vos images doivent bien sûr être triées par ordre alphabétique, généralement comme suit:

_0001-first-thing.jpg
0002-second-thing.jpg
0003-and-third.jpg
_

etc.

Voir aussi: http://unix.stackexchange.com/questions/68770/converting-png-frames-to-video-at-1-fps/339399#339399

Vidéo à vitesse normale avec une image par image à 30 FPS

_ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
  -c:v libx264 -pix_fmt yuv420p out.mp4
_

Voici à quoi ça ressemble:

GIF généré avec: https://askubuntu.com/questions/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574

Ajoutez de l'audio à cela:

_ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
  -i audio.ogg -c:a copy -shortest -c:v libx264 -pix_fmt yuv420p out.mp4
_

Résultat: https://www.youtube.com/watch?v=HG7c7lldhM4

Convertissez un fichier de musique en vidéo avec une image fixe pour le téléchargement sur YouTube

Répondu à: https://superuser.com/questions/700419/how-to-convert-mp3-to-youtube-allowed-video-format/1472572#1472572

Obtenir des images d'entrée de test synthétiques

Voici les images de test que j'ai utilisées dans cette réponse:

_wget -O opengl-rotating-triangle.Zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.Zip
cd opengl-rotating-triangle
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
_

Images générées avec: Comment utiliser GLUT/OpenGL pour le rendu dans un fichier?

Il est intéressant d'observer à quel point la vidéo compresse mieux la séquence d'images que Zip, car elle est capable de compresser des images à l'aide d'algorithmes spécialisés:

  • _opengl-rotating-triangle.mp4_: 340K
  • _opengl-rotating-triangle.Zip_: 7.3M

A propos des options CLI

Notez toutefois que malgré le nom, _-glob_, ce n’est pas aussi général que les modèles Shell Glob, par exemple: _-i '*'_ échoue: https://trac.ffmpeg.org/ticket/362 = (apparemment parce que le type de fichier est déduit de l'extension).

_-r 30_ crée le _-framerate 1_ vidéo 30 FPS pour surmonter les bogues dans les lecteurs tels que VLC pour les basses fréquences d'images: VLC se bloque pour les vidéos basses de 1 FPS créées à partir d'images avec ffmpeg Il répète donc chaque image 30 fois pour conserver l’effet souhaité d’une image par seconde.

Prochaines étapes

Vous voudrez aussi:

TODO: apprendre à couper et concaténer plusieurs fichiers audio dans la vidéo sans fichiers intermédiaires, je suis sûr que c'est possible:

Testé le

ffmpeg 3.4.4, vlc 3.0.3, Ubuntu 18.04.

Bibliographie

Version simple de the Docs

Fonctionne particulièrement bien pour Google Earth Studio images:

ffmpeg -framerate 24 -i Project%03d.png Project.mp4
14
Joshua Pinter

cat *.png | ffmpeg -f image2pipe -i - output.mp4

de wiki

2
Hunger