递归地将所有第二层 mp3 转换为第三层并更新 ID3
Posted
技术标签:
【中文标题】递归地将所有第二层 mp3 转换为第三层并更新 ID3【英文标题】:Convert recursively all layer II mp3's to layer III and also update ID3 【发布时间】:2014-04-27 08:08:58 【问题描述】:我处于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
,则使用lame
将其转换为layer III
,如果使用ID3 version 2.3.0
,则使用mid3iconv 将其转换为ID3 version 2.4.0
。
另外,我如何确保我不会失去质量(我在上面看到输入为 192kbps 而输出仅为 128kbps。
【问题讨论】:
【参考方案1】:这应该让你开始
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 默认为第三层编解码器@
FFmpeg 写入 2.4.0 metadata 默认情况下
【讨论】:
感谢您的建议!我想知道为什么使用 ffmpeg 实际上更好——我不能在 ubuntu 上简单地安装它。我可以用上面使用的代码替换 ffmpeg 行吗?还是有其他缺点? @ChristianStump 我认为在 Ubuntu 上你可以使用avconv
作为替代品
它现在可以工作了,谢谢!我还有两个问题:1)如果满足两个条件中的任何一个,file "$ip" | grep -q '2.4.0.*III' && continue
是否确保它被处理? 2) 我处理了一些测试文件,发现输入为 192 kbps,而输出仅为 64 kbps(使用file foo.mp3
)——同时,文件大小增加了 1.3 倍。这是假定的行为吗?
@ChristianStump ffmpeg 将运行,除非两个条件都满足。如果您在费率方面遇到问题,可以改用-b:a 192k
再次感谢! (以防其他人也想这样做:)我也尝试了 192k,但这大大降低了质量。以上是关于递归地将所有第二层 mp3 转换为第三层并更新 ID3的主要内容,如果未能解决你的问题,请参考以下文章