怎样才能从已编码的 MP3 文件开头截去几分之一秒而不再次对 MP3 进行转码?

怎样才能从已编码的 MP3 文件开头截去几分之一秒而不再次对 MP3 进行转码?

我使用的是 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"

将设置-ss0.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

相关内容