Disons que j'ai un fichier mp3 d'une durée d'une minute. Et j'ai 20 images png. Je veux combiner ces images et un audio dans un fichier vidéo, mais je ne veux pas que chaque image dure 3 secondes à l'écran, je veux que certaines images durent 5 secondes, d'autres 1 seconde etc.
La seule façon dont je peux penser est simplement de copier les images qui devraient durer plus longtemps, par exemple pour que image1, image2, image3 soient exactement les mêmes, cela me donne 3 fois plus de temps en vidéo.
Cependant, cela prend beaucoup de temps et d'espace. Existe-t-il un commutateur / paramètre dans ffmpeg qui me permette de le faire?
Réponses:
En utilisant ffmpeg 2.0, il existe deux façons de procéder:
Une méthode consiste à utiliser les temps de modification des fichiers. Réglez d'abord l'heure de modification des fichiers image afin que chaque fichier image ait une heure de modification supérieure à celle qui le précède; la différence de temps est la durée de l'image précédente (avec une résolution de 1 seconde). Utilisez ensuite l'option démultiplexeur image2
-ts_from_file 1
. Par exemple:Une autre méthode consiste à utiliser le
concat
démultiplexeur , qui prend une liste de fichiers à concaténer, avec des durées facultatives. Créez d'abord un fichier répertoriant vos images et durées qui ressemble à ceci:Fournissez ensuite ce fichier en entrée à ffmpeg. Par exemple:
Vous devrez peut-être dupliquer le dernier fichier après la durée finale.
-c:a copy
copie l'audio mp3 tel quel; si vous souhaitez le convertir en un autre codec audio, vous pouvez le spécifier au lieu decopy
. Vous pouvez également spécifier un codec vidéo différent avec-c:v
ou un format de pixel différent avec-pix_fmt
, comme-c:v libx264 -pix_fmt yuv420p
.-vf fps=25
fera la cadence de sortie de 25 images par seconde. Si votre audio est plus long et que vous souhaitez le couper après les images, utilisez l'-shortest
option.la source
-c:v libx264 -profile:v baseline -pix_fmt yuv420p out.mp4
au lieu de out.avi, ou essayez un autre lecteur tel que mpv ou ffplay. Assurez-vous également que vous utilisez une version actuelle de FFmpeg et dupliquez le dernier nom du fichier image après la durée finale.En supposant
ffmpeg -i in.ffconcat -vf fps=25 out.avi
(2018: contenu du fichier in.ffconcat) - cela fonctionne:
alors que cela ne le fait pas
c'est à dire dans le deuxième cas
ffprobe out.avi -show_entries format=duration -v 0
la source