web-dev-qa-db-fra.com

avconv: faire une vidéo à partir d'un sous-ensemble sur des images

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?

21
Aly
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.

29
mark4o

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 - ...

7
Anton Khirnov

Regarde ça; selon ffmpeg c'est comme ça qu'ils font et ça marche

  1. Tout d'abord, renommez vos photos pour suivre une séquence numérique. Par exemple: img1.jpg, img2.jpg, img3.jpg, ...
  2. 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.

  3. 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
    
  4. 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));
    
5
Alex