我使用的是 macOS 10.3.6 (High Sierra),前段时间我有一套 4 张 CD 的音乐,将曲目翻录成 MP3 格式,然后将文件存储在我的系统上。我不得不手动标记和添加元数据给 100 多首曲目中的每一个(不要问),而且不久前我也扔掉了原始 CD(也不要问),所以我不能轻易地重新翻录它们。
问题就在这里:显然,我当时使用的 MP3 工具在每首曲目的开头都添加了一小段“砰”的一声。我当时没有意识到——或者没有注意——但 100 多首曲目中的每一首都在曲目开头出现了令人讨厌的砰砰声。
我在 Stack Overflow 上读到了这个帖子,“使用 LAME 时开始时有点击声音“虽然建议很可靠——解释了 LAME 有时可能会意外地将音频文件的标题编码为纯音频——但现实是,所提出的解决方案会迫使我通过类似fseek
然后重新编码 MP3(又名:转码),但这远非理想。
那么,有没有什么方法可以从这些已经编码的 MP3 中剪掉大约 1/8 秒,以消除“爆音”并避免对 MP3 进行转码?
我正在寻找一个相对简单的基于 macOS 的解决方案,最多只需要通过 Homebrew 安装一个新工具(如果需要)。不需要完整的脚本,但至少需要一个工具和配置提示来为我指明正确的方向。
答案1
好吧,我设法利用 FFmpeg 的魔力解决了这个问题(我已经通过 Homebrew 在 macOS 上安装了它)。具体来说-ss
(又称:寻找)参数加上copy
应用于音频流的选项,效果非常好!该命令可以简化为:
ffmpeg -ss 0.125 -i "input.mp3" -acodec copy "output.mp3"
将设置-ss
为0.125
,然后简单地通过将copy
设置为来指定输入和输出-acodec
就是所需要做的事情。
而且,正如问题中所述,在我的例子中,我有 100 多个文件需要处理,因此我创建了一个简单的 Bash 脚本,该脚本将查找所有应修剪 1/8 开头音频的 MP3 并将它们转储到子目录中mp3/
。希望这对处于类似情况的人有所帮助!
find -E "path/to/audio/files" -type f -iregex ".*\.(MP3)$" |\
while read full_audio_filepath
do
# Break up the full audio filepath stuff into different directory and filename components.
audio_dirname=$(dirname "${full_audio_filepath}");
audio_basename=$(basename "${full_audio_filepath}");
audio_filename="${audio_basename%.*}";
# Set the MP3 directory.
mp3_dirpath="${audio_dirname}/mp3";
mp3_filepath="${mp3_dirpath}/${audio_filename}.mp3";
# Create the child MP3 directory.
mkdir -p "${mp3_dirpath}";
# And here is where the magic happens.
ffmpeg -y -v quiet -ss 0.125 -i "$full_audio_filepath" -acodec copy "$mp3_filepath" < /dev/null;
done