2017-06-11 4 views
0

J'essaye d'insérer le pictutre d'album d'une musique (mp3) comme image dans la fenêtre de Python GUI. J'ai utilisé mutagen classe d'image ID3 à cette fin. Il a été décrit dans le docs mais je ne sais pas comment le faire. J'aimerais bien demander un exemple pour montrer comment le faire correctement. Et si possible, veuillez préciser s'il existe une alternative.Comment obtenir l'image Album d'une musique en Python?

Merci!

+0

Il existe une bibliothèque alternative - [stagger] (https://github.com/lorentey/stagger), qui est plus facile à utiliser que mutagen (vraiment, vous pouvez faire des choses comme 'mp3.artist = 'Artist ''). Si vous voulez utiliser mutagen, vous devriez utiliser le cadre 'APIC' (si vous voulez savoir comment faire cela avec stagger, s'il vous plaît faites le moi savoir). – Gokul

+0

@Gokul Merci Gokul! Oui, je suis intéressé à en savoir plus sur "décalage". Pouvez-vous donner quelques exemples simples? Ou est-il un tutoriel ..... Merci! – Toru

Répondre

0

Stagger est une bibliothèque pour modifier les étiquettes id3v2; il est assez facile à utiliser:

In [1]: import stagger 

In [2]: mp3 = stagger.read_tag('/home/gokul/Music/Linkin Park - Burning In The Skies.mp3') 

In [3]: mp3.artist 
Out[3]: 'Linkin Park' 

In [4]: mp3.album 
Out[4]: 'A Thousand Suns' 

In [5]: mp3.picture # the cover has not been set yet 
Out[5]: '' 

Reste de l'API est similaire à cela. Vous pouvez modifier les balises comme ceci:

In [6]: mp3.album = 'Changed It' 

In [7]: mp3.album 
Out[7]: 'Changed It' 

Pour définir l'image album/couverture, tout ce que vous avez à faire est ....

In [10]: mp3.picture = '/home/gokul/Pictures/Cover.jpg' # path to file 

In [11]: mp3.picture # the cover has been saved! 
Out[11]: 'Other(0)::<2834 bytes of jpeg data>' 

Vous devez enregistrer les balises dans le fichier maintenant:

In [12]: mp3.write() 

C'est tout! Fait;)
Si vous voulez voir toutes les balises dans l'utilisation du fichier mp3.frames:

In [13]: mp3.frames() 
Out[13]: 
[TIT2(encoding=0, text=['Burning In The Skies']), 
TPE1(encoding=0, text=['Linkin Park']), 
TALB(encoding=0, text=['Changed It']), 
APIC(encoding=None, mime='image/jpeg', type=0, desc='', data=<2834 bytes of binary data b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00'...>)] 

Cheers!

P.S. Vous pouvez modifier n'importe quelle balise id3v2 en utilisant stagger; certains d'entre eux (les plus communs) peuvent être modifiés en utilisant un format comme mp3.title = 'title'. Voir stagger's GitHub page pour éditer d'autres tags (peu courants et complexes).

+0

Merci Gokul! Son lot est plus facile que Mutagen. Mais il y a un problème. Comment puis-je mettre l'image dans une interface graphique? Je reçois seulement un code 'Autre (0) :: <16937 octets de données jpeg>' au lieu d'une image. En tout cas merci encore !! – Toru

+0

Vous êtes les bienvenus :) Vous pouvez le faire par: 'mp3 [stagger.id3.APIC] [0] .data'. Vous obtiendrez les données binaires. – Gokul

+0

Merci pour la réponse. Maintenant, je suis capable d'obtenir toutes les données de l'image: D Mais quand j'ai essayé de mettre l'image sur une interface graphique, j'ai fait face à l'erreur unicode ...... [UnicodeDecodeError: codec 'utf-8' ne peut pas décoder octet 0xff en position 0: octet de début invalide] Je pense que pour le décoder en octets mais existe-t-il un moyen approprié de décoder les données de l'image? Merci Gokul de passer votre temps précieux pour moi. Je vous remercie!! – Toru