Générer une vidéo de 10s à partir d’une image
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).
Interressant, faudra que je teste