Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[astuce] les vidéos thumbnails dans nautilus avec mplayer
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
razer
l33t
l33t


Joined: 08 Oct 2004
Posts: 893
Location: Paris - France

PostPosted: Mon Oct 11, 2004 10:45 pm    Post subject: [astuce] les vidéos thumbnails dans nautilus avec mplayer Reply with quote

Bon...
J'aime pas trop totem, il crashe pas mal, lit pas tjrs tout bien, gstreamer j'en parle mm pas...
Mais j'aime bien les aperçus de vidéos dans nautilus, que je le lit pour le reste avec mplayer, qui est je pense de loin le meilleur.
Or j'ai pas trouvé de système autre que totem-thumbnailer et gst. Donc j'ai commencé à travailler sur un thumbnailer utilisant mplayer. Il est bêta de chez bêta, mais je peux déjà vous en faire profiter.
Il nécessite mplayer biensur, et imagemagick. Désolé j'ai pas encore fait l'ebuild pour les dépendances :?
Code:

#!/bin/bash
input=$(echo "$1" |sed -e 's/file:\/\///'|sed -e 's/%20/ /g')
mplayer -really-quiet -vo png -z 5 -frames 1 -nosound "$input" >/dev/null 2>&1
convert -geometry 128x96 00000001.png "$2"
rm 00000001.png


Je suis ennuyé par 2 choses :
je cherche un moyen plus léger pour faire un resize de png que imagemagick
Enfin et surtout nautilus envoie les args en UTF avec un file:// devant. Pour le file://, c'est facile avec sed, mais convertir tous les caractères accentués correctement bonjour l'angoisse....

