kristoformaynard / music-tag Goto Github PK
View Code? Open in Web Editor NEWSimple interface to edit audio file metadata
License: MIT License
Simple interface to edit audio file metadata
License: MIT License
Hi!
can You please tell me, how can I remove all tags at once?
To reproduce:
mp3 = music_tag.load_file(mp3_path)
mp3['title'] = 'Title'
mp3['artist'] = 'Artist'
mp3['album'] = 'Album Name'
mp3['tracknumber'] = 2
mp3['genre'] = 'Pop'
mp3['year'] = 2021
# https://mutagen.readthedocs.io/en/latest/user/id3.html v1=2 tells mutagen to enable v1 tags
mp3.save(v1=2)
Then the output of eyeD3 </path/to/file> -v1
is:
ID3 v1.1:
title: Title
artist: Artist
album: Album Name
track: 2 genre: Pop (id 13)
So it is perfect except it is missing the year.
Hello Music-tag,
I've tried to update the artwork of the mp3 file but it's not reflecting. Below is my code
import music_tag
f = music_tag.load_file("1617027815286.mp3")
print('track title:', f['title'])
f['title'] = 'title'
f['artist'] = 'artist'
f['album'] = 'album'
f['comment'] = 'comment'
f['genre'] = 'genre'
f['composer'] = 'composer'
f['lyrics'] = 'lyrics'
img_in = open("images/testimage.jpg", "rb")
f['artwork'] = img_in.read()
img_in.close()
f.save()
print('track title:', f['title'] , ">>>" , f['artwork'])
Output:
track title: title >>> image/jpeg 320x320 f82f576dbf84f66d27626b12b7436210
Is it possible to add custom tags like SERIES?
Is m4b supported? (i think its the almost the same as m4a)
i was thinking about audiobooks.
No matter how I try to add an image using the ZSH shell, it continually throws a type error, expecting 'bytes'
It would be great if there was a CLI example showing how to do this as it does not work the same as all the other tags.
Anyone have an example of this, or is it even possible?
I found out the hard way that the interface to the tags is only dict-like. :-(
I'm doing my first project with music-tag, and trying to debug a problem with setting tags. I tried doing an f.keys() to find out what keys were set, and a ValueError exception 'cuz it only kinda looks like a dict.
Is there a definitive list of all the possible tag keys somewhere that I could use to simulate keys() and/or items()? Would you be interested in getting a method that you could incorporate into music-tag?
The reason I'm messing with tags is that, for a while, I used a ripper that stored tags for oggs with lowercase names, so lots of apps don't see them. Do you happen to know, offhand, of a library for python, perl or c that would make it easy to access and replace the non-standard tags? I was hoping they'd show up in the "extras" in tinytags, but no luck.
Thanks,
Ran
such a function is available for mp3/id3 tag. we are glad to see your code supporting this.
Hi bro,
how can i download the artwork in python ?
I'm using a mac, and i've saved my artwork from url. It shows up fine in like the finder folder, as in it shows the artwork in the preview but when i open it in iTunes the artwork doesn't display. idk if this is something wrong w iTunes or something but i was just curious if anyone else had this issue and how they solved it.
Hi,
Was wondering if there's any plans for adding a duration tag. I think that would be nice
Error: (On the provided sample).
This is the case only with mp3, (opus, ogg, flac works)
[ffmpeg] Unknown attached picture mimetype: , skipping.
OS: Arch Linux
MPV: mpv 0.33.1-dirty Copyright © 2000-2020 mpv/MPlayer/mplayer2 project
I have noticed that the copyright tag is not available int he tag map for any of the audio file types.
Is this something that was missed during development?
Loading of music-tag repo under vscode shows 2 basic warnings:
music_tag/util.py
, semes safe to remove.music_tag/file.py
, is it a typo in list comprehension?I'm on the newest Version of the Lib and Python 3.9.
.raw["tracknumber"].values
brings me the full field (e.g. "01-0")file_audio.raw["tracknumber"] = value_sani
results in "01/0" (read with mp3tag-program)do you have a tip how to avoid that and access the real underlying tagfield? i thought raw was exactly for that. i don't want the antiquated totaltracks mangled in :(
Some files may contain custom tags, which are not hardcoded in the library. For example I encountered a file with "album artist" instead of "albumartist". Or I can just insert "abc" tag in a program like Picard or mp3tag to test a completely random tag name.
Removing them with f.remove_tag(tag_name)
doesn't work. For "album artist", the tag is still in the file after saving. For "abc", a KeyError
is raised during lookup in AudioFile.tag_map
, which does not contain "abc" entry, even though there is a tag named like that in the audio file.
I found a workaround based on #28: del f.mfile.tags[tag_name]
However, it doesn't look like the expected usage of the API.
In a some cases, when adding cover art to file, the type doesn't get recognized and the mime is set to type/None.
This causes some problems when working with audio file readers that rely on this to show the artwork.
Maybe it would be better if it could raise an exception so that users can know whats wrong at least.
I'm writing a script that is analyzing libraries of music, estimating tempo (BPM). I want it to write the BPM tag back into the metadata I'm working in Windows at the moment - and note that in windows, and most music tagging software - BPM (or Beats-per-minute) is available as an editable data item. I'm primarily editing .wav and .mp3 files' information.
Your library is one of the easiest to use in my opinion, but doesn't have the BPM in your dict of the editable items. I did take a quick peek at Mutagen and your music-tag code, but I couldn't find the specific place to suggest an edit...
I do think I figured out the the ID3 Frame is 'TBPM' but I'm not 100% that's how it works for all formats etc.
Would you consider adding BPM to your dict?
I looked around for audio file cli tagging utils that wrap mutagen to allow explicit naming via cli. I found small snippets and complete library management suites, but no yet a straightforward mutagen based util.
You explain in #1 (comment) the initial scope of your lib to be a opinionated tag cleaner/sanitizer. Do you see a cli interface to set tags explicitly within the scope of your library or is the opinionated aspect a hinderance and/or you'd rather see music-tag as a dependency of a cli wrapper?
Hi,
def get_details(path):
audiofile = music_tag.load_file(path)
title = audiofile['title']
artist = audiofile['artist']
print(artist.values)
if str(artist) == "":
artist = str(audiofile['albumartist']) + " [Album Artist]"
return title, artist
This returns an empty value for the artist section despite the fact itunes definitely has a value there. Happens for all M4a files not sure why. But album artist works fine.
I was surprised that almost half of the recent forks were there solely to circumvent or alter how year sanitization works (just before repeating the same thing myself). If it can be presented as a module setting, like:
import music_tag
music_tag.YEAR_SANITIZE = True(default) | False(disable) | Callable
Then all those forks as well as a bunch of open issues don't need to exist (= less headache). What do you think?
This tool is amazing. Reading and writing tags is a breeze!
It should add support for audiobooks too (.m4b). Usually it is very cumbersome to manage those, but this tool can finally solve this issue!
Please, add support for audiobooks specific metadata, like:
Audiobooks Metadata
Name | Tag Name | FFmetadata | MP4 atom | Mp3tag | ID3v2 |
---|---|---|---|---|---|
Book title | Title | title |
©nam |
TITLE |
TIT2 |
Book title (multi-file) | Album | album |
©alb |
ALBUM |
TALB |
Chapter title (multi-file) | Title | title |
©nam |
TITLE |
TIT2 |
Book sort-title | Sort-title | sort_name (title-sort ) |
sonm |
TITLESORT |
TSOT |
Book sort-title (multi-file) | Sort-album | sort_album (album-sort ) |
soal |
ALBUMSORT |
TSOA |
Chapter number (multi-file) | Track number | track |
trkn |
TRACK |
TRCK |
Author | Artist | artist |
©ART |
ARTIST |
TPE1 |
Author (optional override) | Album artist | album_artist |
aART |
ALBUMARTIST |
TPE2 |
Narrator | Composer | composer |
©wrt |
COMPOSER |
TCOM |
Genre | Genre | genre |
©gen |
GENRE |
TCON |
Release date * | Date | date |
©day |
YEAR |
TDRC /TYER |
Description | Description | description (MP4)TIT3 (MP3) |
desc |
SUBTITLE |
TIT3 |
* When being as precise as possible the ISO 8601 format of the string is yyyy-MM-ddTHH:mm:ss
(in UTC), but the precision may be reduced by removing as many time indicators as wanted.
Hence valid timestamps are yyyy
, yyyy-MM
, yyyy-MM-dd
, yyyy-MM-ddTHH
, yyyy-MM-ddTHH:mm
and yyyy-MM-ddTHH:mm:ss
.
ADDITIONAL SPECIFICATIONS
There is a dedicated Narrator tag that Audible uses (©nrt) but since not all audiobooks come from Audible, most of the audiobook community uses the composer tag instead for tagging.
Artist/Performer is used for the author because it's the most prominent tag for a person associated with the media, with Composer being the second most commonly viewed tag.
If you want to cover your bases (i.e. have accurate metadata, but also use the community standard metadata working on popular apps) you must do it this way:
Author(s)(iTunes / ID3 -- I will try to include options for both 2.4 and 2.3)
Artist:
©ART / TPE1 (standard)
©aut or auth / TIPL: Author or IPLS: Author (OCD-version)
First Author (for multi-author books, or editor of an anthology. Whoever you want to be most recognized/searchable for this book)
aART / TPE2 (standard)
Narrator(s)
©com or ©wrt / TCOM (standard)
©nrt or perf / TMCL: Narrator or IPLS: Narrator (custom)
Publisher
There are 2-3 different tags that can be used for this. ©pub/TPUB are both the most common and the most accurate, but some apps won't recognize this. If they don't, they're probably looking for ©lab (label -- not sure if there is an ID3 equivalent) or possibly even the studio tag, which I can't remember off the top of my head.
Series
Ideally individual books in a series should be tagged in the way discs in a multi-disc album are tagged. So "Album" would be the series title, and then "Title" would be the book title, and you'd use the "disc#" tag for the series index. However there are any number of ways to do this, and none of them are going to be universal. Here are a couple, however:
Audible uses series and series-part for this purpose (I don't remember off the top of my head what the MP4 code is for these, but I think it's one that Audible created and not part of the standard library).
I think that tag probably gets lost when converting to ID3 though, so you could create TXXX: Series and TXXX: Series Index tags for this. That's one option.
Some people use the Grouping or Content Group tags for this:
©grp / TIT1 - Series title
A more precise way to go is to use the movement/movement index tags:
©mvn / MNVN - Series title
©mvi and MVIN - Series index
That seems to be the second-most popular option, probably because those tags already exist in both MP4/Quicktime tagging and ID3 tagging.
If you have books that are in a multi-series universe (eg. Terry Brooks' Shannara universe), you could also use the "Work" tags in addition to the "Movement" tags:
©wrk / TIT1 - Universe title
If you use .m4b files rather than .mp3, you can also use the tags available for TV Shows:
tvsh - series title
tven - book title
tves - series index
tvnn - Universe title
tvsn - Universe index (i.e. where the sub-series falls within the universe as a whole, so you know which subseries to read in which order.)
There's no real advantage either way. Some apps don't look for series data but they look for the subtitle so they can display "Series Title, Book Index".
Thanks in advance!
Hi,
Don't know how far along you are in testing different formats, but I'm getting this error when trying to open a file I wrote with python wave.
File "main.py", line 48, in chainRecord
songFile = music_tag.load_file(filePath)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/music_tag/__init__.py", line 61, in load_file
"".format(type(mfile)))
NotImplementedError: Mutagen type <class 'mutagen.wave.WAVE'> not implemented
Hello,
I'm working on a python script which downloads an album with youtube-dl and tags the files. It gets track names and release years from youtube's metadata and the user provides the artist's name and album title.
Everything ends up in the MP3 file, except the year.
This is where the year is set in the source code.
Can you help me with this ?
input file example: "10. Time = $$$.opus"
music_tag.load_file() has os.path.expand###() in the first line:
filename = os.path.expanduser(os.path.expandvars(filename))
unfortunately os.path.expandvars() changes the file-name to "10. Time = $$.opus". This one clearly doesn't match and causes the exception.
i added an additional argument "path_expand:bool=True" to the function (in my fork), so the function behaves as before, but can be changed if you already work with absolute paths / os.path-Lib.
Another solution would be to check if the file exists or python can see it and don't expand as a result.
I faced the issue when using your module.
The step procedure is following:
music-tag
~/work/script/music_tag pip3 install music-tag --upgrade
Requirement already up-to-date: music-tag in /home/quyleanh/.local/lib/python3.8/site-packages (0.4.2)
Requirement already satisfied, skipping upgrade: mutagen in /usr/local/lib/python3.8/dist-packages/mutagen-1.45.1-py3.8.egg (from music-tag) (1.45.1)
~/work/script/music_tag python3 music_tag.py
Traceback (most recent call last):
File "music_tag.py", line 1, in <module>
import music_tag
File "/home/quyleanh/work/script/music_tag/music_tag.py", line 4, in <module>
f = music_tag.load_file("test.flac")
AttributeError: partially initialized module 'music_tag' has no attribute 'load_file' (most likely due to a circular import)
My music_tag.py
content is following:
import music_tag
f = music_tag.load_file("test.flac")
print(f['title'])
Could you please take a look at this?
Please add a 'Conductor' in MP3
['conductor']
https://mutagen.readthedocs.io/en/latest/api/id3_frames.html?highlight=genre#mutagen.id3.TPE3
This is what f.mfile loads:
{'copyright': ['2023 Viper Recordings'], 'comment': [''], 'compilation': ['1'], 'title': ['Rituals VIP'], 'album': ['Viper Presents: Annual 2023'], 'disctotal': ['01'], 'date': ['2023'], 'discnumber': ['1'], 'tracktotal': ['26'], 'albumartist': ['VA'], 'tracknumber': ['2'], 'year': ['2023'], 'genre': ['Drum & Bass'], 'artist': ['Millbrook']}
I want to remove 'date': ['2023']
I am doing
del f['date']
f.remove_tag('date')
f.save()
Error I'm getting:
Traceback (most recent call last):
File ".\test.py", line 6, in <module>
del f['date']
File "C:\Python39\lib\site-packages\music_tag\file.py", line 609, in __delitem__
self.remove_tag(norm_key)
File "C:\Python39\lib\site-packages\music_tag\file.py", line 555, in remove_tag
tmap = self.tag_map[norm_key]
KeyError: 'date'
for the first, accept my thank for your lib! it's the best
only one thing is upsetting..
maybe I do something wrong, but my program can't get info from comment fields
it returns empty line
so that I need to use another lib (TinyTag) and it's not really professional
I compared tag mapping for comment and it matched
I tested on the same files
and TinyTag lib gets comment value, music_tag doesn't
please, can you help with that.... ?
here is the link for 5 files (as an example)
https://yadi.sk/d/dONCP2vSD-nT4g
please, check them for confirm the problem....
Hi,
Thanks a lot for this tool which is really amazingly simple and useful.
My only suggestion would be to add the ISRC tag, because it is really useful to keep good ID recognization of songs.
If I got the time, I will try to do a PR, but not sure of being able to do this!
Hello!
I have just tried using your library and tried to add ID3 tags to a wave file and it does not seem to be working, I am wondering if I am using it correctly for wavs? Is there anything special that needs to be done in order to get this to work with wave files?
EDIT: On further investigation and looking through your test code, I managed to print out the tags on the file. They are there however Rekordbox does not read them in as it should do. What version of ID3 does the library use?
Really good idea with the library, epic initiative :)
def test_tag():
p = '/Users/benhearn/Music/test_folder/renaming_cells/Harry Wills - Slink .wav'
import music_tag
wav = music_tag.load_file(p)
wav['title'] = 'Slink'
wav['artist'] = 'Harry Wills'
wav.save()
print('done')
With Pillow installed, I'm trying to set an artwork with this PNG image: https://1drv.ms/i/s!Aq1PMiDnHe9tk6FFfAZPq36aBZwRIQ?e=ayRcrb
Here is my code:
import music_tag
media_path = "/path/to/media"
image_path = "/path/to/image"
tags = music_tag.load_file(media_path)
with open(image_path, 'rb') as img:
tags["artwork"] = img.read()
I'm getting this error:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
Cell In[9], line 2
1 with open(f'data/artists/media/{artist_id}/artwork.png', 'rb') as img:
----> 2 tags["artwork"] = img.read()
File ~/Workspace/media-downloader/.venv/lib/python3.11/site-packages/music_tag/file.py:603, in AudioFile.__setitem__(self, norm_key, val)
602 def __setitem__(self, norm_key, val):
--> 603 self.set(norm_key, val)
File ~/Workspace/media-downloader/.venv/lib/python3.11/site-packages/music_tag/file.py:500, in AudioFile.set(self, norm_key, val, typeless)
497 md_sanitizer = None if typeless else tmap.sanitizer
499 if not isinstance(val, MetadataItem):
--> 500 val = MetadataItem(md_type, md_sanitizer, val)
502 if hasattr(tmap.setter, '__call__'):
503 tmap.setter(self, norm_key, val)
File ~/Workspace/media-downloader/.venv/lib/python3.11/site-packages/music_tag/file.py:67, in MetadataItem.__init__(self, typ, sanitizer, val)
65 self.type = typ
66 self.sanitizer = sanitizer
---> 67 self.values = val
File ~/Workspace/media-downloader/.venv/lib/python3.11/site-packages/music_tag/file.py:92, in MetadataItem.values(self, val)
90 v = self.sanitizer(v)
91 if not (self.type is None or v is None or isinstance(v, self.type)):
---> 92 v = self.type(v)
93 self._values[i] = v
File ~/Workspace/media-downloader/.venv/lib/python3.11/site-packages/music_tag/file.py:187, in Artwork.__init__(self, raw, width, height, fmt, depth, pic_type)
184 fmt = img.format.lower()
185 mode2depth = {'1': 1, 'L': 8, 'P': 8, 'RGB': 24, 'RGBA': 32,
186 'CMYK': 32, 'YCbCr': 24, 'I': 32, 'F': 32}
--> 187 depth = mode2depth[img.mode]
188 except ImportError:
189 width = None
KeyError: 'LA'
Looks like some PNG modes are unsupported.
First, let me thank you for your lib - it saved me a lot of time!
Second i wanted to ask you why some fields like "tracknumber" and "year" are int-only? I only checked one use-case for Opus / Vorbis Comment and all fields are stored as UTF-8 (https://en.wikipedia.org/wiki/Vorbis_comment).
Yes, converting to int() has some free cleaning-advantages but also makes ie. leading zeros in tracknumbers impossible. I think it would be more helpful to give the control back to the user - he is already brave enough to overwrite the tags :)
What do you think?
I've got error: ValueError: Could not extract year from: 2014-11-18 15:05:00
I propose following patch to sanitize_year()
:
if re.match(r'^[0-9]{4}[-\s][0-9]{2}[-\s][0-9]{2}(?:[T\s][0-9]{2}:[0-9]{2}:[0-9]{2})?$', year):
instead of
if re.match(r'^[0-9]{4}[-\s][0-9]{2}[-\s][0-9]{2}$', year):
Error occured when adding an artwork to a m4a file on Windows, however, it's success on macOS and Linux.
failed on my project on windows
test with code
import music_tag
a = music_tag.load_file(r'E:\Users\Documents\GitHub\ASoulMP3maker\a.m4a')
a['artwork'] = open(r'E:\Users\Documents\GitHub\ASoulMP3maker\j.jpg','rb').read()
a.save()
error info on window
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\17374\AppData\Local\Programs\Python\Python39\lib\site-packages\music_tag\file.py", line 603, in __setitem__
self.set(norm_key, val)
File "C:\Users\17374\AppData\Local\Programs\Python\Python39\lib\site-packages\music_tag\file.py", line 503, in set
tmap.setter(self, norm_key, val)
File "C:\Users\17374\AppData\Local\Programs\Python\Python39\lib\site-packages\music_tag\mp4.py", line 99, in set_artwork
raise TypeError('mp4 artwork should be either jpeg or png')
TypeError: mp4 artwork should be either jpeg or png
Here is the m4a file i wanna edit.
What about using file.raw
to let print / export to csv badformed metadata ?
00:40 $ python3 -m music_tag --to-csv tags.csv sample
Traceback (most recent call last):
File "/home/natus/git/music/.direnv/python-3.9.6/lib/python3.9/site-packages/music_tag/util.py", line 26, in sanitize_year
year = int(year)
ValueError: invalid literal for int() with base 10: '2019-09-26 10'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/natus/.pyenv/versions/3.9.6/lib/python3.9/runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/home/natus/.pyenv/versions/3.9.6/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/natus/git/music/.direnv/python-3.9.6/lib/python3.9/site-packages/music_tag/__main__.py", line 175, in <module>
sys.exit(_main())
File "/home/natus/git/music/.direnv/python-3.9.6/lib/python3.9/site-packages/music_tag/__main__.py", line 134, in _main
row = [mt_f[k] for k in tags] + [fname]
File "/home/natus/git/music/.direnv/python-3.9.6/lib/python3.9/site-packages/music_tag/__main__.py", line 134, in <listcomp>
row = [mt_f[k] for k in tags] + [fname]
File "/home/natus/git/music/.direnv/python-3.9.6/lib/python3.9/site-packages/music_tag/file.py", line 600, in __getitem__
return self.get(norm_key, default=None)
File "/home/natus/git/music/.direnv/python-3.9.6/lib/python3.9/site-packages/music_tag/file.py", line 443, in get
ret = None if val is None else MetadataItem(md_type, md_sanitizer,
File "/home/natus/git/music/.direnv/python-3.9.6/lib/python3.9/site-packages/music_tag/file.py", line 67, in __init__
self.values = val
File "/home/natus/git/music/.direnv/python-3.9.6/lib/python3.9/site-packages/music_tag/file.py", line 90, in values
v = self.sanitizer(v)
File "/home/natus/git/music/.direnv/python-3.9.6/lib/python3.9/site-packages/music_tag/util.py", line 33, in sanitize_year
raise ValueError("Could not extract year from: {0}".format(year))
ValueError: Could not extract year from: 2019-09-26 10
I Don't really understand why this happing. I currently developing a music bash editing software.
Some files in the folder works fine. Others have error like that.
Traceback (most recent call last):
File "/Users/apple/PycharmProjects/Onsei_manager/main.py", line 41, in
editFilesByMatchingPattern(dirct, audioTup1)
File "/Users/apple/PycharmProjects/Onsei_manager/main.py", line 22, in editFilesByMatchingPattern
onsei_tag.EditAudio(os.path.join(parentDir, filenames),
File "/Users/apple/PycharmProjects/Onsei_manager/onsei_tag.py", line 16, in init
self.embed_pic(path, audiofile, imagepath)
File "/Users/apple/PycharmProjects/Onsei_manager/onsei_tag.py", line 32, in embed_pic
audiofile.save()
File "/Users/apple/PycharmProjects/Onsei_manager/venv/lib/python3.9/site-packages/music_tag/file.py", line 374, in save
self.mfile.save(**kwargs)
File "/Users/apple/PycharmProjects/Onsei_manager/venv/lib/python3.9/site-packages/mutagen/_util.py", line 156, in wrapper
return func(self, h, *args, **kwargs)
File "/Users/apple/PycharmProjects/Onsei_manager/venv/lib/python3.9/site-packages/mutagen/_file.py", line 132, in save
return self.tags.save(filething, **kwargs)
File "/Users/apple/PycharmProjects/Onsei_manager/venv/lib/python3.9/site-packages/mutagen/_util.py", line 185, in wrapper
return func(*args, **kwargs)
File "/Users/apple/PycharmProjects/Onsei_manager/venv/lib/python3.9/site-packages/mutagen/_util.py", line 156, in wrapper
return func(self, h, *args, **kwargs)
File "/Users/apple/PycharmProjects/Onsei_manager/venv/lib/python3.9/site-packages/mutagen/wave.py", line 129, in save
wave_file.insert_chunk(u'id3')
File "/Users/apple/PycharmProjects/Onsei_manager/venv/lib/python3.9/site-packages/mutagen/iff.py", line 338, in insert_chunk
return self.root.insert_chunk(id, data)
File "/Users/apple/PycharmProjects/Onsei_manager/venv/lib/python3.9/site-packages/mutagen/_iff.py", line 260, in insert_chunk
insert_bytes(self._fileobj, size, next_offset)
File "/Users/apple/PycharmProjects/Onsei_manager/venv/lib/python3.9/site-packages/mutagen/_util.py", line 788, in insert_bytes
raise ValueError
ValueError
The mutagen library that is under a GPL 2.0 license requires this project, that is currently under a MIT license, to instead use a 'GPL version 2 or later' license or be under any of the GPLv2 compatible licenses.
i get this error when i try to open this file
Im sure this is long dead, judging by the lack of activity, but I'd love to see it support AlbumSortName fields. Currently using it to write audiobook data, and the Album Sort name keeps the 'series' data in it.
Related to: #42
The spec for an index entry is:
CHAPTER000NAME=Intro
CHAPTER001=00:05:40.512
CHAPTER001NAME=The First Chapter
.
.
.
I don't know how you do that on the backend since the keys are CHAPTER{000..999}, CHAPTER{000..999}NAME, but if they're "dictionary" entries, that's cool.
Further, a free-text option/flag would both obviate the need to deal with the 2000 keys for chapter duration and name and offer more versatilitiy and flexibility for those who can make use of it. Locking things to a pre-chosen dictionary inherently limits the usefulness of this library for applications not imagined by the author(s) and opens up the program to applications such as audiobooks, i.e., see the above-mentioned existing issue, № 42.
I tried
f['lyrics'] = str(lyrics)
and
f.append_tag('lyrics', str(lyrics))
and also tried
f.['lyrics'].value = str(lyrics)
which produced an error
f.get("tracknumber").value
or f.info()
are failing when trucknumber: ['1/50']
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.