Cómo establecer: campos de la etiqueta, "artista", "artista del álbum", "año", "álbum", "número de canción" y "título", con mutagen

Estoy tratando de usar mutagen (con Python 2.7.5) para crear un programa que, dado que el camino a las canciones es...\Artist\Year Album\Songnumber Title.mp3, establece el artista, el artista del álbum, el año, el álbum, el número de la canción y las etiquetas de título de la canción, y conserva la etiqueta del género. Traté de hacer esto conEasyID3, pero no tiene la etiqueta del artista del álbum. También traté de hacerlo con regularidad.ID3, pero me encontré con un par de problemas con él. Aquí está el código que utilicé:

from mutagen.id3 import ID3, TIT2, TPE2, TALB, TPE1, TYER, TDAT, TRCK, TCON, TORY, TPUB
p = "E:\\Musik\\Aeon\\2005 Bleeding the False\\01 Cenobites - Copy.mp3"
audio = ID3(p)
audio.add(TIT2(encoding=3, text=u"t"))    #TITLE
audio.add(TRCK(encoding=3, text=u"1"))    #TRACK
audio.add(TPE1(encoding=3, text=u"a"))    #ARTIST
audio.add(TALB(encoding=3, text=u"al"))   #ALBUM
audio.add(TYER(encoding=3, text=u"2000")) #YEAR
audio.add(TDAT(encoding=3, text=u"2001")) #YEAR
audio.add(TORY(encoding=3, text=u"2002")) #ORIGYEAR
audio.add(TPE2(encoding=3, text=u"aa"))   #ALBUMARTIST
audio.add(TCON(encoding=3, text=u"g"))    #GENRE
audio.save()

solíaEsta mesa para encontrar los códigos de 4 letras para cada etiqueta.

Título, pista, artista y álbum funcionaron bien. Para todos los campos bajo las propiedades del archivo mp3> detalles excepto estos cuatro y "año", los valores anteriores fueron borrados porsave()Y cuando intenté agregar nuevos, no pasó nada. En particular, los campos "género" y "artista del álbum" no funcionaron. En cuanto al "año", que tiene los códigos TYER y TDAT, no cambiaría a menos que el campo estuviera vacío primero, y luego solo por TYER. "ORIGYEAR" con el código TORY no hizo nada.

El campo "género" no está completamente roto, si lo cambias con el código de Python (audio.add(etc)), o entrar manualmente en propiedades> detalles de antemano,save() borrará géneros no incorporados como "Technical Death Metal" o "mt3jr39kf390", mientras que funciona con géneros incorporados como "Classic Rock" o "Country", mientras que ciertos enteros como 1 o 2 se convierten en esos géneros incorporados. (El campo del año en ocasiones también se comporta de manera similar, si establece manualmente el valor del campo en ciertos números,save() lo cambiará en un número diferente. Solo he observado esto para valores inferiores a 800, pero no para todos: 448 y 449 permanecen sin cambios, mientras que 500 se convierte en 320, 700 se convierte en 448, 12 se convierte en 10 y 10 se convierte en 8. Si cambia de 12 a 10 de esta manera y luego ejecute el programa nuevamente, no pasará nada, pero si lo cambia manualmente a algún otro valor y vuelve a 10, se convertirá en 8.)

Entonces, el problema es que no puedo cambiar la etiqueta del año si ya hay algo allí, no puedo cambiar la etiqueta del artista o género del álbum, y no sé cómo hacer el comando "obtener" si es que hay uno para que pueda preservar la etiqueta de género.

También,EasyID3 tiene los mismos problemas -save() despeja ciertos campos y se comporta de forma extraña con el género y el año. La única diferencia parece ser que es posible cambiar el año incluso si el campo no está vacío. Aquí está el código que utilicé:

from mutagen.easyid3 import EasyID3
p = "E:\\Musik\\Aeon\\2005 Bleeding the False\\01 Cenobites - Copy.mp3"
audio = EasyID3(p)
audio["title"] = u"t"
audio["artist"] = u"a"
audio["album"] = "al"
audio["date"] = u"2000"
audio["tracknumber"] = u"1"
audio["genre"] = u"g"
audio.save()
print '\n'.join(EasyID3.valid_keys.keys())

Respuestas a la pregunta(2)

Su respuesta a la pregunta