【问题标题】:Convert recursively all layer II mp3's to layer III and also update ID3递归地将所有第二层 mp3 转换为第三层并更新 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
  1. 我现在如何编写一个(最好是 shell)脚本,该脚本在包含音乐的巨大文件夹中递归运行,并检查每个文件。如果使用layer II,则使用lame 将其转换为layer III,如果使用ID3 version 2.3.0,则使用mid3iconv 将其转换为ID3 version 2.4.0

  2. 另外,我如何确保我不会失去质量(我在上面看到输入为 192kbps 而输出仅为 128kbps。

【问题讨论】:

    标签: shell audio mp3 converter


    【解决方案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,但这大大降低了质量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多