将所有第二层mp3的递归转换为第三层,并更新ID3

时间:2014-04-27 08:08:59

标签: shell audio mp3 converter

我处于http://nerdbynature.de/s9y/?316中描述的情况。我有一个文件

$ file foo.mp3
foo.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer II, v1, 192 kbps, 44.1 kHz, Stereo

我希望将layer II转为layer III,将ID3 version 2.3.0转为ID3 version 2.4.0。对于单个文件,所描述的方式非常完美。

$ mv foo.{mp3,mp2}
$ lame --mp2input foo.mp2 foo.mp3
$ mid3iconv -d foo.mp3
$ rm foo.mp2
$ file foo.mp3
foo.mp3: Audio file with ID3 version 2.4.0, contains: MPEG ADTS, layer III, v1, 128 kbps, 44.1 kHz, JntStereo
  1. 我现在如何编写一个(最好是shell)脚本,该脚本通过包含音乐的大文件夹递归运行,并检查每个文件。如果它使用layer II,请使用layer III将其转为lame,如果使用ID3 version 2.3.0,则使用mid3iconv将其转换为ID3 version 2.4.0

    < / LI>
  2. 另外,我如何确保我没有失去质量(我在上面看到输入为192kbps而输出只有128kbps。

1 个答案:

答案 0 :(得分:3)

这应该让你入门

find -name '*.mp3' | while read ip
do
  file "$ip" | grep -q '2.4.0.*III' && continue
  ib=${ip%.*}
  ffmpeg -i "$ip" -q:a 0 "$ib"-iii.mp3
done
  • 注意到我没用过 -print0,可能是个好主意。

  • -q:a 0将保持质量。

  • 使用输出扩展名.mp3时,FFmpeg默认使用第3层编解码器

  • FFmpeg写道 2.4.0 metadata 默认情况下