web-dev-qa-db-fra.com

Comment créer une vidéo à partir d'images avec le nom de fichier aaaa-MM-jj: HH: mm: ss

J'ai beaucoup d'images (> 11.000) et je veux créer une vidéo avec avconv comme timelaps. Avec ffmpeg, j'ai fait l'affaire avec:

ffmpeg -r 25 -i "/mnt/stora/dahopi/Pictures/Gartencam/%*.jpg" \
       -vf scale=800:600 -c:v mpeg4 -vtag xvid -qscale:v \
       10 gartencam.avi

Mais avec avconv, cela ne fonctionne pas. Je pense que le problème est le sélecteur de fichiers %*.jpg et je me demande si j'ai la possibilité de créer la vidéo sans modification du nom de fichier.

Sinon, connaissez-vous un autre outil pour faire l'affaire?

2
DaHopi

J'ai bien peur que vous ayez raison à propos de l'erreur due au sélecteur de fichiers. Citant le manuel:

      For creating a video from many images:

              avconv -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi

      The syntax "foo-%03d.jpeg" specifies to use a decimal number composed of
      three digits padded with zeroes to express the sequence number. It is the
      same syntax supported by the C printf function, but only formats accepting a
      normal integer are suitable.

Si vous le souhaitez, vous pouvez commencer à un entier supérieur à 0:

  -start_number start
  Specify the first number in the sequence

Vous n'avez pas besoin de vraiment renommer: vous pouvez créer des liens symboliques avec la commande ln, ce qui prendrait vraiment peu de place sur votre disque.

je vous conseille de faire une sauvegarde de vos photos avant d'essayer des scripts

Vous pouvez essayer d'utiliser ce script bash:

#! /bin/bash
INPUTDIR="$1"
OUPUTDIR="$2"

SORTEDLIST="$(cd "$INPUTDIR" && ls -1 | sort -n)"

COUNT="$(echo -e "$SORTEDLIST"|wc -l)"
echo "Found $COUNT files"

ZEROES="$(echo -e "$COUNT"|wc -c)" # (will count \n)
echo "Using $ZEROES characters to display integers"

COUNTER="0"
for file in $SORTEDLIST; do
    ID="$(printf "%0${ZEROES}d" "$COUNTER")"

    echo "ln -s $INPUTDIR/$file $OUPUTDIR/$ID.jpg"
    ln -s "$INPUTDIR/$file" "$OUPUTDIR/$ID.jpg"

    COUNTER=$((COUNTER + 1))
done

Ce script suppose que toutes vos images se trouvent dans un répertoire contenant uniquement les images que vous souhaitez inclure dans votre vidéo. Pour l'utiliser:

  • créez un répertoire de sortie qui contiendra vos liens: mkdir output
  • l'exécuter ./script.sh nameofthefoldercontainingyourimages output
1
Gabriel Devillers