#!/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

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'


Add a little script to create test files with lyrics.
Add a little script to create test files with lyrics.


git-svn-id: 793bb72743a407948e3701719c462b6a765bc435@3088 35dc7657-300d-0410-a2e5-dc2837fedb53
