web-dev-qa-db-fra.com

Comment créer un fichier vidéo à partir d'un ensemble d'images jpg?

Je tente de créer un fichier vidéo à partir d'un ensemble d'images JPG. J'ai adapté les instructions données dans cette question mais j'ai rencontré quelques problèmes.

Premièrement, tous les packages requis ne sont pas disponibles, mais sont remplacés par libav-tools, qui est déjà installé - donc je pense que ce n'est pas un problème réel?

Mes fichiers sont nommés image-NN.jpg (NN étant un entier) et j'ai utilisé la commande

avconv -i "image-%d.jpg" -r 25 -c:v libx264 -crf 20  -pix_fmt yuv420p movie.mov

selon la question liée, mais cela donne juste une erreur No such file image-%d.jpg. je

J'ai essayé de le changer en

avconv -i "image-*.jpg" -r 25 -c:v libx264 -crf 20  -pix_fmt yuv420p movie.mov

et cela produit un fichier vidéo de longueur 0:00 qui semble ne contenir qu'une image. (Je suppose que le * a utilisé la première correspondance plutôt que toutes les correspondances).

Cette question donne une manière légèrement différente de formater le nom du fichier, alors j’ai essayé

avconv -i "image-%02d.jpg" -r 25 -c:v libx264 -crf 20  -pix_fmt yuv420p movie.mov

Cela produit un fichier plus volumineux et crée une vidéo qui dure environ 3 secondes (environ la durée à laquelle je m'attendais), mais elle ne contient que la première image.

Une autre réponse à la première question liée suggère d'utiliser ImageMagick, alors je l'ai essayée

convert -delay 1 image-*.jpg output.mp4

Mais cela a produit une erreur

convert.im6: delegate failed `"ffmpeg" -v -1 -mbd rd -trellis 2 -cmp 2 -subcmp 2 -g 300 -i "%M%%d.jpg" "%u.%m" 2> "%Z"' @ error/delegate.c/InvokeDelegate/1065.

La version de avconv est

carl@number1 ~/Scott's stop-motion/1 $ avconv -version
avconv version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
built on Mar 16 2015 13:19:10 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
avconv 9.18-6:9.18-0ubuntu0.14.04.1
libavutil     52.  3. 0 / 52.  3. 0
libavcodec    54. 35. 0 / 54. 35. 0
libavformat   54. 20. 4 / 54. 20. 4
libavdevice   53.  2. 0 / 53.  2. 0
libavfilter    3.  3. 0 /  3.  3. 0
libavresample  1.  0. 1 /  1.  0. 1
libswscale     2.  1. 1 /  2.  1. 1

Où vais-je mal et que dois-je faire?

Supplémentaire: Il a été suggéré que je liste chaque fichier individuellement, donc avec un peu de Python j'ai généré cette

avconv -i image-01.jpg image-02.jpg image-03.jpg image-04.jpg image-05.jpg image-06.jpg image-07.jpg image-08.jpg image-09.jpg image-10.jpg image-11.jpg image-12.jpg image-13.jpg image-14.jpg image-15.jpg image-16.jpg image-17.jpg image-18.jpg image-19.jpg image-20.jpg image-21.jpg image-22.jpg image-23.jpg image-24.jpg image-25.jpg image-26.jpg image-27.jpg image-28.jpg image-29.jpg image-30.jpg image-31.jpg image-32.jpg image-33.jpg image-34.jpg image-35.jpg image-36.jpg image-37.jpg image-38.jpg image-39.jpg image-40.jpg image-41.jpg image-42.jpg image-43.jpg image-44.jpg image-45.jpg image-46.jpg image-47.jpg image-48.jpg image-49.jpg image-50.jpg image-51.jpg image-52.jpg image-53.jpg image-54.jpg image-55.jpg image-56.jpg image-57.jpg image-58.jpg image-59.jpg image-60.jpg image-61.jpg image-62.jpg image-63.jpg image-64.jpg image-65.jpg image-66.jpg image-67.jpg image-68.jpg image-69.jpg image-70.jpg image-71.jpg image-72.jpg image-73.jpg image-74.jpg image-75.jpg image-76.jpg image-77.jpg image-78.jpg image-79.jpg image-80.jpg image-81.jpg image-82.jpg image-83.jpg image-84.jpg image-85.jpg image-86.jpg image-87.jpg image-88.jpg  -r 25 -c:v libx264 -crf 20  -pix_fmt yuv420p movie.mov

Cela a eu le même effet que précédemment - seule la première image est utilisée.

Supplémentaire: Cette question a été suggérée comme possibilité de duplication, mais elle concerne l'acquisition d'images à l'aide d'une webcam connectée à un PC. . Ce n'est pas le problème que je rencontre. J'ai déjà les photos; ils ont été pris avec un appareil photo numérique ordinaire.

41
Carl H

Vous pouvez utiliser ffmpeg, que vous pouvez installer avec

Sudo apt install ffmpeg

C'est la commande tous ensemble:

ffmpeg -framerate 25 -i image-%05d.jpg -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv420p output.mp4

Laissez-moi le décomposer:

-framerate

est le nombre d'images (images) par seconde

-i scene_%05d.jpg

cela détermine la séquence de nom de fichier recherchée. image- signifie que tous les fichiers commencent par ceci. 0 est le nombre répété, et 5 est le nombre de fois (il recherche donc tout fichier commençant par image-00000.jpg. Le d lui dit de compter en nombres entiers; les fichiers qu'il détectera vont donc de image-00001 à image-99999.

-c:v libx264 -profile:v high -crf 20 -pix_fmt yuv420p

-c:v libx264 - le codec vidéo est libx264 (H.264).

-profile:v high - utilise le profil haut H.264 (fonctionnalités avancées, meilleure qualité).

-crf 20 - mode de qualité constante, très haute qualité (les chiffres inférieurs correspondent à une qualité supérieure, 18 est le plus petit que vous souhaitez utiliser).

-pix_fmt yuv420p - utilise le format de pixel YUV et 4: 2: 0 sous-échantillonnage de chrominance

output.mp4

Le nom du fichier (output.mp4)

N'oubliez pas que ffmpeg a besoin d'une séquence d'images continue pour être chargé. S'il passe de image-00001 à image-00003, il s'arrête.

Si vos images sont comme ça:

image-1
image-2
...
image-35

modifiez ensuite la partie -i en -i image-%00d.


Mettre à jour. Votre édition indique que le modèle va de image-01.jpg à image-02.jpg. Cela signifie que vous avez besoin du modèle image-%02d.jpg.

56
Tim