Résolu Metadata MP3

Plus d'informations
il y a 3 ans 8 mois - il y a 3 ans 8 mois #29966 par rhiwotar
[RESOLU]Metadata MP3 a été créé par rhiwotar
Bonjour à tous,

Sur nos chers fichiers audios, il y a les métadonnées contenant l'auteur, le titre, l'année, l'album, la piste ...

Ça fait plusieurs mois que je cherche régulièrement un moyen d’éditer ces infos mais impossible de trouver, j'ai trouver quelques rares scripts qui permettent de récupérer les infos mais pas de les éditer et un seul script qui permet le changer les valeurs sauf qu'il ne marche pas ...

Si vous avez une idée ou un bout de script qui correspondrait à ma recherche, je suis preneur!!

Merci d'avance
Dernière édition: il y a 3 ans 8 mois par rhiwotar.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 8 mois - il y a 3 ans 8 mois #29969 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Metadata MP3
Hello Rhiwotar !

En faisant une recherche rapide sur la PowerShell Gallery j'ai trouvé le module ID3 qui a l'air de faire exactement ce que tu souhaites. L'as-tu essayé ?

Moi j'ai testé et ça marche plutôt bien. En fait de l'ai même fait fonctionner depuis mon Mac!

Exemple :
# Installation du module depuis la PS Gallery
install-module -Name id3

# Récupération des métadonnées sur l'un de mes fichiers MP3 pris au hasard
PS /Users/arnaud/Music/U2> Get-Id3Tag -Path './01 City Of Blinding Lights.mp3'

StartTag                   : TagLib.NonContainer.StartTag
EndTag                     : TagLib.NonContainer.EndTag
TagTypes                   : Id3v1, Id3v2
Tags                       : {, }
Title                      : City of Blinding Lights
Performers                 : {U2}
PerformersSort             : {}
AlbumArtistsSort           : {}
AlbumArtists               : {U2}
Composers                  : {}
ComposersSort              : {}
TitleSort                  :
AlbumSort                  :
Album                      : Best Of 2000-2010 (Disc 1)
Comment                    :
Genres                     : {Rock}
Year                       : 2014
Track                      : 1
TrackCount                 : 0
Disc                       : 0
DiscCount                  : 0
Lyrics                     :
Grouping                   :
BeatsPerMinute             : 0
Conductor                  :
Copyright                  :
MusicBrainzArtistId        :
MusicBrainzReleaseId       :
MusicBrainzReleaseArtistId :
MusicBrainzTrackId         :
MusicBrainzDiscId          :
MusicIpId                  :
AmazonId                   :
MusicBrainzReleaseStatus   :
MusicBrainzReleaseType     :
MusicBrainzReleaseCountry  :
Pictures                   : { [image/jpeg] 15414 bytes}
IsEmpty                    : False
Artists                    : {U2}
FirstArtist                : U2
FirstAlbumArtist           : U2
FirstAlbumArtistSort       :
FirstPerformer             : U2
FirstPerformerSort         :
FirstComposerSort          :
FirstComposer              :
FirstGenre                 : Rock
JoinedArtists              : U2
JoinedAlbumArtists         : U2
JoinedPerformers           : U2
JoinedPerformersSort       :
JoinedComposers            :
JoinedGenres               : Rock

# Modification du genre
PS /Users/arnaud/Music/U2> Set-Id3Tag -Path './01 City Of Blinding Lights.mp3' -Tags @{Genres='Dance'}

# Vérification
PS /Users/arnaud/Music/U2> Get-Id3Tag -Path './01 City Of Blinding Lights.mp3'

StartTag                   : TagLib.NonContainer.StartTag
EndTag                     : TagLib.NonContainer.EndTag
TagTypes                   : Id3v1, Id3v2
Tags                       : {, }
Title                      : City of Blinding Lights
Performers                 : {U2}
PerformersSort             : {}
AlbumArtistsSort           : {}
AlbumArtists               : {U2}
Composers                  : {}
ComposersSort              : {}
TitleSort                  :
AlbumSort                  :
Album                      : Best Of 2000-2010 (Disc 1)
Comment                    :
Genres                     : {Dance}
...

