#1 Le 10/04/2010, à 23:30
- stefparis
Script Python pour récup. métadonnées FLAC dans fichier
Bonjour à Toutes et à Tous
Je suis à la recherche d'un script Python pour balayer tous mes fichiers FLAC afin de récupérer toutes les méta données et de les mettre dans un fichier...
J'ai trouvé ce script pour le lire le contenu du répertoire :
import os
path = "xxxx" (chemin à parcourir)
def printFiles(dirList, spaceCount):
for file in dirList:
print "==> ".rjust(spaceCount+1) + file
def printDirectory(dirEntry):
print dirEntry[0] + "/"
printFiles(dirEntry[2], len(dirEntry[0]))
tree = os.walk(path)
for directory in tree:
printDirectory(directory)
A noter que ce script parcours les répertoires et sous-répertoires...
N'ayant pas trouver de livre(s) expliquant simplement le langage Python (si quelqu'un connait un bon bouquin sure le sujet, je suis preneur) , je n'ai pas pu éplucher ce script et faire un mix entre les deux :
(Script pour récupérer les méta données FLAC)
#!/usr/bin/env python
from mutagen.flac import FLAC
from pprint import pprint
import sys
DEBUG=False
if len(sys.argv) > 1:
fname = sys.argv[1]
else:
fname = "/media/C1K/Adamo - Tombe la neige.flac"
audio = FLAC(fname)
if DEBUG:
print "DD: instancied a mutagen object of type %s for file %s" % (type(audio), fname)
print "DD: pprint(instance):"
pprint(audio)
print "/DD"
print
if audio.has_key('artist'): print "Artist: ", audio['artist'][0]
if audio.has_key('album'): print "Album: ", audio['album'][0]
if audio.has_key('tracktotal'):
tracktot = int(audio['tracktotal'][0])
else:
tracktot = None
if audio.has_key('tracknumber'):
trackn = int(audio['tracknumber'][0])
if tracktot != None:
track_str = "%s / %s" % (trackn, tracktot)
else:
track_str = str(trackn)
print "Track: %s" % track_str
if audio.has_key('title'): print "Title: ", audio['title'][0]
if audio.has_key('mcn'): print "MCN: ", audio['mcn'][0]
if audio.has_key('isrc'): print "ISRC: ", audio['isrc'][0]
print "Sample rate: ", audio.info.sample_rate
print "Nr. of channels: ", audio.info.channels
print "Bits per sample: ", audio.info.bits_per_sample
print "Total nr. of samples:", audio.info.total_samples
print "Length in secs: ", audio.info.length
print "MD5: ", audio.info.md5_signature
Avec un grand merci d'avance pour vos suggestions.
Hors ligne
#2 Le 11/04/2010, à 01:41
- AnsuzPeorth
Re : Script Python pour récup. métadonnées FLAC dans fichier
Bjr,
Tu veux récupérer quoi exactement ? Toutes les métadas ? Comment veux tu présenter le résultat ?
ps: un script bash pourrait le faire également !
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#3 Le 11/04/2010, à 21:07
- stefparis
Re : Script Python pour récup. métadonnées FLAC dans fichier
Bjr,
Tu veux récupérer quoi exactement ? Toutes les métadas ? Comment veux tu présenter le résultat ?
ps: un script bash pourrait le faire également !
En fait, je voudrais récupérer les métadonnées pour les importer dans une feuille de calcul Open Office ou au pire dans une base de données.
Hors ligne
#4 Le 12/04/2010, à 16:00
- AnsuzPeorth
Re : Script Python pour récup. métadonnées FLAC dans fichier
Si mes souvenirs sont exactes, un simple fichier texte peut être importé dans calc, il suffit d'indiquer le délimiteur ?
Donc, je l'ai fait en python (cela aurait été plus simple en bash, mais comme j'apprends python, l'occasion fait le larrons), je récupère toutes les métadonnées + le path du fichier, je les inscrits dans un fichier avec comme séparateur le point-virgule (cela peut être modifier via la variable separ).
Je crée d'abord la liste de tous les fichiers, ensuite pour chaque je lance la commande FLAC, il aurait été possible de faire ça en une seule boucle, mais l'ordre alphabétique n'aurait pas été respecté ... (ou alors depuis une autre liste avec toutes les infos, mais j'ai peur que cette liste soit trop grosse, donc ....)
Cela peut certainement être amélioré/optimisé, comme d'hab en programmation:
#! /usr/bin/env python
# -*- coding:Utf8 -*-
import os, os.path
from mutagen.flac import FLAC
#path du dossier où effectuer la recherche
dpath='/home/user/Desktop/Compilation-Xperience-Xtrib'
liste_fichier=[]
for root, dirs, files in os.walk(dpath):
for name in files:
ext=os.path.splitext(name)
ext=ext[1].lower()
if ext == '.flac':
liste_fichier.append( os.path.join(root,name) )
#tri de la liste par ordre alphabétique
liste_fichier.sort()
#séparateur
separ=';'
#indiquer path du fichier où stocker le résultat
f=open('retour.txt','w')
for fichier in liste_fichier:
audio = FLAC(fichier)
#écriture du path du fichier flac
f.write('%s ;' % fichier)
for key in audio.keys():
ret='%s : %s %s' % (key,audio[key][0].encode('utf-8'),separ)
f.write(ret)
val1='sample-rate : %s %s channels : %s %s bits : %s %s total : %s %s Length : %s\n' % (audio.info.sample_rate,separ,
audio.info.channels,separ,
audio.info.bits_per_sample,separ,
audio.info.total_samples,separ,
audio.info.length)
f.write(val1)
f.close()
Résultat:
/home/user/Desktop/Compilation-Xperience-Xtrib/Xperience/Xperience_01_All-Angels-Gone_Quietly_Wave.flac ;album : Xperience par Xtrib.com ;comment : La première compilation flac, téléchargée sur Xtrib.com ;description : Téléchargez en mp3 et flac sur Xtrib.com ;license : http://www.xtrib.com/ ;artist : All Angels Gone ;url : http://www.xtrib.com/ ;compilation : 1 ;title : Wave ;tracktotal : 09 ;genre : Psychedelic Rock ;date : 2005 ;tracknumber : 01 ;ensemble : All Angels Gone ;sample-rate : 44100 ; channels : 2 ; bits : 16 ; total : 15505920 ; Length : 351.608163265
/home/user/Desktop/Compilation-Xperience-Xtrib/Xperience/Xperience_02_Swing-Sofa_Madame-Monsieur_Les-Miettes.flac ;album : Xperience par Xtrib.com ;comment : La première compilation flac, téléchargée sur Xtrib.com ;description : Téléchargez en mp3 et flac sur Xtrib.com ;license : http://www.xtrib.com/ ;artist : Swing Sofa ;url : http://www.xtrib.com/ ;compilation : 1 ;title : Les Miettes ;tracktotal : 09 ;genre : Swing Chanson ;date : 2007 ;tracknumber : 02 ;ensemble : Swing Sofa ;sample-rate : 44100 ; channels : 2 ; bits : 16 ; total : 9879552 ; Length : 224.026122449
/home/user/Desktop/Compilation-Xperience-Xtrib/Xperience/Xperience_03_E2M_Overground_Face-A-Un-Ange.flac ;album : Xperience par Xtrib.com ;comment : La première compilation flac, téléchargée sur Xtrib.com ;description : Téléchargez en mp3 et flac sur Xtrib.com ;license : http://www.xtrib.com/ ;artist : E2M ;url : http://www.xtrib.com/ ;compilation : 1 ;title : Face à un ange ;tracktotal : 09 ;genre : Rock ;date : 2007 ;tracknumber : 03 ;ensemble : E2M ;sample-rate : 44100 ; channels : 2 ; bits : 16 ; total : 7137792 ; Length : 161.854693878
/home/user/Desktop/Compilation-Xperience-Xtrib/Xperience/Xperience_04-Les-Akolyte_Bonne-Humeur.com_Les-Parisiennes.flac ;album : Xperience par Xtrib.com ;comment : La première compilation flac, téléchargée sur Xtrib.com ;description : Téléchargez en mp3 et flac sur Xtrib.com ;license : http://www.xtrib.com/ ;artist : Les Akolyte ;url : http://www.xtrib.com/ ;compilation : 1 ;title : Les parisiennes ;tracktotal : 09 ;genre : Chanson ;date : 2007 ;tracknumber : 04 ;ensemble : Les akolyte ;sample-rate : 44100 ; channels : 2 ; bits : 16 ; total : 10473927 ; Length : 237.504013605
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#5 Le 13/04/2010, à 20:14
- stefparis
Re : Script Python pour récup. métadonnées FLAC dans fichier
MERCI BEAUCOUP !!!
Ca marche nickel !!!
Va falloir que j'épluche le script pour savoir comment ça fonctionne !!
Merci Beaucoup !!
Hors ligne
#6 Le 13/04/2010, à 23:40
- AnsuzPeorth
Re : Script Python pour récup. métadonnées FLAC dans fichier
Va falloir que j'épluche le script pour savoir comment ça fonctionne !!
Il n'y a rien de bien compliqué, si tu bloques sur qqlechose, demande.
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#7 Le 14/04/2010, à 20:47
- stefparis
Re : Script Python pour récup. métadonnées FLAC dans fichier
Une petite astuce : remplacer f=open('retour.txt','w') par f=open('retour.csv','w')
En effet, le tableur Open Office considère le fichier en .csv comme base de données et l'ouvre directement. Il n'y a plus qu'à paramétrer les champs !
Ancien texte [En revanche, existe-t-il une astuce pour que les champs vides soient pris en compte (style ; ... car le fichier, une fois importé, est très difficile a exploiter : il y a de fortes disparités entre les lignes.
Dès qu'un champ est vide, il est ignoré ce qui décale les imports dans chaque ligne (si l'artiste est manquant et si le champs suivant est le nom de l'album alors c'est le nom de l'album qui sera dans la colonne artiste).
Pas chia.... biiiiiiiiiiiiiiip le mec ]
En fait, en faisant une recherche sur le net, j'ai vu que l'on pouvait mettre à peu près n'importe quoi comme métadonnées.
S'agissant d'une extraction de mes propres CD, j'ai des champs : musicbrainz_artistid, discid...
Mais lorsqu'il s'agit d'une compilation, le premier champ est absent... d'où (suivant le CD rippé) des décallages dans les colonnes.... Je vais décaller les cellules pour que tout soit d'équerre !!!
Merci pour tout AnsuzPeorth !!!
Dernière modification par stefparis (Le 14/04/2010, à 21:22)
Hors ligne