beetbox / beets

music library manager and MusicBrainz tagger
http://beets.io/
MIT License
12.74k stars 1.82k forks source link

Picard settings migrator #1352

Open fooness opened 9 years ago

fooness commented 9 years ago

Anyone knows an automatic and easy way for migrating MusicBrainz Picard settings (especially file naming, tagging and scripting) to Beets?

The settings I talk about above are named: _file_naming_format, tagger_script, ignore_tags, windows_compatible_filenames, ascii_filenames, clear_existing_tags, id3v2encoding.

I think(!) most other settings aren’t that important.

Here’s an example configuration of Picard: http://lpaste.net/124392

sampsyo commented 9 years ago

There's no current automatic migrator. If you describe exactly how these could be mapped, though, maybe someone could be enticed to work on one!

fooness commented 9 years ago

At first, it seems Beets needs to have the ability to replace text and symbols in tags (also when using the autotagger). Like in the style of the 'replace' config option. Here's a great post about how this could be possible. https://github.com/sampsyo/beets/issues/488#issuecomment-73104535

I’m not sure if that’s already clear, but it’s important that you can use those replace-patterns just for one (or some) tag fields.

In my picard config e.g. I’m replacing 'remix' with 'Remix' in ONLY album- and title-tags:

$set(album,$rreplace(%album%,\\bremix,Remix))
$set(title,$rreplace(%title%,\\bremix,Remix))

But not just titlecasing it, also:

$set(album,$rreplace(%album%,\\bRe-mix,Remix))
$set(title,$rreplace(%title%,\\bRe-mix,Remix))

$set(album,$rreplace(%album%,\\bRMX,Remix))
$set(title,$rreplace(%title%,\\bRMX,Remix))

[…]

Also, I’m able to set how much characters the date should have (I want four characters to be displayed):

$set(date,$left(%date%,4))

Furthermore, Beets needs to support unsetting/ignoring/deleting of tags, as I don't want all those MusicBrainz tags in my audio files:

$set(artistsort,$unset(%artistsort%))
$set(albumartistsort,$unset(%albumartistsort%))
$set(arranger,$unset(%arranger%))
$set(asin,$unset(%asin%))
$set(barcode,$unset(%barcode%))
$set(catalognumber,$unset(%catalognumber%))
$set(composer,$unset(%composer%))
$set(conductor,$unset(%conductor%))
$set(discsubtitle,$unset(%discsubtitle%))
$set(djmixer,$unset(%djmixer%))
$set(engineer,$unset(%engineer%))
$set(isrc,$unset(%isrc%))
$set(label,$unset(%label%))
$set(language,$unset(%language%))
$set(license,$unset(%license%))
$set(lyricist,$unset(%lyricist%))
$set(media,$unset(%media%))
$set(mixer,$unset(%mixer%))
$set(originaldate,$unset(%originaldate%))
$set(performer,$unset(%performer%))
$set(producer,$unset(%producer%))
$set(releasecountry,$unset(%releasecountry%))
$set(releasestatus,$unset(%releasestatus%))
$set(remixer,$unset(%remixer%))
$set(script,$unset(%script%))
$set(_recordingcomment,$unset(%_recordingcomment%))
$set(_releasecomment,$unset(%_releasecomment%))

PS: Sorry but I don't know any Python and I also don't know what you mean with mapped …

sampsyo commented 9 years ago

Thanks for the extra background. I'll mark this a feature request in case anyone would like to implement a Picard-compatible parser.