That's it!

La petite subtilité pour modifier un fichier est d'utiliser une table de hachage et de ne pas se tromper dans le nom de la clé qui représente le nom de la propriété à modifier.

En plus le module d'appuie sur la librairie .NET TagLib qui prend en charge plein d'autres formats audio et vidéos, je cite:

(aka Taglib-sharp) is a .NET platform-independent library (tested on Windows/Linux) for reading and writing metadata in media files, including video, audio, and photo formats. This is a convenient one-stop-shop to present or tag all your media collection, regardless of which format/container these might use. You can read/write the standard or more common tags/properties of a media, or you can also create and retrieve your own custom tags.

It supports the following formats (by file-extensions):

Video: mkv, ogv, avi, wmv, asf, mp4 (m4p, m4v), mpeg (mpg, mpe, mpv, mpg, m2v)
Audio: aa, aax, aac, aiff, ape, dsf, flac, m4a, m4b, m4p, mp3, mpc, mpp, ogg, oga, wav, wma, wv, webm
Images: bmp, gif, jpeg, pbm, pgm, ppm, pnm, pcx, png, tiff, dng, svg
It is API stable, with only API additions (not changes or removals) occuring in the 2.0 series.


MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Dernière édition: il y a 3 ans 8 mois par Arnaud Petitjean. Raison: Pb de liens mal affichés

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 8 mois #29971 par rhiwotar
Réponse de rhiwotar sur le sujet Metadata MP3
Bonjour,

Quand j’étais découvert que les metadata s'appelaient ID3, j'ai cherché affiné mes recherche Google.
Je suis tombé dessus hier soir mais j'ai pas eu l'occasion de le tester en profondeur.

Merci pour ton retour, si tu dis que c'est bon, je te fais confiance et je marque en résolu!!

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois #31077 par Marc VAN DAMME
Réponse de Marc VAN DAMME sur le sujet Metadata MP3
Bonsoir,
Je suis actuellement en train de trier mes morceaux au format MP3 et utilise beaucoup les tags. Mon idée est de lister les informations dans un fichier Excel, de modifier les tags dans le tableur pour réinjecter mes corrections plutôt que de traiter chaque fichier un par un 
J'ai suivi avec attention la solution ci-dessus qui fonctionne très bien à l'affichage jusqu'au moment où j'essaie soit de mettre le résultat "Get-Id3Tag" dans une variable soit de le mettre dans une cellule Excel. En tant que débutant, j'arrive vite au bout de mes solutions ...

Avec le code plus bas j'obtiens bien le résultat afficher mais également le message d'erreur suivant (à noter que les 2 premières colonnes se remplissent correctement ...).

