J'essaie de faire un tas de png dans une vidéo en utilisant avconv, les png sont numérotés comme filename_<number>
donc j'utilise généralement la commande:
avconv -r 10 -i filename_%d.png -b:v 1000k test.mp4
Je veux maintenant faire une vidéo à partir d'un sous-ensemble de fichiers filename_8
- filename_50
disons, j'ai donc copié ces fichiers dans un nouveau répertoire et essayé la même commande mais maintenant j'obtiens l'erreur:
filename_%d.png: No such file or directory
Je suppose que c'est parce que la numérotation ne commence pas par 1?
Comment puis-je atteindre cet objectif?
avconv -r 10 -start_number 8 -i filename_%d.png -b:v 1000k test.mp4
Vous aurez besoin d'une version 9.x récente de avconv pour le -start_number
option; ce n'est pas dans la version 0.8.x. Vous pouvez également utiliser une version récente de ffmpeg . Ou renommez les fichiers pour commencer par un nombre compris entre 0 et 4, car il vérifiera ces noms par défaut.
Vous pouvez concaténer les fichiers avec cat, puis utiliser le démultiplexeur image2pipe pour les lire dans avconv. Comme cat filename* | avconv -f image2pipe -i - ...
Regarde ça; selon ffmpeg c'est comme ça qu'ils font et ça marche
img1.jpg, img2.jpg, img3.jpg, ...
Ensuite, vous pouvez exécuter:
ffmpeg -f image2 -i img%d.jpg /tmp/a.mpg
Remarquerez que %d
est remplacé par le numéro de l'image.
img%03d.jpg
signifie la séquence img001.jpg
, img002.jpg
, etc.
Utilisez l’option ‘-start_number’ pour déclarer un numéro de départ pour la séquence. Ceci est utile si votre séquence ne commence pas par img001.jpg
mais est toujours dans un ordre numérique. L'exemple suivant commencera par img100.jpg
:
ffmpeg -f image2 -start_number 100 -i img%d.jpg /tmp/a.mpg
Si vous avez un grand nombre d'images à renommer, vous pouvez utiliser la commande suivante pour alléger le fardeau. La commande, utilisant la syntaxe bourne Shell, relie symboliquement tous les fichiers du répertoire courant qui correspondent à * jpg au /tmp
répertoire dans la séquence de img001.jpg
, img002.jpg
etc.
x=1;
for i in *jpg;
do counter=$(printf %03d $x);
ln -s "$i" /tmp/img"$counter".jpg;
x=$(($x+1));