使用 ffmpeg 批量降低 mp3 音频文件的比特率和大小

Wes*_*des 8 bash mp3 ffmpeg bitrate

我正在寻找一种方法来批量降低我的大量 mp3 文件集合中的 mp3 比特率。考虑到这一定是一件非常常见的事情,这真是令人惊讶的困难。

事实上,有数十个甚至数百个来自人们询问如何做到这一点的帖子,以及声称可以做到这一点的数十种不同金额的公用事业。环顾四周并尝试了一些免费软件,令我惊讶的是,没有任何软件使批量转换/调整任务变得容易。

如果我想转换单个文件,有人告诉我这是一个不错的方法:

ffmpeg -y -loglevel "error" -i "my_music_file.mp3" -acodec libmp3lame  -ab $BITRATE "my_music_file_new.mp3"
Run Code Online (Sandbox Code Playgroud)

(尽管我更希望文件在原地更改并产生相同的名称。)

我需要一个使用 ffmpeg 的简单 bash 脚本,它将递归地遍历我的音乐目录并更改我的 mp3 文件的比特率。

Wes*_*des 6

获得正确的 ffmpeg 并找到选项需要花费一些时间,但这应该可以做到。

#!/bin/bash
MUSIC="FULL PATH TO YOUR MUSIC FOLDER"
BITRATE=160k
find "${MUSIC}" -name "*.mp3" -execdir echo "{}" \; -exec mv "{}" "{}.mp3" \; -exec ffmpeg -y -loglevel "error" -i "{}.mp3" -acodec libmp3lame  -ab $BITRATE "{}" \; -exec rm "{}.mp3" \;
Run Code Online (Sandbox Code Playgroud)

因为 ffmpeg 不能在不使用 nuking 的情况下输出到同一个输入文件,所以脚本首先重命名文件,以您选择的比特率构建一个新文件,然后删除旧文件。

我相信很多人会在这里提出改进建议。我当然欢迎让脚本更具可读性的方法。

  • 只是想出了一种更好的压缩方法。有一个 320kbps 16mb 大的 mp3。这使它变成了不到 0.7mb,而且我听不出任何区别。然而,尝试使用 8k 却打破了它(不值得节省 0.3mb)。所以目前16是理想的!`ffmpeg -i file.mp3 -b:a 8k -acodec libopus file.ogg`。opus 似乎比默认的 vorbis 优越得多。但它的使用也较少,因此即使与一些新应用程序的兼容性也较差。 (3认同)