beetbox/beets

Multiple genres are written to files joined

オープン

#5,491 opened on 2024/10/30

 (3 件のコメント) (2 件のリアクション) (0 人の担当者)Python (1,837 件のフォーク)batch import
buggood first issue

Repository metrics

Stars
 (12,133 個のスター)
PR merge metrics
 (平均マージ 26d 4h) (30d で 51 merged PRs)

説明

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.

コントリビューターガイド