Est-il possible d'utiliser ffmpeg
créer une vidéo à partir d'un ensemble de séquences, où le nombre ne commence pas à partir de zéro?
Par exemple, j'ai des images [test_100.jpg, test_101.jpg, test_102.jpg, ..., test_200.jpg] et je souhaite les convertir en vidéo. J'ai essayé la commande suivante, mais cela n'a pas fonctionné (il semble que le nombre devrait partir de zéro):
ffmpeg -i test_% d.jpg -vcodec mpeg4 test.avi
Un conseil?
Réponses:
Il n’est pas nécessaire de renommer les fichiers si vous utilisez le
-start_number
commutateur comme ceci:où
n
est le début de la séquence d'images fixes.Notez que cela fonctionnera tant que la séquence sera ininterrompue une fois lancée. S'il y a des lacunes et que vous souhaitez que toutes les images soient incluses, il peut être nécessaire de renuméroter pour combler les lacunes.
Il existe d'autres commutateurs que vous pourriez trouver utiles.
J'utilise la pellicule suivante pour obtenir un taux de trame plus lent, pour compresser les images et obtenir une vidéo plus petite:
L'
-r 3
option définit le nombre d'images par seconde de la vidéo obtenue sur 3 images par seconde afin que je puisse les voir toutes pendant une courte période. L'-s
option redimensionne les images à la résolution souhaitée pour gérer la taille de la vidéo obtenue.(Dans le shell Windows, remplacez
-i Imgp%04d.jpg
par-i "Imgp%%04d.jpg"
. Merci à Mike Fitzpatrick https://superuser.com/a/344178/153054 )la source
vous pouvez utiliser l'extrait de code ci-dessous:
la source
Vous pouvez trouver un exemple de script dans la documentation de ffmpeg :
la source
cp
si la liaison ne fonctionne pas, si votre système de fichiers le prend en charge,cp --reflink=auto
l'utilisation de la vitesse / de l'espace sera bien meilleure.De la documentation de ffmpeg:
Utiliser un motif glob
ffmpeg prend également en charge l’agencement de style bash (* représente un nombre quelconque de caractères).
Ceci est utile si vos images sont séquentielles mais pas nécessairement dans un ordre séquentiel numérique comme dans les exemples précédents.
Donc, tant que vos fichiers sont triés, l'utilisation du
-pattern_type glob
commutateur devrait fonctionner pour vous.la source
Autant que je sache, vous ne pouvez pas commencer la séquence de manière aléatoire (je ne me souviens pas si vous devriez la commencer à 0 ou 1), en plus, elle ne peut pas avoir de trous, si ffmpeg supposera que la séquence est terminée et arrêtez d'ajouter plus d'images.
En outre, comme indiqué dans les commentaires de ma réponse, rappelez-vous que vous devez spécifier la largeur de votre index. Comme:
image% 03d.jpg
Et si vous utilisez un type d'index% 03d, vous devez ajouter à 0 le nom de fichier, comme suit:
image001.jpg image002.jpg image003.jpg
etc.
la source
Je suis d'accord avec Francisco, mais comme solution de contournement, vous pouvez simplement écrire un script rapide pour déplacer ou créer des liens symboliques vers les fichiers avec les numéros de séquence nécessaires à ffmpeg. Le script pourrait alors appeler ffmpeg, puis supprimer les liens ou ramener les fichiers à leur emplacement d'origine.
la source
Chercher
la source
Je sais que c'est une vieille question, mais je l'ai trouvée dans Google en cherchant la même réponse. Aucune des réponses ici ne me satisfaisait complètement alors j'ai fait plus de recherches et de lectures et c'est une commande que j'ai formulée pour mon propre problème.
La raison pour laquelle j'utiliserais une commande comme celle-ci est ...
la source
-start_number
c'est tout ce qui est nécessaire.J'utilise l'encodeur flv depuis que ma vidéo est enregistrée dans un lecteur flash (Jwplayer)
ffmpeg -i% d.jpg -vcodec flv test.flv
la source
D'après la documentation , il semble que vous puissiez simplement utiliser *
Il est à noter que pour améliorer la qualité, le débit en ips pourrait être important (par exemple, spécifier d'abord une fréquence d'images très basse / élevée, puis passer d'un deuxième filtre qui ramènera la vidéo au ralenti à la normale?)
la source
Dans mon cas, c'était un peu plus compliqué à cause des chiffres dans les fichiers. Voici à quoi ressemblent mes images:
et voici la commande que j'ai utilisée:
la source
Vous pouvez le faire avec
convert -morph
:Si vous voulez utiliser
ffmpeg
, j'ai utiliséoù le
10*PTS
ffmpeg dit de le ralentir 10 fois. Vous pouvez également avoir des fractions pour accélérer le processus.la source
-pattern_type glob
exemples concrets avec audioCette option a été mentionnée à l' adresse : https://superuser.com/a/782520/128124, mais voici quelques exemples concrets de son utilisation, notamment pour l'ajout d'audio à la sortie vidéo.
Diaporama vidéo avec une image par seconde
Ajoutez de la musique, coupez quand le son quand les images se terminent:
Voici deux démos sur YouTube:
Soyez un hippie et utilisez le format vidéo non-breveté de Theora :
Vos images doivent bien sûr être triées par ordre alphabétique, généralement comme suit:
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 ips
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:
Résultat: https://www.youtube.com/watch?v=HG7c7lldhM4
Convertir un fichier de musique en vidéo avec une image fixe pour le téléchargement sur YouTube
Réponse de: Comment convertir des MP3 au format vidéo autorisé par Youtube?
Obtenir des images d’entrée de test synthétiques
Voici les images de test que j'ai utilisées dans cette réponse:
Images générées avec: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292
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
: 340Kopengl-rotating-triangle.zip
: 7,3MÀ propos des options de l'interface de ligne de commande
Notez cependant que, malgré le nom,
-glob
cela n’est pas aussi général que les modèles de Glob de shell, 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 bugs dans les joueurs comme VLC pour low framerates: https://stackoverflow.com/questions/19267443/playback-issues-in-vlc-with-low-fps-video-from-images-using- ffmpeg / 41797724 # 41797724 Par conséquent, il répète chaque image 30 fois pour conserver l’effet souhaité d’une image par seconde.Prochaines étapes
Vous voudrez aussi:
coupez du son pour qu'il corresponde à la longueur de la vidéo: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
ajouter l'audio coupé: comment fusionner un fichier audio et vidéo dans ffmpeg
TODO: apprendre à couper et concaténer plusieurs fichiers audio dans la vidéo à partir de la ligne de commande:
Testé sur
ffmpeg 3.4.4, vlc 3.0.3, Ubuntu 18.04.
Bibliographie
la source