[shell] script video thumbnailer pour Nautilus avec mplayer

j’avait déjà ça pour rox, un AppDir dédié.
pour nautilus il se fait déjà ce genre de chose avec totem ou gstreamer mais ils ne supportent pas bien tous les formats (real, wmv, …)

alors j’ai fait un script shell avec mplayer. :sol:
Mais il reste un soucis, les noms de fichiers avec des espaces.
Je me base sur les paramètres de la ligne de commande, nautilise envoie la taille des miniatures, le chemin du fichier et le nom qu’aura la vignette (%s, %i, %o)
l’ennuie c’est donc avec les espaces, pour spearer les paramètres j’utilise $2 pour les noms de fichier. mais si le fichier s’appel “une video à la con”, $2 = une, $3 = video, …

Alors si quelqu’un veut essayer de corriger… :slight_smile:

[fixed]#!/bin/sh

function make_gconf_keys () {
MIMETYPE=“video@mpeg video@quicktime video@x-msvideo video@x-ms-wmv video@x-ms-asf audio@x-pn-realaudio video@x-matroska”
CMD="${HOME}/Apps/nautilus-vthumbs.sh %s %i %o"

for i in $MIMETYPE; do
#echo $i
gconftool-2 --set --type bool /desktop/gnome/thumbnailers/$i/enable “true”
gconftool-2 --set --type string /desktop/gnome/thumbnailers/$i/command “$CMD”
done
}

function make_thumb () {
#file=echo $2 | sed 's/ /\\ /g'
#echo “$file”
/usr/bin/mplayer -really-quiet -nosound -ss 00:00:10 -vf scale=$1:-3 -frames 2 -vo png -z 5 “$2”
c=“0”
for i in 0000000?.png; do c=$(($c + 1)); done
mv 0000000$c.png $3
if [ $c -gt 1 ]; then
c=$(($c - 1))
while [ $c -ge 0 ]; do rm -f 0000000$c.png; c=$(($c - 1)); done
fi
#mv 00000002.png $3
#echo $@ >${HOME}/Apps/test.log
}

case $1 in
gc)make_gconf_keys;;
*)make_thumb $@;;
esac[/fixed]

PS : le script s’appel nautilus-vthumbs.sh et doit être placer dans ~/Apps, sinon il faut modifier la variable CMD
Pour creer/modifier les clés gconf : ./nautilus-vthumbs.sh gc

PPS : Autre erreur, il ne marche pas sur les mkv, je n’ai pas encore regarder pourqoi.

J’avais fait ça en python http://forums.gentoo.org/viewtopic-t-235759-highlight-.html

[fixed]#!/usr/bin/python

import os
import sys
import glob
import shutil
import urllib

def clean () :
files = glob.glob ( “/tmp/0000000?.png” )
for file in files :
os.remove( file )

input_file = urllib.unquote ( sys.argv[ 1 ] ).replace ( “file://”, ‘’, 1 ).replace ( “”", “\”")
output_file = sys.argv[ 2 ]
mplayer_cmd = “mplayer -nocache -nosound -zoom -vo png -z 5 -vf scale=128:96 -frames 2 -sstep 1 -ss 4 “” + input_file + “” > /dev/null 2>&1”
oldpwd = os.getcwd()

clean ()

os.chdir ( “/tmp” )
os.system ( mplayer_cmd )
os.chdir ( oldpwd )

if os.path.exists ( “/tmp/00000002.png” ) :
shutil.move ( “/tmp/00000002.png”, output_file )
elif os.path.exists ( “/tmp/00000001.png” ) :
shutil.move ( “/tmp/00000001.png”, output_file )
else :
print (" ERREUR miniature non crée ")
print ( input_file )
print ( output_file )

clean()[/fixed]plus de problèmes avec les accents ou les espaces (ça marche même avec les caractères unicode), mais quelques problèmes avec certaines vidéos (problèmes due a mplayer).

Bon maintenant j’utilise totem avec xine en backend et ça marche encore mieux.

Merci, ça regle un problème, mais il ne marche toujours pas sur les mkv, je l’ai un peu retoucher aussi.

Alors maintenant le script shell se réduit à ça :
[fixed]
MIMETYPE=“video@mpeg video@quicktime video@x-msvideo video@x-ms-wmv video@x-ms-asf audio@x-pn-realaudio video@x-matroska”
#CMD="${HOME}/Apps/nautilus-vthumbs.sh %s %i %o"
CMD="${HOME}/Apps/nautilus-vthumbs.py %s %u %o"

for i in $MIMETYPE; do
#echo $i
gconftool-2 --set --type bool /desktop/gnome/thumbnailers/$i/enable “true”
gconftool-2 --set --type string /desktop/gnome/thumbnailers/$i/command “$CMD”
done
[/fixed]

Et le script python :
[fixed]#!/usr/bin/python

import os
import sys
import glob
import shutil
import urllib

def clean () :
files = glob.glob ( “/tmp/0000000?.png” )
for file in files :
os.remove( file )

size = sys.argv[ 1 ]
input_file = urllib.unquote ( sys.argv[ 2 ] ).replace ( “file://”, ‘’, 1 ).replace ( “”", “\”")
output_file = sys.argv[ 3 ]
mplayer_cmd = “mplayer -nocache -nosound -zoom -vo png -z 5 -vf scale=” + size + “:-3 -frames 2 -ss 00:00:10 “” + input_file + “” > /dev/null 2>&1”
oldpwd = os.getcwd()

clean ()

os.chdir ( “/tmp” )
os.system ( mplayer_cmd )
os.chdir ( oldpwd )

if os.path.exists ( “/tmp/00000002.png” ) :
shutil.move ( “/tmp/00000002.png”, output_file )
elif os.path.exists ( “/tmp/00000001.png” ) :
shutil.move ( “/tmp/00000001.png”, output_file )
else :
print (" ERREUR miniature non crée ")
print ( input_file )
print ( output_file )

clean()[/fixed]

Je n’aime pas du tout totem :o

c’est bon j’ai trouver, le mimetype mkv c’est pas video@x-matroska mais application@x-matroska :smiley: