Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/06/2007, à 09:15

jovial

Script export fichiers playlist rhythmbox

Bonjour

Un script pour exporter les fichiers d'une liste de lecture de rhytmbox en y incluant une playlist *.m3u afin de conserver l'ordre de lecture des fichiers

Je l'utilise pouvoir emmener mes liste de lecture sur ma clé USB et les lire sur un autre pc
Avec Rhythmbox on peut sélectionner des fichiers de faire un glissé déposé sur un média dans ce cas l'ordre de lecture est perdu.

Ce script permet:
- d'exporter les fichiers d'une liste de lecture Rhythmbox vers un média
   ou un répertoire avec une liste *.m3u qui conserve l'ordre de lecture afin de l'utiliser sur autre machine
- de lire une liste Rhythmbox dans Totem
- d'afficher les informations d'une liste

Edité le 8 juin 2010 , mis à jour pour ubuntu 10.04

#!/bin/bash
# 
# export_playlist_rhytmbox.sh  by Jean-Luc Tremelet  o.jovial@gmail.com
# Thanks to many people who help me on Ubuntu forums to build this code 
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2.

# Ce script permet: 
# - d'exporter les fichiers d'une liste de lecture Rhythmbox vers un média 
#   ou un répertoire avec une liste *.m3u qui conserve l'ordre de lecture afin de l'utiliser sur autre machine
# - de lire une liste Rhythmbox dans Totem
# - d'afficher les informations d'une liste

# Mode d'emploi: copier ce contenu dans un éditeur de texte Gedit par exemple,
# enregistrer par exemple export_playlist_rhytmbox.sh
# rendre exécutable nautilus>clic droit> propriété > onglet permissions > cocher rendre exécutable 


# ATTRIBUTION VARIABLES------------------------------------------------------------

#fichxml=~/.gnome2/rhythmbox/playlists.xml #anciennement
fichxml=~/.local/share/rhythmbox/playlists.xml #pour Ubuntu 10.04
echo emplacement de votre playlist Rhythmbox : $fichxm
fichtxt=playlist.txt
ListeTxt=listeLecture.txt
Liste_lecture=listeLecture.m3u
CmdZennityList=./listeSelection.txt
ListeTag=listeTag.txt

rm $fichtxt
rm $ListeTxt
rm $Liste_lecture
rm $CmdZennityList
rm $ListeTag
rm $ListOut

# SELECTION PLAYLIST --------------------------------------------------------------


grep  static $fichxml | sed -e 's/\" type="static">//' | sed -e 's/<playlist name="//'

Listchoix=`grep  static $fichxml | sed -e 's/\" type="static">//' | sed -e 's/<playlist name="//'|\
     zenity --list --title "Listes de lecture Rhythmbox" \
            --width=300 --height=300 \
            --text "" --column "Sélectionnez une liste"`

if [ "$Listchoix" = "" ];then
	exit 0	
fi


# on enleve les 2 espaces devant(pas compris pourquoi???)
Listchoix=${Listchoix:2}
ListName=$Listchoix
# on ajoute les apostrophes et
Listchoix=\'$Listchoix\'
echo liste choisie: "$ListName"

xmllint --shell $fichxml >$fichtxt <<EOD
cat //playlist[@name=$Listchoix]
EOD

# TRAITEMENT format xml > txt > m3u --------------------------------------------------------------


# on traite la chaine pour convertire l'url au format local, on envoie dans un fichier texte
# on utilise une instruction perl
grep  '<location>' $fichtxt | sed 's/ //g'| sed -e 's/<location>file:\/\///' | sed -e 's/<\/location>//' | perl -pe 's|%([0-9a-f]{2})|pack('C',hex($1))|segi;' > $ListeTxt

# Rhythmbox conserve les fichiers absents (cas fichiers supprimés, déplacé ou média amovible)
# On test l'existence des fichiers et on crée une liste .m3u
while read line
		do  #pour chaque 
	if [ -f "$line" ]
	then			
			PathFichier="$line"
			#on réecrit dans un fichier
			echo "$PathFichier" >>$Liste_lecture
			echo "$PathFichier"    
		else
			echo ABSENT: $PathFichier
	fi
done < $ListeTxt


