mirror of
http://mpg123.de/trunk/.git
synced 2025-04-19 16:02:16 +03:00
77 lines
2.0 KiB
Python
77 lines
2.0 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# needs mutagen
|
|
# grabbed from: http://code.activestate.com/recipes/577138-embed-lyrics-into-mp3-files-using-mutagen-uslt-tag/
|
|
# simplified to only work on one file and get lyrics from stdin
|
|
# I suspect this is public domain code. Just a usage example of the mutagen lib.
|
|
|
|
import os
|
|
import sys
|
|
import codecs
|
|
from mutagen.mp3 import MP3
|
|
from mutagen.id3 import ID3NoHeaderError
|
|
from mutagen.id3 import ID3, USLT
|
|
|
|
TEXT_ENCODING = 'utf8'
|
|
TEXT_LANG = 'XXX'
|
|
TEXT_DESC = ''
|
|
|
|
# get workdir from first arg or use current dir
|
|
if (len(sys.argv) > 1):
|
|
fname = sys.argv[1]
|
|
print "fname=" + fname
|
|
else:
|
|
print 'Give me at least a file name to work on, plus the lyrics from stdin'
|
|
print 'Optionally, you can provide the language (3 lowercase letters) of the lyrics and a description'
|
|
sys.exit()
|
|
|
|
if (len(sys.argv) > 2):
|
|
TEXT_LANG = sys.argv[2]
|
|
|
|
if (len(sys.argv) > 3):
|
|
TEXT_DESC = sys.argv[3]
|
|
|
|
print "reading lyrics from standard input ..."
|
|
|
|
lyrics = sys.stdin.read().strip()
|
|
|
|
# try to find the right encoding
|
|
for enc in ('utf8','iso-8859-1','iso-8859-15','cp1252','cp1251','latin1'):
|
|
try:
|
|
lyrics = lyrics.decode(enc)
|
|
TEXT_DESC = TEXT_DESC.decode(enc)
|
|
print enc,
|
|
break
|
|
except:
|
|
pass
|
|
|
|
print "Adding lyrics to " + fname
|
|
print "Language: " + TEXT_LANG
|
|
print "Description: " + TEXT_DESC
|
|
|
|
# create ID3 tag if not exists
|
|
try:
|
|
tags = ID3(fname)
|
|
except ID3NoHeaderError:
|
|
print "Adding ID3 header;",
|
|
tags = ID3()
|
|
|
|
# remove old unsychronized lyrics
|
|
if len(tags.getall(u"USLT::'"+TEXT_LANG+"'")) != 0:
|
|
print "Removing Lyrics."
|
|
tags.delall(u"USLT::'"+TEXT_LANG+"'")
|
|
#tags.save(fname) # hm, why?
|
|
|
|
#tags.add(USLT(encoding=3, lang=u'eng', desc=u'desc', text=lyrics))
|
|
# apparently the description is important when more than one
|
|
# USLT frames are present
|
|
#tags[u"USLT::'eng'"] = (USLT(encoding=3, lang=u'eng', desc=u'desc', text=lyrics))
|
|
tags[u"USLT::'"+TEXT_LANG+"'"] = (USLT(encoding=3, lang=TEXT_LANG, desc=TEXT_DESC, text=lyrics))
|
|
print 'Added USLT frame to', fname
|
|
|
|
tags.save(fname)
|
|
|
|
print 'Done'
|
|
|