regex - 如何使用 FFmpeg 从 Mp3 中提取歌词(USLT 帧)?

标签 regex audio ffmpeg metadata mp3

我正在使用 Mp3tag 的“工具”功能在 Windows 中批量运行 FFmpeg,以便从 MP3 文件中批量提取嵌入的歌词内容(ID3v2 tag 的 USLT 帧),我知道使用 FFmpeg 我可以执行以下操作:

-i "%_path%" -f ffmetadata "%_folderpath%\%_filename%.txt"
"%_path%"= MP3 文件的完整路径
"%_folderpath%%_filename%.txt"= 导出的 txt 文件的路径和文件名。
上面的命令从 MP3 文件中提取所有元数据并将它们导出到具有以下内容的 txt 文件中,例如:
;FFMETADATA1
album=name of the album
artist=name of the artist
title=name of the title
lyrics-eng=[00:01.23]line1 of lyrics
\
[00:04.56]line2 of lyrics
\
[00:07.89]line3 of lyrics
\
[01:03.12]3rd last line of lyrics
\
[02:04.34]2nd last line of lyrics
\
[03:05.67]Last line of lyrics
\

date=2020
encoder=Lavf59.23.100
(原歌词使用 Simple LRC format with timestamps in each line ,某些行只包含时间戳,歌词为空)
(歌词部分之后可能(或可能没有)额外的元数据(例如 date and encoder in the example above )
如上所示,反斜杠“\”(原歌词中不存在)以某种方式添加在每行歌词之后,between CR (CarriageReturn) and LF (LineFeed) as seen in Notepad++ (原歌词使用 CRLF 作为 EOL 字符)。
那么我该怎么做 修改给定的命令行导出仅限 歌词部分( 不包括所有其他元数据和额外的反斜杠“\” ),预期文本文件内容的示例如下所示:
[00:01.23]line1 of lyrics
[00:04.56]line2 of lyrics
[00:07.89]line3 of lyrics
[01:03.12]3rd last line of lyrics
[02:04.34]2nd last line of lyrics
[03:05.67]Last line of lyrics
带有歌词中的原始 EOL 字符,例如 CRLF

最佳答案

  • 我建议你删除所有不需要的\通过搜索 \s*\\\s*并将它们替换为 \n . (在这里测试:https://regex101.com/r/PEBWwm/1)
  • 然后搜索(?<=lyrics-eng=)(?:[\w ]+\s)+在没有\的情况下捕获所有歌词它们之间。 (在这里测试:https://regex101.com/r/8ad6kI/1)
  • 关于regex - 如何使用 FFmpeg 从 Mp3 中提取歌词(USLT 帧)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72065693/

    相关文章:

    java - 如何为Java JFrame添加声音?

    php - FFmpeg 可以连接来自不同域的文件吗?

    regex - 使用 bash 用空格替换连字符

    regex - 如何使用 excel 正则表达式从字符串中提取广告尺寸

    python - 在 Python 中合并音频文件

    python - 如何使用 FFmpeg 将 RTMP 流转换为视频文件?

    c++ - 如何使用ffmpeg实现像get_next_frame一样的功能?

    regex - 在 bash 中查找 2 个字符串中的指定字符串

    javascript - 匹配 [ABC DEF](http ://google. com)

    audio - 如果缺少片段,如何播放m4a/aac音频文件?