# CHOIX ACTION-------------------------------------------------------------------------------------
radio1="Copiers les fichiers vers ..."
radio2="Voir la liste des fichiers"
radio3="Afficher les informations des fichiers(tag)"
radio4="Ecouter avec le lecteur Totem"
Action=$(zenity  --list  --title "Liste de lecture Rhythmbox" --width=400 --height=400 --text "Liste de lecture: ambiance \n23 fichiers \nQue voulez vous faire ?" --radiolist  --column "Choix" --column "Action" TRUE "$radio1" FALSE "$radio2" FALSE "$radio3" FALSE "$radio4")

# AFFICHER LISTE FICHIER
if [ "$Action" = "$radio2" ] ;then
	zenity --text-info --filename="$Liste_lecture" --width 640 --height 480
exit 0
fi

# AFFICHER LISTE TAG -> en recherche des instructions pour construire ce code
if [ "$Action" = "$radio3" ] ;then
	echo "Opération non disponible dans cette version" >$ListeTag
	zenity --text-info --title="Info audio" --filename=$ListeTag
exit 0
fi

# LIRE TOTEM
if [ "$Action" = "$radio4" ] ;then
	`totem --fullscreen "$Liste_lecture" &`; exit 0
fi

#  COPIER LES FICHIERS
if [ "$Action" = "$radio1" ] ;then
	echo "choix: copier"
fi

#  ANNULATION
if [ "$Action" = "" ] ;then
	zenity --info --title="Export liste" --text="Opération annulée"
exit 0
fi

# On continue à executer le script

	# REPERTOIRE CIBLE ------------------
	# sélectionne le répertoire de destination des fichiers à copier - vous pouvez en créer un nouveau
	if DirCible=`zenity --file-selection= --directory --title="Choix du répertoire cible" ` #--filename=$DirCible
	then
		echo repertoire exportation: $DirCible
	else 
		exit 0;
	fi 

	# SELECTION --------------------------
	# suite à problème problème de caractères spéciaux on contruit une commande dans un bash
	# pour chaque ligne on ajoute TRUE et des "
	while read line
	do  
		cmd="$cmd TRUE \"$line\" "
	done <$Liste_lecture 
	echo "$cmd"    
	# on crée la commande de la boite de dialogue zenity de sélection
	cmd="zenity --list --checklist --title \" export des fichiers de la liste multimédiat\" --text \"Selectionner les fichiers à copier vers $DirCible\" --width 800 --height 600 --column copier --column fichiers $cmd"
	# on écrit le fichier bash pour l'affichage de la boite de dialogue
	echo "#!/bin/bash" > $CmdZennityList
	echo "$cmd" >> $CmdZennityList
	# on le rend executable
	chmod +x $CmdZennityList
	#on l'execute	
	echo	$CmdZennityList
	if cmd=`$CmdZennityList` ; then
		echo "execution cmd"
	else 
		zenity --info --title="Export liste" --text="Opération annulée"
		exit 0;
	fi

	# COPIE FICHIER avec liste *.m3u-------------------------------------------------------------------
	
	# on ajoute un séparateur à la fin du résultat
	cmd="$cmd|"


	echo DirCible: "$DirCible"
	NomList="0-Playlist-"$ListName".m3u"
	ListOut="$DirCible"\/$NomList
	echo Liste de sortie: "$ListOut"
	# on execute une boucle sur le résultat à chaque séparateur |
	# copie des fichiers suivants
	echo "$cmd" | while read -d '|' line 
	do

	   # ajout du nom de fichier dans la liste *.m3u de sortie
		echo `basename "$line"` >>"$ListOut"
		# copie  fichier vers repertoire cible    
		cp "$line" "$DirCible"   
		echo copie "$line" 
	done
	# FIN OUVERTURE CIBLE---------------------------------------------------------------------------
	zenity --question --title "Export liste" --text "Fichiers copiés sur:\n $DirCible \nCréation de la liste portable:\n $ListOut\n \n Voulez vous ouvrir le répertoire cible?"
	if [ "$?" != "1" ]
		then
			echo ouverture nautilus
			nautilus "$DirCible"
	fi	

 # zenity --info --title=" " --text="Fin de script"

Mode d'emploi:
  Copier ce contenu dans un éditeur de texte Gedit par exemple,
  Enregistrer par exemple export_playlist_rhytmbox.sh
  Rendre exécutable Nautilus > clic droit > Propriété > onglet Permissions > cocher rendre exécutable
  Double cliquer sur le fichier export_playlist_rhytmbox.sh et cliquer sur lancer

