1
0
mirror of http://mpg123.de/trunk/.git synced 2025-04-19 16:02:16 +03:00
mpg123/scripts/tag_lyrics.py
thor 85d717e6d3 scripts/tag_lyrics.py: fix for python3 (github PR 16)
git-svn-id: svn://scm.orgis.org/mpg123/trunk@5458 35dc7657-300d-0410-a2e5-dc2837fedb53
2024-12-03 21:04:59 +00:00

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, end=" ")
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;", end=" ")
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')