Donc pour l'instant :
çà ne fonctionne pas avec les fichiers aux caractères accentués (é,à, ù...)
Il faut améliorer le rendu en prenant une partie centrale de la vidéo (pour l'instant il thumb le début) : çà je pense pouvoir faire...

Enfin pour l'essayer, copier/coller le script qqupart (exemple : /usr/bin/mplayer-thumb, avec le chmod +x), puis éditer les clés dans gconf-editor :
Code:
desktop -> gnome -> thumbnailers -> video/*
command mplayer-thumb %u %o

Je ferais quand çà sera au point les keys correctes.
Back to top
View user's profile Send private message
SKBo
n00b
n00b


Joined: 21 Mar 2003
Posts: 24
Location: France

PostPosted: Sun Dec 19, 2004 11:04 pm    Post subject: Reply with quote

Bonsoir,

Je suis passé par là et j'ai trouvé l'idée excellente, donc j'ai commencé par ton petit script et j'ai retravaillé le tout pour en faire un truc un peu plus complexe. C'est en perl (je sais c'est mal, mais il est quand même en strict, donc c'est moins mal), normalement il gère correctement les accents, et dans l'ensemble, je l'ai testé sur une floppée de fichiers sans avoir de problèmes notables.

Ça n'utilise rien d'autre que mplayer, il faut une version qui supporte le -identify (toutes les versions récentes le font normalement), et il ne faut pas spécifier de really-quiet dans /etc/mplayer.conf (ailleurs j'ai pas essayé, ça se peut que ça marche), sinon mplayer n'affiche pas les informations du -identify (c'est idiot, et même en -verbose, il veut rien savoir...).
L'idée est la suivante, mplayer récupère les informations sur le fichier lors d'un premier passage, puis on calcule quel endroit lire (y'a une variable qui permet de spécifier quel pourcentage choisir) et quelle taille utiliser en fonction de ce qui est passé en paramètres ; mplayer lance la lecture sur une dizaine de frames (10 semble être une bonne valeur, certains fichiers ne passaient pas en dessous, et là encore, j'en ai 2 qui ne marchent pas très bien). Sur la dizaine d'images récupérées, le script récupère la plus grosse car c'est celle qui comportera dans la majorité des cas le plus de changements, et donc sera le plus susceptible d'être attrayante en petit format.

Maintenant, j'aimerai bien changer 2 3 comportements hasardeux. Pour l'instant, je n'ai pas trouvé comment dire à mplayer de stocker les fichiers générés ailleurs que dans le répertoire de l'utilisateur et/ou sous un autre nom que 0000xxx.png (ça fait vraiment moche de voir tous les fichiers apparaître lorsqu'une image est récupérée).
J'aimerai bien aussi que mplayer n'ai à récupérer qu'une seule image et qu'elle soit directement exploitable (genre prendre la prochaine keyframe), mais je sais pas non plus lui dire.
Enfin, pour rester dans l'esprit gentoo, j'aimerai bien passer ce script en python, mais vu que j'en ai jamais fait, je laisse le soin à d'autres de le faire (ou bien vous pouvez toujours attendre que je m'y mette ;)).

Et maintenant le script :
Code:
#!/usr/bin/perl
use strict;
my $percent = 20;
my $size = -1;
my $in = $ARGV[0];
my $out = $ARGV[1];
if($#ARGV < 1 or $#ARGV > 2) {
        die("Bad arguments:\tmplayer-thumbnail in out [size]\n");
}
if($#ARGV == 2) {
        $size = $ARGV[2];
}
$in =~ s/file:\/\///i;
$in =~ s/\%([A-Fa-f0-9]{2})/pack('C', hex($1))/seg;
my $infos = `mplayer -noaspect -noautosub -nortc -identify -vo null -nosound -frames 1 "$in" 2>/dev/null | grep ^ID`;
if($infos =~ m/ID_VIDEO_WIDTH=(\d+)/) {
        my $x = $1;
        if($infos =~ m/ID_LENGTH=(\d+)/) {
                my $t = $1;
                my $xy = "";
                if($size > 0 and $x > 8) {
                        $xy = "-zoom -xy $size";
                }
                $t = int($percent*$t/100);
                system("mplayer -really-quiet -noaspect -noautosub -nortc -vo png -z 5 -nosound -ss $t -frames 10 $xy \"$in\" >/dev/null 2>&1");
                system("mv `ls 000000*.png -S --color=never | head -n 1` $out");
                system("rm 000000*.png -f");
        }
}

Voilà voilà, amusez-vous bien, et hésitez pas à modifier et faire part de vos découvertes :-P...
Back to top
View user's profile Send private message
razer
l33t
l33t


Joined: 08 Oct 2004
Posts: 893
Location: Paris - France

PostPosted: Mon Dec 20, 2004 10:57 am    Post subject: Reply with quote

Super, çà fait plaisir que mon idée suive son cours... Ces aperçus sont bien pratiques, c'est ennuyeux d'être obligé d'installer totem/xine ou totem/gstreamer rien que pour çà...
Je vais essayer ton script, peut être légèrement le modifier, çà me permettra de me familiariser avec le perl que je n'utilise jamais, merci !
Back to top
View user's profile Send private message
cdemers
n00b
n00b


Joined: 11 Jan 2005
Posts: 2
Location: Montreal

PostPosted: Tue Jan 11, 2005 2:08 pm    Post subject: vidéos thumbnails Reply with quote

Ma petite contribution. C'est en bash avec mplayer, c'est pas encore parfait, mais ca fonctionne dans la plus part des cas. Idealement, il faudrait utiliser mktemp et restreindre le PATH, mais bon, c'est fonctionel.

Code:

#!/bin/bash
input=$(echo "$1" |sed -e 's/file:\/\///'|sed -e 's/%20/ /g'|sed -e 's/%2520/%20/g')
cd /tmp
mplayer -really-quiet -vo png -z 5 -frames 3 -ss 4 -nosound "$input" >/dev/null 2>&1
convert -geometry 128x96 00000002.png "$2"
# delete the temporary files (proofs :-), this code is big but it's just fine for testing.
let count=0
while [ $count -le 4 ]; do
  fname="0000000$count.png"
  if [ -e $fname ]; then
    rm $fname
  fi
  let count=count+1
done


Une autre version, plus un concept qu'une version, mais celui-la affiche un tiling de quatres (key) frames du video dans un meme thumbnail. C'est bcp trop lent pour etre utilise par tout le monde, mais si ca peut generer des idees...

Code:

cd /tmp
mplayer -really-quiet -vf framestep=I -vo png -z 5 -frames 600 -ss 4 -nosound "$input" >/dev/null 2>&1
convert \( 00000001.png 00000002.png +append \) \( 00000003.png 00000004.png +append \) -append -geometry 128x96  "$2"


Have fun!
_________________
Charle Demers
Back to top
View user's profile Send private message
kernelsensei
Bodhisattva
Bodhisattva


Joined: 22 Feb 2004
Posts: 5619
Location: Woustviller/Moselle/FRANCE (49.07°N;7.02°E)

PostPosted: Tue Jan 11, 2005 2:27 pm    Post subject: Reply with quote

@cdemers: merci pour cette contribution, et bienvenue sur le forum :D
_________________
$ ruby -e'puts " .:@BFegiklnorst".unpack("x4ax7aaX6ax5aX15ax4aax6aaX7ax2aX5aX8 \
axaX3ax8aX4ax6aX3aX6ax3ax3aX9ax4ax2aX9axaX6ax3aX2ax4ax3aX4aXaX12ax10aaX7a").join'
Back to top
View user's profile Send private message
bi3l
Apprentice
Apprentice


Joined: 06 Feb 2003
Posts: 268
Location: France

PostPosted: Tue Jan 11, 2005 10:47 pm    Post subject: Reply with quote

Une version un peu optimisée:
  • appel à sh (sous linux, ça ne fait aucune différence, mais sous d'autres systèmes, c'est vachement moins lourd)
  • appel à un unique sed pour normaliser le nom du fichier
  • mplayer redimensionne l'image tout seul (-vf scale); plus besoin d'imagemagick
Quote:
#!/bin/sh

input=`echo "$1" | sed -e 's,file://,,; s,%20, ,g; s,%2520,%20,g'`

cd /tmp
mplayer -nocache -nosound -zoom -vo png -z 5 -vf scale=128:96 -frames 2 -sstep 1 -ss 4 "$input" > /dev/null 2>&1
cd $OLDPWD

mv "/tmp/00000002.png" "$2"
rm -f "/tmp/0000000?.png"

Pour l'encodage des caractères, c'est un peu plus compliqué. On peut utiliser iconv, mais il faut connaitre l'encodage des noms des fichiers et ça je ne sais pas si c'est uniquement dépendant de l'encodage du système et pas aussi un peu du type de partition.
Back to top
View user's profile Send private message
GentooUser@Clubic
l33t
l33t


Joined: 01 Nov 2004
Posts: 829

PostPosted: Wed Jan 12, 2005 12:09 am    Post subject: Reply with quote

Je sais pas pourquoi mais aucun de vos scripts ne marchent chez moi :(

1: Je met le script dans /usr/local/bin
2: Je chmod +x dessu
3: J'edite la cle gconf /desktop/gnome/thumbnailers/video@mpeg/command pour apeller le script avec les bon paramètres mais les vidéos gardent leurs icônes standard

Une idée ?
Back to top
View user's profile Send private message
bi3l
Apprentice
Apprentice


Joined: 06 Feb 2003
Posts: 268
Location: France

PostPosted: Wed Jan 12, 2005 12:42 am    Post subject: Reply with quote

Assure-toi de ne pas t'être trompé dans le nom de l'exécutable ni dans ceux des paramètres et leur ordre:
Quote:
/usr/local/bin/mplayer-thumb %u %o

Tu dois mettre ça dans toutes les entrées video@... de la branche /apps/desktop/gnome/thumbnailers.

Vérifie que l'extension correspond bien au contenu des fichiers video. Tu peux essayer de te double-clicker sur le fichier, nautilus te diras s'il pense que le contenu et l'extension diffèrent.

Si rien ne marche, tu peux tenter de te déloger puis te reloger, on sait jamais.
Back to top
View user's profile Send private message
GentooUser@Clubic
l33t
l33t


Joined: 01 Nov 2004
Posts: 829

PostPosted: Wed Jan 12, 2005 3:58 am    Post subject: Reply with quote

J'ai tout tenté mais rien a faire :x
j'ai ajouté echo -e "\a" au script ça bippe pas quand je rentre dans un dossier avec des vidéos, donc le PB est au niveau de nautilus :(

EDIT: bon ça viens de mon user j'ai essayé en root ça marche
Back to top
View user's profile Send private message
razer
l33t
l33t


Joined: 08 Oct 2004
Posts: 893
Location: Paris - France

PostPosted: Wed Jan 12, 2005 7:37 am    Post subject: Reply with quote

GentooUser@Clubic wrote:
J'ai tout tenté mais rien a faire :x
j'ai ajouté echo -e "\a" au script ça bippe pas quand je rentre dans un dossier avec des vidéos, donc le PB est au niveau de nautilus :(

EDIT: bon ça viens de mon user j'ai essayé en root ça marche


Edite ton fichier ~.gnome/mime-info/user.keys et commente les lignes "icon_filename" relatives aux types mime de video
Back to top
View user's profile Send private message
GentooUser@Clubic
l33t
l33t


Joined: 01 Nov 2004
Posts: 829

PostPosted: Wed Jan 12, 2005 4:07 pm    Post subject: Reply with quote

J'ai pas de fichier ~.gnome/mime-info/user.keys
Les thumbnails son crées pour les vidéos que j'ajoute ou renomme mais pas pour les fichiers existant.

Je vais ouvrir un topic a part pour ce problème parce que ici c'est plutôt pour parler du script lui même, et puis j'ai le problème aussi avec totem-thumbnailer et gst-thumb.
Back to top
View user's profile Send private message
GentooUser@Clubic
l33t
l33t


Joined: 01 Nov 2004
Posts: 829

PostPosted: Wed Jan 12, 2005 8:57 pm    Post subject: Reply with quote

Bon problème résolu (voir mon topic) :D

Pour le problème avec les accents ce serai plus simple a résoudre en Python mais ça poserai pas des PB de performances ?

L'idéal serai de faire le truc en C (je pense que gnome-VFS fourni une fonction pour décoder les URI) mais ce serait plus du script :lol:

Au passage un truc bizarre : pour des vidéos qui ne contiennent pas d'accent, dont l'extension correspond au type et qui passent très bien avec mplayer la création de la miniature échoue une explication ?
Back to top
View user's profile Send private message
razer
l33t
l33t


Joined: 08 Oct 2004
Posts: 893
Location: Paris - France

PostPosted: Wed Jan 12, 2005 11:39 pm    Post subject: Reply with quote

GentooUser@Clubic wrote:
Bon problème résolu
Au passage un truc bizarre : pour des vidéos qui ne contiennent pas d'accent, dont l'extension correspond au type et qui passent très bien avec mplayer la création de la miniature échoue une explication ?


(Réponse à côté : mal lu mais je laisse quand même car interressant je trouve)
Oui : la gestion "à la windows" des types de fichier dans gnome, qui privilégie l'extention du fichier sur le "magic number" permettant de définir son type par le contenu (header)... Une belle bêtise je trouve :(
Conséquence : tu vires l'extension ".avi" le fichier est considéré comme une video, par contre tu remplaces par ".zip" et çà devient une archive... C'est nul je trouve...

(Après relecture)
Je n'ai pas rencontré ce problème... Pour diagnostiquer essaie de lancer le script en direct, et regarde si çà génère bien une image png... Histoire de savoir si çà vient de nautilus ou du script/mplayer
Back to top
View user's profile Send private message
GentooUser@Clubic
l33t
l33t


Joined: 01 Nov 2004
Posts: 829

PostPosted: Thu Jan 13, 2005 1:05 am    Post subject: Reply with quote

J'ai détecté d'où vient le PB, pour certaines vidéos la commande
Code:
mplayer -nocache -nosound -zoom -vo png -z 5 -vf scale=128:96 -frames 2 -sstep 1 -ss 4
ne crée qu'un fichier 00000001.png

j'ai donc un peut modifié le script
Code:
#!/bin/sh

input=`echo "$1" | sed -e 's,file://,,; s,%20, ,g; s,%2520,%20,g'`

cd /tmp
mplayer -nocache -nosound -zoom -vo png -z 5 -vf scale=128:96 -frames 2 -sstep 1 -ss 4 "$input" > /dev/null 2>&1
cd $OLDPWD

if [ -e "/tmp/00000002.png" ] ; then
  mv "/tmp/00000002.png" "$2"
else
  mv "/tmp/00000001.png" "$2"
fi

  rm -f "/tmp/0000000?.png"


J'ai encore des PB avec quelques vidéos mais je vais voir
:)

Après je verrais si je peut pas résoudre le PB d'accent en faisant un script python, je débute vraiment en python mais j'ai déjà codé une fonction de ce style (en fait j'ai fait une fonction qui fait l'inverse elle encode un path en URI gnome-vfs :lol: )
Back to top
View user's profile Send private message
GentooUser@Clubic
l33t
l33t


Joined: 01 Nov 2004
Posts: 829

PostPosted: Thu Jan 13, 2005 4:00 am    Post subject: Reply with quote

Voila ma version en python

J'utilise la fonction urllib.unquote pour les accents et ça marche très bien chez moi (j'ai "fr_FR.UTF8" comme locale)

Code:
#!/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()

C'est mon deuxième script en python si y'a des erreurs vous me le dites :)

Y'a encore un PB pour certaines vidéos aucune miniature n'est crée par mplayer, sauf si on augmentes de très beaucoup la valeur du paramètre "-frames" ce qui nuit enormement aux performances.


Last edited by GentooUser@Clubic on Fri Jan 14, 2005 3:37 pm; edited 4 times in total
Back to top
View user's profile Send private message
bi3l
Apprentice
Apprentice


Joined: 06 Feb 2003
Posts: 268
Location: France

PostPosted: Thu Jan 13, 2005 10:38 am    Post subject: Reply with quote

GentooUser@Clubic wrote:
J'utilise la fonction urllib.unquote pour les accents et ça marche très bien chez moi (j'ai "fr_FR.UTF8" comme locale)

Je ne suis pas un pro de python, mais il ne me semble pas que la fonction unquote ait un quelconque rapport avec les accents. Elle va juste convertir les séquences de caractères échappées %xx en leur équivalent non échappé. Par exemple, %7 va être converti en ~.

GentooUser@Clubic wrote:
Y'a encore un PB pour certaines vidéos aucune miniature n'est crée par mplayer, sauf si on augmentes de très beaucoup la valeur du paramètre "-frames" ce qui nuit enormement aux performances.

Tu pourrais poster quelque part une petite video avec laquelle le script rencontre un problème ?
Back to top
View user's profile Send private message
GentooUser@Clubic
l33t
l33t


Joined: 01 Nov 2004
Posts: 829

PostPosted: Thu Jan 13, 2005 11:17 am    Post subject: Reply with quote

Pour les accents tu as raison mais le problème est la justement, nautilus envoi le chemin de la vidéo au thumbnailer sous la forme d'une uri gnome-vfs, donc tous les caractères accentués son représenté sous la forme %XX, comme mplayer ne gère pas les uri gnome-vfs il faut utiliser la fonction unquote pour retrouver un path correct.

Pour les vidéos j'ai toujours pas accès a mon FTP wanadoo, donc difficile d'en poster une, y'a ces vidéos http://www.gainax.co.jp/hills/anno/animetion.html mais avec il plante dessus sur une erreur de segmentation "classique" (mais qui ne se produit pas pendant la lecture "normale" de la vidéo) chez moi donc ça recrée pas le bug des images crées qu'a partir de la xxxxème frame.

EDIT: j'ai un peut modifié mon script (correction du bugs, mais il est plus lourd).
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum