beetbox/beets

Multiple genres are written to files joined

开放

#5,491 创建于 2024年10月30日

 (3 条评论) (2 个反应) (0 位负责人)Python (1,837 个派生)batch import
buggood first issue

仓库指标

星标
 (12,133 个星标)
PR 合并指标
 (平均合并 26天 4小时) (30 天内合并 51 个 PR)

描述

Problem

Most of my music files have multiple genres, for example

$ filepath=/run/media/sarunas/music/Music/mokum/mok208_fkinghardcore12worldresistance/13_djdano_ooooohshitshitebrooklynmix.flac                                   ~ │ 🐍 3.8 🐶
$ beet info path:$filepath | grep -i genre
               genre: early hardcore, gabber, hardcore techno, psycore
              genres: early hardcore, gabber, hardcore techno, psycore

I noticed that these get written to FLAC files as a single comma-separated GENRE field:

$ metaflac --block-type VORBIS_COMMENT --list $filepath | grep -i genre                                                                                           ~ │ 🐍 3.8 🐶
    comment[37]: GENRE=early hardcore, gabber, hardcore techno, psycore

Even though I expected to see something like this instead

    comment[37]: GENRE=early hardcore
    comment[38]: GENRE=gabber
    comment[39]: GENRE=hardcore techno
    comment[40]: GENRE=psycore

Set GENRE correctly using mediafile

If I use mediafile to inspect the metadata, I see that genres return a list with a single genre, where I see all my genres together:

>>> from mediafile import MediaFile

>>> m = MediaFile("/run/media/sarunas/music/Music/mokum/mok208_fkinghardcore12worldresistance/13_djdano_ooooohshitshitebrooklynmix.flac")

>>> m.genres
Out[4]: ['early hardcore, gabber, hardcore techno, psycore']

Let's try to correct this using the same mediafile and save the file:

>>> m.genres = m.genres[0].split(", ")

>>> m.genres
Out[6]: ['early hardcore', 'gabber', 'hardcore techno', 'psycore']

>>> m.save()
$ metaflac --block-type VORBIS_COMMENT --list $filepath | grep -i genre                                                                                           ~ │ 🐍 3.8 🐶
    comment[60]: GENRE=early hardcore
    comment[61]: GENRE=gabber
    comment[62]: GENRE=hardcore techno
    comment[63]: GENRE=psycore

And now I'm seeing what I expected to have here.

Update beets library

Let's try to update beets library:

$ beet update path:$filepath                                                                                                                                      ~ │ 🐍 3.8 🐶
29276 | 2020 / F**king Hardcore #12 - World Resistance: DJ Dano - Oooooh Shit (Shit'E' Brooklyn Mix)
  genre: early hardcore, gabber, hardcore techno, psycore -> early hardcore

$ beet info path:$filepath | grep -i genre                                                                                                                        ~ │ 🐍 3.8 🐶
               genre: early hardcore
              genres: early hardcore; gabber; hardcore techno; psycore

It seems like it's turned into a list separated by a semicolon now.

And now let's try to write this file without making any changes:

$ beet write path:$filepath                                                                                                                                       ~ │ 🐍 3.8 🐶
 | 2020 / F**king Hardcore #12 - World Resistance: DJ Dano - Oooooh Shit (Shit'E' Brooklyn Mix)
  genre: early hardcore -> early hardcore, gabber, hardcore techno, psycore

This was unexpected given that I did not adjust the metadata. Let's inspect the file and the library:

$ metaflac --block-type VORBIS_COMMENT --list $filepath | grep -i genre                                                                                           ~ │ 🐍 3.8 🐶
    comment[37]: GENRE=early hardcore, gabber, hardcore techno, psycore

$ beet info path:$filepath | grep -i genre                                                                                                                        ~ │ 🐍 3.8 🐶
               genre: early hardcore, gabber, hardcore techno, psycore
              genres: early hardcore, gabber, hardcore techno, psycore

Multiple GENRE tags have been overwritten, and we're back where we started.

贡献者指南