Léa-Linux & amis :   LinuxFR   GCU-Squad   Zarb.Org   GNU
Archive de la liste aide - [Aide] Enchaîner les commandes bash
Hello,

L'interêt des scripts, c'est qu'on peut faire quelque chose de
générique qui marchera quel que soit la durée de la vidéo à traiter et
sans avoir à modifier le script.
Je propose donc le script suivant:

-------Debut du script---------

#!/bin/sh

VIDEO_NAME=$1
INTERVAL=$2
DEST_DIR=$3

# le premier awk pour isoler la durée du film aa.bb secondes
# le second awk pour supprimer les centiemes de seconde
VIDEO_LENGTH=`mplayer -identify -vo null -ao null -frames 0
"${VIDEO_NAME}"|grep ID_LENGTH | awk -F= '{ print $2 }' | awk -F.
'{ print $1 }'`

mkdir -p "${DEST_DIR}"
echo "La video dure $VIDEO_LENGTH secondes."
echo "Debut de l'extraction des images fixes" 
for s in $(seq 0 ${INTERVAL} $VIDEO_LENGTH); do
  mplayer -vo png -ao null -ss $s -frames 1 ${VIDEO_NAME} >/dev/null
2>&1 mv 00000001.png "${DEST_DIR}/$s.png"
done
echo "Extraction terminee"

-----Fin du script---------

Attention, il n'y a aucune vérification du nombre d'arguments en
entrée. Le script prend 3 arguments exactement: le fichier vidéo à
traiter, l'interval entre chaque image extraite en secondes et le
répertoire de destination, dans cet ordre.
Si le répertoire de destination n'est pas vide, les fichiers présents
seront écrasés.

A noter qu'il est également possible de faire en utilisant ffmpeg, qui
a l'avantage d'avoir moins de dépendances que mplayer, et qui evite la
boucle for et le mv:

------Second script--------
#!/bin/sh

VIDEO_NAME=$1
INTERVAL=$2
DEST_DIR=$3
FPS=`ffprobe "${VIDEO_NAME}" 2>&1 | sed -n "s/.*, \(.*\) fp.*/\1/p"`

ffmpeg -i "${VIDEO_NAME}" -filter:v
"select=isnan(prev_selected_t)+gte(t-prev_selected_t\,${INTERVAL}),setpts=N/(${FPS}*TB)"
"${DEST_DIR}"/img-%5d.png

------Fin du script--------

Ce script prend les mêmes arguments que le précédent.
Les images iront dans DEST_DIR et seront nommées img_00001.png,
img-00002.png, etc. Au besoin, on peut augmenter le gap de 0 en
modifiant le %5d (le chiffre indique le nombre de digit incrémenté,
donc %5d=> 5 chiffres, %8d=>8 chiffres)

Cordialement,
Ille


Serveur hébergé par ST-Hebergement et Lost-Oasis / IRC hébergé par FreeNode / NS secondaire hébergé par XName
Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons