通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

Python如何提取MP3中的歌词

Python如何提取MP3中的歌词

Python提取MP3中的歌词

Python提取MP3中的歌词可以通过读取MP3文件中的ID3标签来实现,这些标签通常包含了歌曲的元数据,包括歌词。常用的方法有使用库如 mutageneyed3tinytag本文将主要介绍如何使用 mutagen 库来提取MP3中的歌词。首先,你需要安装 mutagen 库,可以通过以下命令进行安装:

pip install mutagen

接下来,我们将详细介绍如何使用这个库来提取MP3中的歌词。

一、安装和导入库

在开始之前,确保你已经安装了所需的库。安装之后,在你的Python脚本中导入这些库:

from mutagen.easyid3 import EasyID3

from mutagen.id3 import ID3, USLT

二、读取MP3文件

使用 mutagen 库来读取MP3文件,并提取歌词信息。以下是一个简单的代码示例:

def extract_lyrics(mp3_file_path):

audio = ID3(mp3_file_path)

lyrics = ""

for tag in audio.tags.values():

if isinstance(tag, USLT):

lyrics = tag.text

break

return lyrics

mp3_file_path = "path_to_your_mp3_file.mp3"

lyrics = extract_lyrics(mp3_file_path)

print(lyrics)

在这个示例中,我们首先读取MP3文件,然后遍历ID3标签以查找歌词标签(USLT),最后提取并返回歌词。

三、处理不同编码的歌词

歌词的编码可能会有所不同,因此在提取歌词时,需要考虑不同的编码格式。mutagen 库能够自动处理多种编码格式,但在某些情况下,你可能需要手动处理编码问题。以下是一个示例:

def extract_lyrics_with_encoding(mp3_file_path):

audio = ID3(mp3_file_path)

lyrics = ""

for tag in audio.tags.values():

if isinstance(tag, USLT):

lyrics = tag.text

try:

lyrics = lyrics.decode('utf-8')

except UnicodeDecodeError:

lyrics = lyrics.decode('latin1')

break

return lyrics

mp3_file_path = "path_to_your_mp3_file.mp3"

lyrics = extract_lyrics_with_encoding(mp3_file_path)

print(lyrics)

在这个示例中,我们尝试以 utf-8 编码解码歌词,如果失败则尝试 latin1 编码。

四、处理多种歌词格式

有些MP3文件可能包含多种歌词格式,如同步歌词(LRC)和非同步歌词(USLT)。你可以根据需要选择提取哪种格式的歌词。以下是一个示例:

def extract_multiple_lyrics(mp3_file_path):

audio = ID3(mp3_file_path)

unsynced_lyrics = ""

synced_lyrics = ""

for tag in audio.tags.values():

if isinstance(tag, USLT):

unsynced_lyrics = tag.text

elif tag.FrameID == "SYLT":

synced_lyrics = tag.text

return unsynced_lyrics, synced_lyrics

mp3_file_path = "path_to_your_mp3_file.mp3"

unsynced_lyrics, synced_lyrics = extract_multiple_lyrics(mp3_file_path)

print("Unsynced Lyrics:", unsynced_lyrics)

print("Synced Lyrics:", synced_lyrics)

在这个示例中,我们分别提取了非同步歌词(USLT)和同步歌词(SYLT)。

五、处理不同语言的歌词

有些MP3文件可能包含不同语言的歌词,你可以通过检查ID3标签的语言属性来提取特定语言的歌词。以下是一个示例:

def extract_lyrics_by_language(mp3_file_path, language='eng'):

audio = ID3(mp3_file_path)

lyrics = ""

for tag in audio.tags.values():

if isinstance(tag, USLT) and tag.lang == language:

lyrics = tag.text

break

return lyrics

mp3_file_path = "path_to_your_mp3_file.mp3"

lyrics = extract_lyrics_by_language(mp3_file_path, 'eng')

print(lyrics)

