使用ffmpeg获取音乐中封面和歌词
发表于:2024-09-18 | 分类: wordpress

前提条件

确保你的系统上已经安装了 ffmpeg。如果没有请自动安装

在 Windows 上:可以从 ffmpeg 官方网站 下载并配置环境变量。

在 macOS 上:可以通过 Homebrew 安装,运行以下命令:

1
brew install ffmpeg

在 Linux 上:大多数发行版可以通过包管理器安装,例如:

1
sudo apt install ffmpeg  # 对于 Ubuntu/Debian

步骤 1:查看 MP3 文件的元数据

首先,你可能想查看 MP3 文件中是否包含封面图片。可以使用以下命令查看文件的元数据:

1
ffmpeg -i input.mp3

这将输出文件的详细信息,其中如果文件中包含封面图片,你会看到类似以下的信息:

1
Stream #0:2: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 600x600, 90k tbr, 90k tbn, 90k tbc

注意上面提到的 Stream #0:2,它表示封面图片在 MP3 文件的第 2 条流中。

步骤 2:提取封面图片

你可以使用 ffmpeg 提取封面图片。假设你的文件名为 input.mp3,你可以运行以下命令:

1
ffmpeg -i input.mp3 -an -vcodec copy cover.jpg

参数解释:

-i input.mp3:指定输入的 MP3 文件。
-an:忽略音频流,只处理非音频部分(即封面图片)。
-vcodec copy:将封面图片复制出来,而不进行重新编码。
cover.jpg:这是输出文件的名称,你可以选择保存为 cover.png 或其他格式。

步骤 3:检查提取的封面图片

运行命令后,cover.jpg 文件会出现在你当前的目录中。你可以打开该图片文件来查看是否正确提取了封面。

完整示例

假设你有一个名为 song.mp3 的文件,并且想提取封面图片并保存为 album_art.jpg,你可以运行以下命令:

1
ffmpeg -i song.mp3 -an -vcodec copy album_art.jpg

可能的错误及解决方案

没有提取到图片:

  1. 确认 MP3 文件中确实包含封面图片(通过元数据查看)。
  2. 尝试使用其他扩展名保存图片,如 cover.png,某些 MP3 文件可能使用 PNG 格式的封面。

封面图片没有正确显示:

确保封面图片的流格式是 jpeg 或 png,如果你提取的图片格式不正确,可以尝试将输出格式更改为相应的扩展名。

借助脚本可以批量提取歌词和封面

打开文本编辑器(如记事本),将以下代码粘贴进去:

获取歌词

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
setlocal enabledelayedexpansion

:: 确保输出目录存在
if not exist "Lyrics" mkdir "Lyrics"

:: 遍历当前目录中的所有 MP3 文件
for %%f in (*.mp3) do (
:: 获取文件名(不包括扩展名)
set "filename=%%~nf"

:: 提取歌词并保存为文本文件
ffprobe -v error -show_entries format_tags=lyrics-zho -of default=noprint_wrappers=1:nokey=1 "%%f" > "Lyrics\!filename!.txt"
)

echo Finished extracting lyrics!
pause

获取封面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
setlocal enabledelayedexpansion

:: 确保输出目录存在
if not exist "Covers" mkdir "Covers"

:: 遍历当前目录中的所有 MP3 文件
for %%f in (*.mp3) do (
:: 获取文件名(不包括扩展名)
set "filename=%%~nf"

:: 提取封面图片
ffmpeg -i "%%f" -an -vcodec copy "Covers\!filename!.jpg"
)

echo Finished extracting covers!
pause

获取歌词和封面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@echo off
setlocal enabledelayedexpansion

:: 确保输出目录存在
if not exist "Covers" mkdir "Covers"
if not exist "Lyrics" mkdir "Lyrics"

:: 遍历当前目录中的所有 MP3 文件
for %%f in (*.mp3) do (
:: 获取文件名(不包括扩展名)
set "filename=%%~nf"

:: 提取封面图片
ffmpeg -i "%%f" -an -vcodec copy "Covers\!filename!.jpg"

:: 提取歌词并保存为文本文件
ffprobe -v error -show_entries format_tags=lyrics-zho -of default=noprint_wrappers=1:nokey=1 "%%f" > "Lyrics\!filename!.txt"
)

echo Finished extracting covers and lyrics!
pause

1.保存文件,例如命名为 your.bat (或者你想要的名字)确保文件类型选择为 “所有文件”。

2.将 your.bat文件和 MP3 文件放在同一目录下。

3.双击运行 your.bat 批处理脚本:

下一篇:
wordpress 菜单输出插件WPS Menu Exporter