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 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) roll , 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

AnsuzPeorth a écrit :

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. big_smile

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:Utf­8 ­-*-
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

stefparis a écrit :

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 ! big_smile

Ancien texte [En revanche, existe-t-il une astuce pour que les champs vides soient pris en compte (style ; wink... 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). mad
Pas chia.... biiiiiiiiiiiiiiip le mec roll ]


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 !!! cool

Merci pour tout AnsuzPeorth !!!

Dernière modification par stefparis (Le 14/04/2010, à 21:22)

Hors ligne