FFMPEG:使用多核将 m4a 转换为 mp3

Joh*_*Pie 4 audio video mp3 ffmpeg conversion

我使用以下命令将 m4a 格式转换为 mp3

ffmpeg -i audio.m4a -acodec libmp3lame audio.mp3
Run Code Online (Sandbox Code Playgroud)

我有 32 个 x86 核心,但是 libmp3lame 在单个线程中处理。我知道 libmp3lame 不支持多线程,因此我愿意接受可以在 ubuntu CLI 中执行的其他替代方案。

如果 audio.m4a 是 2 小时长的视频,通常需要超过 3 分钟,速度似乎为 45 倍到 50 倍。

我的主要目标是在几秒钟内将多个 YouTube 视频转换为 mp3 格式。

更新1:

由于我使用的是 32 核 CPU,因此当只有一个视频转换时,它只使用一个核心。那么在这种情况下如何使用多个核心,以更快地获得输出。我想最大限度地发挥 CPU 的作用。另外,如果 FFmpeg 不是答案,还有其他方法吗?

Mav*_*ick 5

GNU Parallel听起来与您正在寻找的完全一样。

以下是如何使用原始命令使用GNU Parallel的示例(假设您已经有一个包含所有名为*.m4a的文件的目录):videos

find /path/to/videos -name "*.m4a" | parallel 'ffmpeg -i {} -acodec libmp3lame {.}.mp3'
Run Code Online (Sandbox Code Playgroud)

有两点需要解释一下:

1:命令的输出find(即要转换的文件列表.m4a)将通过管道传输到parallel命令中,命令将依次(默认情况下)执行与核心数量一样多的作业。本质上,它是将命令的输出分开find,并将其分配给不同的作业来处理

2:根据GNU 并行教程{}是您的参数所在的位置,{.}将替换您的参数并删除终端扩展名(在本例中为 ).m4a,您的输出将是原始文件名但带有.mp3扩展名。

注意:此示例会将所有转换后的文件写入原始文件所在的位置。如果这是一个问题,那么只需传递一个目录来将转换后的文件存储在包含命令的参数字符串中ffmpeg

find /path/to/videos -name "*.m4a" | parallel 'ffmpeg -i {} -acodec libmp3lame /path/to/converted/vids/{.}.mp3'
Run Code Online (Sandbox Code Playgroud)