Voir le Créer un diaporama vidéo à partir d'images - FFmpeg
Si votre vidéo n'affiche pas correctement les images Si vous rencontrez des problèmes, tels que la première image est sautée ou ne s'affiche que pour une image, utilisez le filtre vidéo fps au lieu de -r pour la fréquence d'images de 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 passe en premier
ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4
J'ai testé ci-dessous les paramètres, 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 il saute toujours la première image
"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
faire une vidéo à partir d'images placées dans différents dossiers
Tout d'abord, ajoutez des 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"
Le paramètre -safe 0 empêche l' erreur de nom de fichier non sécurisé
Liens connexes
FFmpeg faisant une vidéo à partir d'images placées dans différents dossiers
FFMPEG Un guide intermédiaire / séquence d'images
Concaténer - FFmpeg
ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4
semblait fonctionner mais a finalement abouti à une vidéo illisible par n'importe quel joueur (sur Ubuntu). VNC a dit, "atome moov introuvable". Essayer de remédier à cela avecqt-faststart
produisant l'erreur «le dernier atome du fichier n'était pas un atome moov»-pattern_type glob
Cette excellente option facilite la sélection des images dans de nombreux cas.
Vidéo de diaporama avec une image par seconde
Ajoutez-y de la musique, coupez lorsque l'audio probablement plus long lorsque les images se terminent:
Voici deux démos sur YouTube:
Soyez un hippie et utilisez le format vidéo sans brevet Theora :
Vos images doivent bien sûr être triées par ordre alphabétique, généralement comme suit:
etc.
Je voudrais également d'abord m'assurer que toutes les images à utiliser ont le même rapport hauteur / largeur, éventuellement en les recadrant avec
imagemagick
ou des nomacs au préalable, afin que ffmpeg n'ait pas à prendre de décisions difficiles. En particulier, la largeur doit être divisible par 2, sinon la conversion échoue avec: "largeur non divisible par 2".Vidéo à vitesse normale avec une image par image à 30 FPS
Voici à quoi cela ressemble:
GIF généré avec: /ubuntu/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574
Ajoutez-y de l'audio:
Résultat: https://www.youtube.com/watch?v=HG7c7lldhM4
Voici les supports de test que j'ai utilisés: a
Images générées avec: Comment utiliser GLUT / OpenGL pour rendre dans un fichier?
Il est cool d'observer à quel point la vidéo compresse la séquence d'images bien mieux que ZIP car elle est capable de compresser entre les images avec des algorithmes spécialisés:
opengl-rotating-triangle.mp4
: 340 000opengl-rotating-triangle.zip
: 7,3 MConvertir un fichier de musique en vidéo avec une image fixe pour le téléchargement sur YouTube
Réponse à l' adresse : /superuser/700419/how-to-convert-mp3-to-youtube-allowed-video-format/1472572#1472572
Configuration de l'étude de cas de diaporama réaliste complète étape par étape
Il y a un peu plus à créer des diaporamas que d'exécuter une seule commande ffmpeg, voici donc un exemple détaillé plus intéressant inspiré de cette chronologie .
Obtenez le support d'entrée:
Nous examinons maintenant rapidement toutes les tailles d'image pour décider du rapport hauteur / largeur final:
qui sort:
le format d'image classique 480p (640x480 == 4/3) semble donc approprié.
Faites une conversion avec un redimensionnement minimal pour rendre les largeurs égales (TODO automatise pour n'importe quelle largeur, ici j'ai juste regardé manuellement la
identify
sortie et réduit la largeur et la hauteur de un):Cela produit un résultat terrible, car vu de:
ffmpeg prend juste la taille de la première image, 556x494, puis convertit toutes les autres à cette taille exacte, cassant leur rapport hauteur / largeur.
Maintenant, convertissons automatiquement les images au rapport hauteur / largeur cible 480p en recadrant selon ImageMagick: comment recadrer au minimum une image à un certain rapport hauteur / largeur?
Alors maintenant, le rapport hauteur / largeur est bon, mais inévitablement un recadrage a dû être fait, ce qui a coupé des parties intéressantes des images.
L'autre option est de remplir avec un arrière-plan noir pour avoir le même rapport hauteur / largeur que celui indiqué à: Redimensionner pour tenir dans une boîte et définir l'arrière-plan en noir sur la partie "vide"
De manière générale, cependant, vous serez idéalement en mesure de sélectionner des images avec des proportions identiques ou similaires pour éviter ces problèmes en premier lieu.
À propos des options CLI
Notez cependant que malgré le nom,
-glob
ce n'est pas aussi général que les modèles de shell Glob, par exemple:-i '*'
échoue: https://trac.ffmpeg.org/ticket/3620 (apparemment parce que le type de fichier est déduit de l'extension).-r 30
rend la-framerate 1
vidéo 30 FPS pour surmonter les bogues dans les lecteurs comme VLC pour les faibles fréquences d'images: VLC se fige pour une vidéo à 1 FPS faible créée à partir d'images avec ffmpeg Par conséquent, il répète chaque image 30 fois pour conserver l'effet 1 image par seconde souhaité.Prochaines étapes
Vous voudrez également:
coupez la partie de l'audio que vous voulez avant de la rejoindre: coupez les vidéos en fonction de l'heure de début et de fin à l'aide de ffmpeg
TODO: apprenez à couper et concaténer plusieurs fichiers audio dans la vidéo sans fichiers intermédiaires, je suis presque sûr que c'est possible:
Testé sur
ffmpeg 3.4.4, vlc 3.0.3, Ubuntu 18.04.
Bibliographie
la source
'
dans les noms de fichiers d'entrée et de sortie. Sinon, il ne trouvera pas les fichiers.ffmpeg-static
pas glob. (Pattern type 'glob' was selected but globbing is not supported by this libavformat build
)-pix_fmt
causé uneTrailing options were found on the commandline.
erreurffmpeg -framerate 1 -pattern_type glob -i '*.png' -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
sur Ubuntun 19.10 ffmpeg 4.1.4 pour le moment, quelle est votre version et commande exacte?Version simple de la documentation
Fonctionne particulièrement bien pour les images Google Earth Studio :
la source
%3d
ou%03d
?cat *.png | ffmpeg -f image2pipe -i - output.mp4
du wiki
la source