Voici le message d'erreur qui s'apparente à du Chinois pour moi (il est précédé d'un "BeatsPerMinute : 137" en affichage dans chaque itération):
Exception de HRESULT : 0x800A03EC
Au caractère E:\Software\Script Powershell\Read_MP3.ps1:100 : 5
+     $feuillet.Cells.Item($ligne,$colonne) = Get-Id3Tag -Path $Mp3File ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException

Mon code :
Clear-Host

#Récupération de la date système
$date = Get-Date -format 'yyyy-MM-dd_HH-mm-ss'

#Récupération du chemin du script exécuté
$RootFolder = Split-Path -Path $MyInvocation.MyCommand.Definition

#Chemin et nom du fichier Excel
$ExcelFolder = $RootFolder + "\" + $date + " - Read Mp3.xlsx"
#Write-Host $ExcelFolder

#Répertoire à lire
$dataFolder = Set-Location "E:\_Singles"

#Initialisation Excel
$ligne = 1
$colonne = 1

#Appeler Excel
$objExcel = new-object -comobject excel.application

#Rendre le classeur visible pendant le traitement
$objExcel.Visible =$true

#Créer un nouveau classeur
$classeur = $objExcel.Workbooks.Add()

#Accéder à un feuillet
$feuillet = $classeur.worksheets.item(1)

##Ecriture des titres de colonne
$feuillet.Cells.Item($ligne,$colonne) = "Répertoire du fichier"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Chemin du fichier"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Nom du fichier"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Artiste"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Titre"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Genre"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Année"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Album"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Comment"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Groupe"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "BPM"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Pochette"
$colonne ++

#Ecriture des données dans le tableau
$ligne = 2
$colonne = 1

$MyFolder = Get-ChildItem -Path $dataFolder -Recurse -File | Where-Object {$_.Name -match 'mp3$'}

foreach ($MyFile in $MyFolder)
{
    $colonne = 1
    
    $feuillet.Cells.Item($ligne,$colonne) = $($MyFile.Directory)
    $colonne++

    $feuillet.Cells.Item($ligne,$colonne) = $($MyFile.FullName)
    $colonne++

    $feuillet.Cells.Item($ligne,$colonne) = $($MyFile.name)
    $colonne++


    $Mp3File = $($MyFile.FullName)
        
    #Get-Id3Tag -Path $Mp3File | Format-List -Property FirstArtist
    #Get-Id3Tag -Path $Mp3File | Format-List -Property Title
    #Get-Id3Tag -Path $Mp3File | Format-List -Property Comment
    #Get-Id3Tag -Path $Mp3File | Format-List -Property FirstGenre
    #Get-Id3Tag -Path $Mp3File | Format-List -Property Year
    #Get-Id3Tag -Path $Mp3File | Format-List -Property Grouping
    Get-Id3Tag -Path $Mp3File | Format-List -Property BeatsPerMinute


    $feuillet.Cells.Item($ligne,$colonne) = Get-Id3Tag -Path $Mp3File | Format-List -Property Artists
    #$feuillet.Cells.Item($ligne,$colonne) = "$Mp3File"
    #Write-Host "$Mp3File"

    $ligne++
}

$UR = $feuillet.UsedRange 
$UR.EntireColumn.AutoFit()

#Enregistrement d'un nouveau classeur "SAVE AS"
$classeur.SaveAs($ExcelFolder)

Merci par avance de votre aide et désolé de cette question surement simplissime pour des confirmés dans ce langage.

Marc.
 

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois - il y a 2 ans 9 mois #31083 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Metadata MP3
Salut,
essaie ceci
$feuillet.Cells.Item($ligne,$colonne) = 'Test'

Puis ceci:
$feuillet.Cells.Item($ligne,$colonne) = Get-Id3Tag -Path $Mp3File | Select-Object -ExpandProperty Artists

Sans donnée de test et sans le module pas facile de tester :-)

Tutoriels PowerShell
Dernière édition: il y a 2 ans 9 mois par Laurent Dardenne. Raison: balise code
Les utilisateur(s) suivant ont remercié: Marc VAN DAMME

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois #31105 par Marc VAN DAMME
Réponse de Marc VAN DAMME sur le sujet Metadata MP3
Bonjour,
Merci Laurent. Le pb est réglé (je vous partage mon code ci-dessous).
Nouveau problème : Powershell essaie d'interpréter les symboles "[" et "]" présents dans mes noms de fichiers lorsque je les propose au "Get-Id3Tag".

Message d'erreur :Exception lors de l'appel de « Create » avec « 1 » argument(s) : « La référence d'objet n'est pas définie à une instance d'un objet. »
Au caractère C:\Program Files\WindowsPowerShell\Modules\ID3\1.1\id3.psm1:9 : 5
+     $media = [TagLib.File]::Create( (Resolve-Path $Path) )
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : NullReferenceException

Comment pourrais-je faire comprendre à Powershell de ne pas se soucier de ces symboles ?
Merci par avance.

Le code utilisé :
CLS
Clear-Host

$Error.Clear()
$ErrorActionPreference = "continue"