Eventuellement qui pourrai m'aider à coder d'autre fonctionnalités
1- l'affichage des tags -en cours
2 - l'ajout d'un zenity progress lors de la copy des fichiers
3 - Une conversion au format mp3 des fichier ogg lors de l'export

Dernière modification par jovial (Le 08/06/2010, à 15:20)


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#2 Le 05/05/2008, à 02:43

yurek

Re : Script export fichiers playlist rhythmbox

merci ca va me servir, pour autre chose mais ca va me servir quand meme


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#3 Le 14/04/2009, à 08:31

usky

Re : Script export fichiers playlist rhythmbox

Eh bien moi cela me sert pas mal !

jovial, as tu fait progressé ton script ?
Si ce n'est pas le cas je regarderais pour ajouter 2,3 trucs. Mais ca marche nickel.


Un PC Desktop Sous Ubuntu 12.04 Unity + acer1410 sous Unity Plus de windows depuis 2007 Le PC acer est sous Windows7... Ubuntu ne marche plus correctement depuis la 12.04...
http://parrains.linux.free.fr/

Hors ligne

#4 Le 16/04/2009, à 08:54

jovial

Re : Script export fichiers playlist rhythmbox

usky a écrit :

Eh bien moi cela me sert pas mal !

jovial, as tu fait progressé ton script ?
Si ce n'est pas le cas je regarderais pour ajouter 2,3 trucs. Mais ca marche nickel.

Hello

Non , j'ai même pas touché au bash depuis et  je n'utilise plus ce lecteur  donc vas y propose tes améliorations.

Bye

jluc


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#5 Le 23/05/2010, à 15:12

arnaud_d

Re : Script export fichiers playlist rhythmbox

Bonjour,

J'aimerais beaucoup utiliser ce script mais il semble qu'il ne marche pas sur 10.04
La première erreur, que j'ai su corriger, est que le fichier de playlist se trouve à l'adresse :

~/.local/share/rhythmbox/playlists.xml

et non

~/.gnome2/rhythmbox/playlists.xml

Par contre après il me fait une erreur :

test.sh: 50: Bad substitution

Si quelqu'un a une version mise à jour je suis preneur !

Hors ligne

#6 Le 08/06/2010, à 13:40

jovial

Re : Script export fichiers playlist rhythmbox

Hello

J'ai mis à jour pour utiliser sur la 10.04

@ arnaud_d
Merci pour le retour , j'ai fait la modification, test ok sur 10.04

Bye

Jluc

Dernière modification par jovial (Le 08/06/2010, à 15:12)


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#7 Le 08/06/2010, à 20:05

Inso

Re : Script export fichiers playlist rhythmbox

Merci Jovial pour ce script !

Pour simplifier mes transferts de playlists, serait-il difficile d'avoir une option pour exporter toutes les playlists en une fois ?

Je m'explique:
j'ai récupéré un petit script (sur le forum, je ne sais plus où) pour changer les arborescences dans le fichier playlist (pour passer les playlists de mon pc vers un ipod sous rockbox)

#!/bin/bash
cd /home/inso/Musique/Playlists
for y in `ls *.m3u`;
do 
   echo y
   sed 's_/mnt/Sata2/Musique/Musiques_/Musiques_' $y > temp; mv temp ../Ipod/$y;
