又一个iTunes脚本

2011-10-12 14:16

西西上次找我问我是怎么把音乐CD转成苹果的无损音频的. 下面是我的方法:

如果是音乐CD, 直接插入光驱, 在iTunes里看到光盘内容, 右键选择导入就可以了. 需要注意的是, 为了将音频导入成无损格式, 你可能需要修改默认的导入配置, 自己在选项里找找吧, 第一个标签页里就有, 选择成Apple Lossless即可.

如果是带有cue的整轨flac/ape/wave文件, 用winmount载入cue文件, 这样电脑里会有一个虚拟光驱, 里面是音乐光盘. 照前面的方法导入. 不过如果源文件质量不佳(尤其以ape为甚), 可能会导致转换到一半就退出了. 所以我写了一个转换的脚本, 后面再说这个.

如果是分轨的flac/ape/wave文件, 即每首歌一个文件而不是像整轨一样, 每张CD一个文件, 这个时候就不能直接用iTunes导入了. 我的处理方式是用ffmpeg将这些文件批量转换成m4a文件, 编码选择alac. 我个人是在Linux下做这个转换的, 不过ffmpeg有windows版, 应该也能实现这一转换. 根据一些搜索, foobar似乎也可以实现这一转换, 个人没有尝试过. 另外, 在这种情况下, 音乐的元信息(例如演唱者, 专辑信息等)是没有的. 为了批量编辑这些信息, 可以使用mp3tag这个软件. 比较方便, 而且根据文件名转换元信息的功能不错.

前面说了, 有时候我们会下载到源文件质量不佳的flac/ape/wave文件. 这个时候转换到一半会失败, 如果歌曲长度是3分钟, 也许转换得到的音乐就只有1分钟了. 而且iTunes的转换界面那儿不会报错. 所以往往你需要人肉通过比较歌曲长度来判断转换是否成功. 这个过程很扯, 于是我们会想要用脚本来自动完成.

脚本的逻辑很简单, 首先做些基本判断, 然后拿到音乐CD的播放列表, 然后将这个列表里的所有文件全部转换一次. 再执行检查, 检查时倒叙循环整个音乐库, 找到专辑名和歌曲名一致的音轨. 把这个音轨和CD播放列表里的音轨根据长度进行比较. 如果一致就认为歌曲转换成功了. 如果不一致就重新对单个曲目进行转换.

代码