RSS Feed Twitter

Générer une vidéo de 10s à partir d’une image

20 janvier 2012 par David BOZEC 1 commentaire »

Pour regarder un film chez moi, deux solutions s’offrent à moi : regarder un DVD ou un utiliser mon Média Center. En général je commence par me poser dans mon canapé puis je regarde quels sont les films disponibles sur mon Média Center pour en choisir un. Le problème est que les films que je possède en DVD ou Blu-Ray ne sont pas présentés via mon Média Center.

J’ai donc eu l’idée de créer des petites vidéos d’une dizaine de secondes, affichant la jaquette du DVD et précisant que le film est dans ma collection.

Histoire de faciliter les choses j’ai donc écris un petit script bash qui me génère les vidéos à partir de fichiers .jpg. Je crée donc un fichier .jpg par film, en 1920*1080 pixels sur lequel je colle la jaquette du DVD ou l’affiche du film et un message indiquant d’aller chercher le film parmi les DVD en stock.

Après avoir réuni toutes ces images dans un répertoire, il ne me reste plus qu’à lancer le script suivant pour générer les vidéos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/bash
#
# Ce script génère une vidéo de 10 secondes à partir de chaque image contenue dans le répertoire source
 
usage() {
   echo "usage : $(basename ${0}) src"
   echo ""
   echo "src: répertoire source"
}
 
if [[ $# != 1 ]]
then
   usage
else
   src=${1}
 
   set `ls ${src}`    # Liste tous les fichiers du répertoire
   while [[ $# != 0 ]]    # Boucler tant qu'il y a des fichiers dans le répertoire
   do
      if [[ ${1} != *.jpg ]]    # On vérifie s'il s'agit d'un fichier jpg ou non
      then
         echo skipping ${src}/$1
      else
         mkdir `basename ${1} .jpg` # On crée un répertoire temporaire au nom du fichier
         # On crée 10 images pour 10 secondes de vidéo
         cp ${src}/$1 `basename ${1} .jpg`/$1
         cp ${src}/$1 `basename ${1} .jpg`/'1.jpg'
         cp ${src}/$1 `basename ${1} .jpg`/'2.jpg'
         cp ${src}/$1 `basename ${1} .jpg`/'3.jpg'
         cp ${src}/$1 `basename ${1} .jpg`/'4.jpg'
         cp ${src}/$1 `basename ${1} .jpg`/'5.jpg'
         cp ${src}/$1 `basename ${1} .jpg`/'6.jpg'
         cp ${src}/$1 `basename ${1} .jpg`/'7.jpg'
         cp ${src}/$1 `basename ${1} .jpg`/'8.jpg'
         cp ${src}/$1 `basename ${1} .jpg`/'9.jpg'
 
         # On se déplace dans le répertoire temporaire
         cd `basename ${1} .jpg`/
 
         # On encode la vidéo à une image par seconde (fps 1)
         mencoder mf://*.jpg -fps 1 -ovc lavc -lavcopts vcodec=mpeg4 -o  clip.avi
 
         # On déplace et renomme la vidéo dans le répertoire d'éxecution
         mv  clip.avi ../`basename ${1} .jpg`.avi
         cd ..
 
         # On supprime le répertoire temporaire et son contenu
         rm `basename ${1} .jpg`/*
         rmdir `basename ${1} .jpg`
      fi
      shift
   done
fi

Voilà, ce script n’est certainement pas parfait mais il rempli son rôle. Je récupère pour chaque image contenue dans le répertoire source une vidéo de quelques centaines de kilo-octets qu’il me suffit de placer sur mon NAS pour les voir apparaître dans mon Media Center.

Attention cependant, les noms des fichiers images ne doivent pas contenir d’espaces et doivent bien être avec l’extension .jpg (attention à la casse).

 

Une réaction sur “Générer une vidéo de 10s à partir d’une image”

  1. cyril dit :

    Interressant, faudra que je teste