[PYTHON] Extrahieren Sie die Textinformationen in die MP3 / MP4-Datei und speichern Sie sie in der Textdatei (* .lrc) für Sony Walkman.

Hintergrund

Ich habe vor einigen Jahren vom iPod zum Sony Walkman gewechselt. Mit walkman können Sie die Texte anzeigen. Wenn Sie die Zeitinformationen in jede Zeile der Texte eingeben, wird entsprechend dem Lied oder der englischen Konversation gescrollt. Es ist sehr praktisch, um das Singen zu üben und Englisch zu lernen. Die Texte in der MP3 / MP4-Datei werden jedoch nicht angezeigt, und der Text muss in der LRC-Datei gespeichert werden, die den Texten gewidmet ist.

Bisher konnten Sie mit der von Sony bereitgestellten Software "Media Go" in iTunes gespeicherte Titel für den iPod abspielen, an walkman übertragen, die Eigenschaften der einzelnen Titel in iTunes öffnen und den Text kopieren. Dann habe ich es auf der Media Go-Seite eingefügt und die Textzeit bearbeitet. Dieser Übertragungsprozess wurde langwierig und ich erstellte ein Python-Skript, das den Text aus der MP3 / MP4-Datei extrahiert und in der LRC-Datei speichert. Sie können einfach die Texte anzeigen oder ein Verzeichnis angeben, um LRC-Dateien für alle Dateien gleichzeitig zu erstellen.

Betriebsumgebung

Benötigt Python3 und Mutagen-Modul. Ich verwende es in einer Windows-Umgebung und japanische Songs haben viele japanische Dateinamen, daher brauchte ich Python3, um gut mit Japanisch umgehen zu können. Ich habe auch das Mutagen-Modul installiert und mit pip verwendet, um Textinformationen aus MP3 / MP4 zu lesen.

Installation des Mutagenmoduls

$ pip3 install mutagen
Oder
$ python3 -m pip install mutagen
Oder
$ sudo python3 -m pip install mutagen

Wie benutzt man

Hilfeanzeige (Hilfe)

$ 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

Liste der Dateinamen einschließlich Textinformationen (Liste)

$ lyrics.py -l .

Texte anzeigen

$ lyrics.py -s "1-01 Just The Way You Are.mp3"
$ lyrics.py -s "Billy Joel"

In LRC-Datei speichern (erstellen: nur wenn es nicht existiert)

$ lyrics.py -c "Billy Joel"

In LRC-Datei speichern (ersetzen: überschreiben, falls vorhanden, beachten Sie, dass Zeitinformationen verloren gehen)

$ lyrics.py -r "Billy Joel"

Quellcode

github

https://github.com/shiracamus/lyrics_converter

Python-Skript

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

von jetzt an

In-Source-Kommentare werden nacheinander hinzugefügt. Ich möchte in der Lage sein, andere als MP3 / MP4 zu verarbeiten. Bitte lassen Sie mich wissen, wenn Sie die Verarbeitungsmethode kennen. Ich möchte auch einen GUI-Wrapper erstellen. Es wäre großartig, wenn Zeitinformationen automatisch erstellt werden könnten, aber es gibt immer noch keine Bibliothek, die Stimmen aus Songs erkennt und Texte erstellt, oder?

Recommended Posts

Extrahieren Sie die Textinformationen in die MP3 / MP4-Datei und speichern Sie sie in der Textdatei (* .lrc) für Sony Walkman.
So speichern Sie die Feature-Point-Informationen des Bildes in einer Datei und verwenden sie zum Abgleichen
Lesen Sie die CSV-Datei und zeigen Sie sie im Browser an
Speichern Sie das Pystan-Modell und erhalten Sie eine Pickle-Datei
Speichern Sie die Binärdatei in Python
Derjenige, der die CSV-Datei teilt, liest und parallel verarbeitet
Extrahieren Sie Informationen mit File :: Stat in Ruby
Suchen Sie es in der Warteschlange und bearbeiten Sie es
Speichern Sie die angegebene Kanal-ID im Text und laden Sie sie beim nächsten Start
Extrahieren Sie nur den Dateinamen mit Ausnahme des Verzeichnisses im Verzeichnis
12. Speichern Sie die erste Spalte in col1.txt und die zweite Spalte in col2.txt
In Bash "Löschen Sie die Datei, falls vorhanden".
Ich möchte die Variablen in der Python-Vorlagendatei ersetzen und in einer anderen Datei in Massenproduktion herstellen
Extrahieren und listen Sie die Namen von Personen und Orten im Text auf
Wählen Sie die erforderlichen Variablen in TensorFlow aus und speichern / wiederherstellen
Extrahieren Sie nur den Klang eines bestimmten Instruments aus der MIDI-Datei und machen Sie es zu einer separaten Datei
Analysieren Sie die Researchmap-API mit Python und erstellen Sie automatisch eine Word-Datei für die Leistungsliste