我处于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
我现在如何编写一个(最好是shell)脚本,该脚本通过包含音乐的大文件夹递归运行,并检查每个文件。如果它使用layer II
,请使用layer III
将其转为lame
,如果使用ID3 version 2.3.0
,则使用mid3iconv将其转换为ID3 version 2.4.0
。
另外,我如何确保我没有失去质量(我在上面看到输入为192kbps而输出只有128kbps。
答案 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 默认情况下