在这个示例中,我们根据指定的语言(如 eng 表示英语)来提取歌词。

六、保存提取的歌词

提取歌词后,你可能希望将其保存到一个文本文件中。以下是一个示例:

def save_lyrics_to_file(mp3_file_path, output_file_path):

lyrics = extract_lyrics(mp3_file_path)

with open(output_file_path, 'w', encoding='utf-8') as f:

f.write(lyrics)

mp3_file_path = "path_to_your_mp3_file.mp3"

output_file_path = "lyrics.txt"

save_lyrics_to_file(mp3_file_path, output_file_path)

在这个示例中,我们将提取的歌词保存到一个名为 lyrics.txt 的文件中。

七、处理大批量MP3文件

如果你有大量的MP3文件需要提取歌词,可以编写一个批处理脚本来自动处理多个文件。以下是一个示例:

import os

def batch_extract_lyrics(mp3_folder_path, output_folder_path):

for root, dirs, files in os.walk(mp3_folder_path):

for file in files:

if file.endswith('.mp3'):

mp3_file_path = os.path.join(root, file)

lyrics = extract_lyrics(mp3_file_path)

output_file_path = os.path.join(output_folder_path, file.replace('.mp3', '.txt'))

with open(output_file_path, 'w', encoding='utf-8') as f:

f.write(lyrics)

mp3_folder_path = "path_to_your_mp3_folder"

output_folder_path = "path_to_your_output_folder"

batch_extract_lyrics(mp3_folder_path, output_folder_path)

在这个示例中,我们遍历指定文件夹中的所有MP3文件,并将提取的歌词保存到相应的文本文件中。

八、处理没有歌词的情况

有些MP3文件可能没有嵌入歌词。在这种情况下,你需要处理这种情况,并避免脚本崩溃。以下是一个示例:

def extract_lyrics_safe(mp3_file_path):

try:

audio = ID3(mp3_file_path)

lyrics = ""

for tag in audio.tags.values():

if isinstance(tag, USLT):

lyrics = tag.text

break

return lyrics

except Exception as e:

print(f"Error extracting lyrics from {mp3_file_path}: {e}")

return None

mp3_file_path = "path_to_your_mp3_file.mp3"

lyrics = extract_lyrics_safe(mp3_file_path)

if lyrics:

print(lyrics)

else:

print("No lyrics found.")

在这个示例中,我们捕获并处理提取歌词过程中可能出现的异常。

九、总结

通过本文的介绍,你应该已经了解了如何使用Python提取MP3文件中的歌词,包括如何处理不同编码、不同格式、不同语言的歌词,以及如何处理没有歌词的情况。希望这些示例代码能帮助你更好地理解和应用这些技术。如果你有大量的MP3文件需要处理,可以考虑编写批处理脚本来自动化这个过程。总的来说,使用Python提取MP3中的歌词是一个非常实用的技能,能够帮助你更好地管理和利用你的音乐库。

相关问答FAQs:

如何使用Python从MP3文件中提取歌词?
要从MP3文件中提取歌词,可以使用一些流行的Python库,如eyed3mutagen。这些库可以读取MP3文件的标签信息,其中可能包含歌词。通过编写简单的脚本,您可以打开MP3文件,检查标签,并提取歌词内容。

提取歌词时遇到问题该如何解决?
在提取歌词时,可能会遇到MP3文件没有歌词标签的情况。此时,可以考虑使用在线歌词API,如Genius APIMusixmatch API,通过歌曲标题和艺术家名称查询相应的歌词。此外,确保使用的MP3文件已经包含歌词信息,或者找到包含歌词的文件。

如何检查MP3文件是否包含歌词?
在使用Python提取歌词之前,可以使用eyed3mutagen库检查MP3文件的标签。如果文件中有USLTLYRICS标签,通常表示歌词存在。编写代码时,可以添加条件判断,输出相应的提示,以便了解文件是否包含歌词信息。

相关文章