done
rm /media/IPOD/Playlists/*
cp /home/inso/Musique/Playlists/Ipod/*.* /media/IPOD/Playlists

Si ton script pouvait être adapté pour extraire toutes les playlist de Rhythmbox dans autant de fichier (avec comme nom celui de la playlist) se serait vraiment super !
(j'ai bien essayé, mais je suis une bille en bash...)

L'objectif est de lancer ce script, avec à la suite le script ci-dessus pour changer les arborescences puis un script rsync pour mettre complètement à jour mon ipod (en ums) en une seule opération.
(je sais, la paresse c'est pô bien, surtout quand on demande aux autres de bosser...)

Inso

Dernière modification par Inso (Le 08/06/2010, à 20:09)

Hors ligne

#8 Le 10/06/2010, à 15:39

jovial

Re : Script export fichiers playlist rhythmbox

Bonjur

Oui j'y pensais, la possibilité de transférer plusieurs liste à la fois, ajouter des cases à cocher pour sélectionner les playlist dans la 1ere boite de dialogue et ensuite traiter .
Au niveau bash j'ai peu retouché depuis 2007, m'y remettre, c'est du temps et là j'ai pas du tout la dispo pour.
Avis au bonnes âmes...

Bye


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#9 Le 10/06/2010, à 20:50

Inso

Re : Script export fichiers playlist rhythmbox

En tout cas, merci d'avoir répondu.

Je vais essayer de me plonger dedans...

Inso

Hors ligne

#10 Le 18/06/2010, à 20:16

Inso

Re : Script export fichiers playlist rhythmbox

Bonjour,

J'ai donc modifié le script de Jovial pour l'adapter à mon cas.
- Génération des fichiers playlists (m3u) à partir de la base xml de Rhythmbox
- Modification des chemins pour adapter les playlists à la structure de l'Ipod
- Copie des playlists vers l'Ipod
- Synchronisation du dossier musique du pc vers l'Ipod

Mon Ipod est géré en UMS, avec Rockbox (ce script est donc valable pour tous les baladeurs en UMS)
Je ne teste pas l'existence des fichiers, je présume que si j'ai pu générer une playlist sous Rhythmbox, c'est que le fichier est présent.
En fait, ce n'est pas certain. Pour choisir les musiques à synchroniser (j'en ai plus que la contenance de l'Ipod), j'ai 2 dossiers de musique (tous les 2 gérés dans Rhythmbox), mais un seul de ces dossier est synchronisé.

Merci à Jovial pour son script, et merci de me faire part de vos remarques.

Inso

#!/bin/bash
# 
# Gestion d'un IPOD UMS (Rockbox) depuis Rhythmbox
# - Génération des fishiers playlists depuis la base xml Rhythmbox, 
# - modification des chemins dans la playlist pour IPOD
# - Copie des playlists vers l'IPOD
# - Synchonisation des dossiers contenant les musiques du pc vers l'IPOD (rsync)

# Script massacré par Inso (18-06-2010) à partir de :
# export_playlist_rhytmbox.sh  by Jean-Luc Tremelet  o.jovial@gmail.com
# Thanks to many people who help me on Ubuntu forums to build this code 
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2.

# Mode d'emploi: copier ce contenu dans un éditeur de texte Gedit par exemple,
# enregistrer par exemple export_playlist_rhythmbox.sh
# rendre exécutable nautilus>clic droit> propriété > onglet permissions > cocher rendre exécutable 

# Ce script est à mettre dans un dossier avec la structure suivante:
# Le dossier de travail, avec comme sous-dossier un dossier de playlist ($DOSSIERPLAYLIST) et un dossier de playlist IPOD ($DOSSIERIPOD)


# ATTRIBUTION VARIABLES------------------------------------------------------------

#FICHXML=~/.gnome2/rhythmbox/playlists.xml       # Emplacement playslist Rhythmbox (9.10 et antérieurs)
FICHXML=~/.local/share/rhythmbox/playlists.xml   # Emplacement playslist Rhythmbox pour Ubuntu 10.04
FICHTXT=playlist.txt                             # Fichier de travail
LISTE=LISTE.txt                                  # Fichier de travail
LISTE2=LISTE2.txt                                # Fichier de travail
DOSSIERW=/home/inso/Musique/Playlists            # Dossier de travail (ou le script est lancé)
DOSSIERPLAYLIST=./Playlist                       # Dossier de génération des playlists
DOSSIERIPOD=./Ipod                               # Dossier de transfert des playlists IPOD (sur le PC)
IPOD=/media/IPOD                                 # Point de montage IPOD
PLAYIPOD=/Playlists                              # Emplacement des playlists (IPOD)
ZIKPC=/mnt/Sata2/Musique/Musiques                # Emplacement des musiques (PC)
ZIKIPOD=/Musiques                                # Emplacement des musiques (IPOD)

cd $DOSSIERW
echo "----------------------------------------------------------------"
echo "---------------- Script de Synchronisation IPOD ----------------"
echo "--------------------- A partir de Rhythmbox --------------------"
echo "----------------------------------------------------------------"
date
echo ""
#echo emplacement de votre playlist Rhythmbox : $FICHXML

# Nettoyage -------------------------------------------------------------------------------
rm -f $FICHTXT
rm -f $LISTE
rm -f $LISTE2
rm -f $DOSSIERPLAYLIST/*.m3u
rm -f $DOSSIERIPOD/*.m3u


# Générer fichier des PLAYLIST --------------------------------------------------------------
echo "--------Recherche des playlists dans la base Rhythmbox ---------"
grep  static $FICHXML | sed -e 's/\" type="static">//' | sed -e 's/<playlist name="//' > $LISTE
#cat $LISTE
# supprimer les 2 espaces au début des lignes
for y in `cat $LISTE`;
do 
   echo $y >> $LISTE2
done

# Lecture du fichier contenant le nom des playlists, extraction des playlists  ----------------
for Listchoix in `cat $LISTE2`;
do
   # on ajoute les apostrophes
   ListName=$Listchoix
   Listchoix=\'$Listchoix\'
   #echo LISTE en cours: "$ListName"
   xmllint --shell $FICHXML >$FICHTXT <<EOD
   cat //playlist[@name=$Listchoix]
EOD
   # TRAITEMENT de la playlist format xml > txt > m3u ----------------------------------------
   # on traite la chaine pour convertir l'url au format local, on envoie dans un fichier texte
   # on utilise une instruction perl
   echo "# --- " $ListName " ---" > $DOSSIERPLAYLIST/$ListName.m3u
   grep  '<location>' $FICHTXT | sed 's/ //g'| sed -e 's/<location>file:\/\///' | sed -e 's/<\/location>//' | perl -pe 's|%([0-9a-f]{2})|pack('C',hex($1))|segi;' >> $DOSSIERPLAYLIST/$ListName.m3u
done

# Modification des chemins des dossiers pour adaptation à l'IPOD, déplacement des fichiers dans le dossier de transfert IPOD
cd $DOSSIERPLAYLIST
for y in `ls *.m3u`;
do 
   #echo $y
   sed 's_$ZIKPC_$ZIKIPOD_' $y > temp; mv temp .$DOSSIERIPOD/$y;
done
cd ..
cat $LISTE
echo "---------------- Extraction des Playlists faite ----------------"
echo ""

# Nettoyage des fichiers de travail -------------------------------------------------------------
rm $FICHTXT
rm $LISTE
rm $LISTE2

# Controle de présence de l'IPOD ----------------------------------------------------------------
if [ -d $IPOD$ZIKIPOD ] ; then
   echo "---------------- IPOD connecté (" $IPOD ") -----------------"
else
   echo "----------------------------------------------------------------"
   echo "============== IPOD non connecté (" $IPOD ") ==============="
   echo "======================== arrêt script =========================="
   echo "----------------------------------------------------------------"
   echo "--- Appuyez sur 'entrée' pour quitter --------------------------"
   read a
   exit 1
fi

# Copie des fichiers du dossier de transfert vers l'IPOD ----------------------------------------
rm -f $IPOD$PLAYIPOD/*.m3u
cp $DOSSIERIPOD/*.* $IPOD$PLAYIPOD
echo "---------- Transfert des playlists vers l'IPOD terminé ---------"
echo ""

# Synchronisation des dossiers musique  PC -> IPOD ----------------------------------------------
echo "---> Synchronisation IPOD --------------------------------------"
echo "--- de" $ZIKPC "vers "$IPOD$ZIKIPOD "---"
echo " "
rsync -r -t -x -v --progress --delete --size-only --modify-window=1 -l -H $ZIKPC/ $IPOD$ZIKIPOD/
echo "----------------------------------------------------------------"
echo "---------------- Synchronisation IPOD terminée -----------------"
echo "----------------------------------------------------------------"
echo "--- Appuyez sur 'entrée' pour quitter --------------------------"
read a                         # histoire de voir ce qui c'est passé...
exit 0

Dernière modification par Inso (Le 23/06/2010, à 20:42)

Hors ligne

#11 Le 25/06/2010, à 11:54

jovial

Re : Script export fichiers playlist rhythmbox

@Inso

Finalement tu te débrouille très bien, je peux pas essayé pas d'Ipod sous la main.
Content que ce script serve encore.

Bye

Jluc


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#12 Le 10/12/2010, à 08:41

K4ede

Re : Script export fichiers playlist rhythmbox

Bonjour,
Je cherche à extraire la liste des albums qui sont sur mon Ipod dans un fichier texte. Il ne me semble pas que ce script le permettre mais c'est ce que j'ai vu de plus approchant dans mes recherches, et du coup j'aimerais savoir si vous n'aviez pas une petite idée pour m'aider ?
Dans l'idée ce que j'aimerais pouvoir faire c'est aller dans rhythmbox, ouvrir mon Ipod, selectionner la liste des artiste, et c/c.
Merci d'avance !

Hors ligne