#Répertoire MP3 à lire
$dataFolder = Set-Location "E:\_Singles"

#Récupération de la date système
$date = Get-Date -format 'yyyy-MM-dd_HH-mm-ss'

#Récupération du chemin du script exécuté
$RootFolder = Split-Path -Path $MyInvocation.MyCommand.Definition

#Chemin et nom du fichier Excel d'export
$ExcelFolder = $RootFolder + "\" + $date + " - Mp3_Tag - Export.xlsx"

#Initialisation Excel
$ligne = 1
$colonne = 1

#Appeler Excel
$objExcel = new-object -comobject excel.application

#Rendre le classeur visible pendant le traitement
$objExcel.Visible =$true

#Créer un nouveau classeur
$classeur = $objExcel.Workbooks.Add()

#Accéder à un feuillet
$feuillet = $classeur.worksheets.item(1)

##Ecriture des titres de colonne

$feuillet.Cells.Item($ligne,$colonne) = "Artiste"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Titre"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Genre"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Année"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Album"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Comment"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Groupe"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "BPM"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Nom du fichier"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Répertoire du fichier"
$colonne ++

$feuillet.Cells.Item($ligne,$colonne) = "Chemin du fichier"
$colonne ++

#Ecriture des données dans le tableau
$ligne = 2
$colonne = 1

$MyFolder = Get-ChildItem -Path $dataFolder -Recurse -File | Where-Object {$_.Name -match 'mp3$'}

foreach ($MyFile in $MyFolder)
{
    $colonne = 1

    $Mp3File = $($MyFile.FullName)
    
    $IdTag_FirstArtist = Get-Id3Tag -Path $Mp3File | Select-Object -ExpandProperty FirstArtist
    $IdTag_Title = Get-Id3Tag -Path $Mp3File | Select-Object -ExpandProperty Title
    $IdTag_Genres = Get-Id3Tag -Path $Mp3File | Select-Object -ExpandProperty Genres
    $IdTag_Year = Get-Id3Tag -Path $Mp3File | Select-Object -ExpandProperty Year
    $IdTag_Album = Get-Id3Tag -Path $Mp3File | Select-Object -ExpandProperty Album
    $IdTag_Comment = Get-Id3Tag -Path $Mp3File | Select-Object -ExpandProperty Comment
    $IdTag_Grouping = Get-Id3Tag -Path $Mp3File | Select-Object -ExpandProperty Grouping
    $IdTag_BPM = Get-Id3Tag -Path $Mp3File | Select-Object -ExpandProperty BeatsPerMinute

    $feuillet.Cells.Item($ligne,$colonne) = $IdTag_FirstArtist
    $colonne++

    $feuillet.Cells.Item($ligne,$colonne) = $IdTag_Title
    $colonne++
    
    $feuillet.Cells.Item($ligne,$colonne) = $IdTag_Genres
    $colonne++
    
    $feuillet.Cells.Item($ligne,$colonne) = $IdTag_Year
    $colonne++
    
    $feuillet.Cells.Item($ligne,$colonne) = $IdTag_Album
    $colonne++
    
    $feuillet.Cells.Item($ligne,$colonne) = $IdTag_Comment
    $colonne++  
    
    $feuillet.Cells.Item($ligne,$colonne) = $IdTag_Grouping
    $colonne++

    $feuillet.Cells.Item($ligne,$colonne) = $IdTag_BPM
    $colonne++   

    $feuillet.Cells.Item($ligne,$colonne) = $($MyFile.name)
    $colonne++

    $feuillet.Cells.Item($ligne,$colonne) = $($MyFile.Directory)
    $colonne++

    $feuillet.Cells.Item($ligne,$colonne) = $($MyFile.FullName)
    $colonne++

    $ligne++
}

$UR = $feuillet.UsedRange 
$UR.EntireColumn.AutoFit()

#Enregistrement d'un nouveau classeur "SAVE AS"
$classeur.SaveAs($ExcelFolder)

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.082 secondes
Propulsé par Kunena