64 votes

Comment puis-je 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 この質問 mais j'ai rencontré quelques problèmes.

Tout d'abord, tous les paquets 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 nombre entier) et j'ai utilisé la commande

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

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

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 seule image. (Je suppose que le * a utilisé la première correspondance, plutôt que chaque correspondance).

Cette question donne une manière légèrement différente de formater le nom du fichier, donc 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 une vidéo qui dure environ 3 secondes (la durée approximative que j'attendais) mais qui ne contient que la première image.

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

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ù est-ce que je me trompe, et que dois-je faire ?

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

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é comme un duplicata possible, mais il 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 ; elles ont été prises avec un appareil photo numérique ordinaire.

91voto

Tim Points 30349

Vous pouvez utiliser ffmpeg que vous pouvez installer avec la commande :

sudo apt install ffmpeg

C'est la commande tout court :

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

Laissez-moi vous expliquer :

-framerate

est le nombre de trames (images) par seconde,

-i image-%05d.jpg

cela détermine la séquence de noms de fichiers qu'il recherche. image- signifie que tous les fichiers commencent par ça. Le site d indique des nombres entiers décimaux, 5 est le nombre de chiffres, le zéro de tête indique que les nombres nécessitant moins de chiffres seront remplis, à gauche, de zéros afin que chaque nombre contienne exactement 5 chiffres. Ainsi, les fichiers qu'il détectera sont tout ce qui va de image-00000 à 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 - utiliser H.264 High Profile (fonctions avancées, meilleure qualité).

-crf 20 - mode qualité constante, très haute qualité (les chiffres les plus bas correspondent à une qualité supérieure, 18 étant le plus petit chiffre à utiliser).

-pix_fmt yuv420p - utiliser le format de pixel YUV et 4:2:0 Sous-échantillonnage de la chroma

output.mp4

Le nom du fichier ( output.mp4 )

Rappelez-vous que ffmpeg a besoin d'une séquence continue d'images pour se charger. S'il saute de image-00001 à image-00003 il s'arrêtera.

Si vos images sont nommées comme ceci :

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

alors changez le -i partie à -i image-%00d .


Mise à jour. Votre édition dit que le modèle est image-01.jpg à image-02.jpg . Cela signifie que vous avez besoin de la image-%02d.jpg modèle.

8voto

thl Points 81

Si vous ne voulez pas perdre votre temps avec le nom et l'ordre des fichiers, je vous recommande d'y jeter un coup d'œil :

-pattern_type glob

Les crédits pour cela vont cette réponse très complète à Comment créer une vidéo à partir d'images avec FFmpeg ?

Il fournira également plusieurs exemples.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X