Je suis passé d'iPod à Walkman Sony il y a quelques années. Avec le baladeur, vous pouvez afficher les paroles et en entrant les informations de temps sur chaque ligne des paroles, il défilera en fonction de la chanson ou de la conversation en anglais. C'est très pratique pour pratiquer le chant et apprendre la conversation en anglais. Cependant, les paroles du fichier MP3 / MP4 ne sont pas affichées et le texte des paroles doit être sauvegardé dans le fichier LRC dédié aux paroles.
Auparavant, avec le logiciel "Media Go" fourni par Sony, vous pouviez lire des chansons enregistrées dans iTunes pour iPod, les transférer sur le baladeur, ouvrir les propriétés de chaque chanson dans iTunes et copier le texte des paroles. Ensuite, je l'ai collé sur le côté Media Go et édité l'heure des paroles. Ce processus de transfert est devenu fastidieux et j'ai créé un script Python qui extrait le texte des paroles du fichier MP3 / MP4 et l'enregistre dans le fichier LRC. Vous pouvez simplement afficher les paroles ou spécifier un répertoire pour créer des fichiers LRC pour tous les fichiers à la fois.
Nécessite Python3 et un module mutagène. Je l'utilise dans un environnement Windows, les chansons japonaises ont de nombreux noms de fichiers japonais et j'avais besoin de Python3 pour bien gérer le japonais. J'ai également installé et utilisé le module mutagen avec pip pour lire les informations sur les paroles de MP3 / MP4.
$ pip3 install mutagen
Ou
$ python3 -m pip install mutagen
Ou
$ sudo python3 -m pip install mutagen
$ lyrics.py -h
usage: lyrics.py [-h] [-l] [-s] [-c] [-r] file [file ...]
positional arguments:
file file or directory name
optional arguments:
-h, --help show this help message and exit
-l, --list show file names containing lyrics (default)
-s, --show show lyrics
-c, --create create "*.lrc" lyrics files if it does not exist
-r, --replace create or replace "*.lrc" lyrics files
$ lyrics.py -l .
$ lyrics.py -s "1-01 Just The Way You Are.mp3"
$ lyrics.py -s "Billy Joel"
$ lyrics.py -c "Billy Joel"
$ lyrics.py -r "Billy Joel"
github
https://github.com/shiracamus/lyrics_converter
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#
# Lyrics converter
#
# version: 2017.4.18
# author: @shiracamus
# github: https://github.com/shiracamus/lyrics_converter
#
# Need to install mutagen module
# $ python3 -m pip install mutagen
# or
# $ sudo python3 -m pip install mutagen
#
import os
import sys
import argparse
from mutagen.id3 import ID3, ID3NoHeaderError
from mutagen.mp4 import MP4, MP4StreamInfoError
def read_lyrics_in_mp3(path):
try:
tags = ID3(path)
for key in tags:
if key.startswith('USLT'):
return tags[key].text
except ID3NoHeaderError:
pass
return None
def read_lyrics_in_mp4(path):
try:
tags = MP4(path).tags
if '\xa9lyr' in tags:
return tags['\xa9lyr'][0]
except MP4StreamInfoError:
pass
return None
def read_lyrics(path):
return (read_lyrics_in_mp3(path) or
read_lyrics_in_mp4(path) or
None)
class Lyrics:
def __init__(self, path):
self.path = path
self.path_base, self.path_ext = os.path.splitext(path)
self.text = read_lyrics(path)
self.exists = bool(self.text)
def __repr__(self):
return '<base="%s", ext="%s", lyrics=%s>' % (self.path_base,
self.path_ext,
self.exists)
class LRC:
ext = '.lrc'
def __init__(self, path):
self.path = path
self.exists = os.path.exists(self.path)
def save(self, text):
with open(self.path, 'w') as f:
f.write(text)
self.exists = True
def show_filename(lyrics):
print(lyrics.path)
def show_lyrics(lyrics):
print('=' * 30)
print(lyrics.path)
print('-' * 30)
print(lyrics.text)
print()
def save_lrc(lyrics, replace=False):
lrc = LRC(lyrics.path_base + LRC.ext)
if not lrc.exists or replace:
lrc.save(lyrics.text)
print('Saved "%s"' % lrc.path)
else:
print('Already exists "%s"' % lrc.path)
def pathes(files_and_directories):
for file_or_directory in files_and_directories:
if os.path.isfile(file_or_directory):
yield file_or_directory
elif os.path.isdir(file_or_directory):
for root, dirs, files in os.walk(file_or_directory):
for filename in files:
yield os.path.join(root, filename)
def parse_args():
p = argparse.ArgumentParser()
p.add_argument('-l', '--list', action='store_true',
help='show file names containing lyrics (default)')
p.add_argument('-s', '--show', action='store_true',
help='show lyrics')
p.add_argument('-c', '--create', action='store_true',
help='create "*.lrc" lyrics files if it does not exist')
p.add_argument('-r', '--replace', action='store_true',
help='create or replace "*.lrc" lyrics files')
p.add_argument('file', nargs='+', default='.',
help='file or directory name')
args = p.parse_args()
if not (args.show or args.create or args.replace):
args.list = True
return args
def main(args):
for path in pathes(args.file):
lyrics = Lyrics(path)
if not lyrics.text:
continue
if args.list:
show_filename(lyrics)
if args.show:
show_lyrics(lyrics)
if args.create or args.replace:
save_lrc(lyrics, replace=args.replace)
if __name__ == '__main__':
main(parse_args())
Les commentaires dans la source seront ajoutés séquentiellement. Je veux pouvoir gérer des fichiers autres que MP3 / MP4, alors faites-le moi savoir si vous connaissez la méthode de traitement. Je veux aussi créer un wrapper GUI. Ce serait formidable si les informations temporelles pouvaient être créées automatiquement, mais il n'y a toujours pas de bibliothèque qui reconnaît la voix des chansons et crée des paroles, non?
Recommended Posts