【问题标题】:How do I programmatically convert mp3 to an itunes-playable aac/m4a file?如何以编程方式将 mp3 转换为 iTunes 可播放的 aac/m4a 文件?
【发布时间】:2010-09-09 08:44:57
【问题描述】:

我一直在寻找一种以编程方式或通过命令行将 mp3 转换为 aac 的方法,但没有成功。理想情况下,我有一段可以从我的rails 应用程序调用的sn-p 代码,它将mp3 转换为aac。我安装了 ffmpeg 和 libfaac 并能够使用以下命令创建一个 aac 文件:

ffmpeg -i test.mp3 -acodec libfaac -ab 163840 dest.aac

当我将输出文件的名称更改为 dest.m4a 时,它不会在 iTunes 中播放。

谢谢!

【问题讨论】:

    标签: ruby mp3 aac m4a


    【解决方案1】:

    FFmpeg 提供 AAC 编码功能(如果您已编译它们)。如果您使用的是 Windows,则可以从 here 获取完整的二进制文件

    ffmpeg -i source.mp3 -acodec libfaac -ab 128k dest.aac
    

    我不确定你会如何从 ruby​​ 中调用它。

    另外,请务必正确设置比特率。

    【讨论】:

    • 嗯,我安装了 ffmpeg,当我尝试你提到的命令时,出现以下警告/错误:警告:比特率参数设置得太低。它需要比特/秒作为参数,而不是 kbits/s 未知编码器 'aac' 我使用 git 下载了源代码。我需要下载任何其他编解码器吗?
    • 你需要一个用 libfaac 编译的 ffmpeg,以及它的 acodec libfaac,而不是 aac。正如您所说,-ab 128k 是正确的值,而不是 -ab 128。
    • 感谢您纠正我的错误。这就是我们在将其发布给客户之前进行测试的原因:P
    • 这也是为什么寻求 ffmpeg 帮助的人应该通过#ffmpeg 来获得实时支持:)
    • 确实如此。绝对击败了一些人 BSing 从他的头顶上掉下来 :o)
    【解决方案2】:

    据我所知,只有三个免费的 AAC 编码器可以通过命令行界面获得:

    1. FAAC (LPGL),老实说非常糟糕(在相同比特率下,质量将明显比 LAME 差)。如果您愿意追求更高的比特率 (>>128kbps) 并且需要 AAC 以实现兼容性,而不是质量原因,那也可以。使用 FAAC 最常见的方式是通过 ffmpeg,作为 libfaac。

    2. Nero AAC,命令行编码器,可在 Windows 和 Linux 下免费使用,但仅用于非商业用途(并且相应地是封闭源代码)。

    3. ffmpeg 的 AAC 编码器,仍在开发中,虽然我相信它在技术上确实可以工作,但它一点也不稳定、不好甚至快,因为它仍处于初始阶段。据我所知,它在后备箱中也不可用。

    (编辑:似乎 iTunes 也可能有一个,我怀疑它的使用条款与 Nero 的相似。AFAIK 它的质量相当。)

    【讨论】:

      【解决方案3】:

      我意识到我参加这个聚会迟到了,但我质疑这个问题的前提。为什么您甚至想将 MP3 转换为“iTunes 可播放”格式? iTunes 已经原生处理 MP3。

      您似乎进行了不必要的转换,并且由于您正在从一种有损格式转换为另一种格式,因此您在此过程中失去了一些质量。

      【讨论】:

      • itunes 会将歌曲下载为 mp3,但如果您已将其下载为 m4a,则必须进行转换。 Itunes 也会这样做,但是如果您有数百首歌曲,则右键单击每首歌曲并进行转换会很烦人。并非所有“移动数字音乐”(没有更好的术语)播放器都玩 m4a。这就是您首先要转换的原因。
      【解决方案4】:

      在 ffmpeg 0.5 或更高版本中使用 ffmpeg -i source.mp3 target.m4a

      为了更好地传输元数据并覆盖默认比特率,ffmpeg 应用

      ffmpeg -i "input.mp3" -ab 256k -map_meta_data input.mp3:output.m4a output.m4a

      最好不要转换,因为 ipod 播放 mp3 很好(我知道有这样的答案,但我的地位低不允许投票)

      【讨论】:

        【解决方案5】:

        在运行 Rails 应用程序的 linux/window 机器上安装转换应用程序后,使用 Ruby 中的“system()”命令在系统上调用转换应用程序。 system("command_here");

        【讨论】:

          【解决方案6】:

          我在使用 mplayer(我相信它使用了 ffmpeg...)和 lame 时运气不错。我已经将它包装在一个脚本中:

          #!/bin/sh
          
          TARGET=$1
          
          BASE=`basename "${TARGET}"`
          echo TARGET: "${TARGET}"
          echo BASE:   "${BASE}" .m4a
          
          # Warning! Race condition vulnerability here! Should use a mktemp
          # variant or something...
          mkfifo encode
          mplayer -quiet -ao pcm -aofile encode "${TARGET}" &
          lame --silent encode "${BASE}".mp3
          rm encode
          

          抱歉安全问题,我有一天在火车上撞了这个......

          我的mplayer和la脚来自fink

          【讨论】:

            【解决方案7】:

            其实语法是ffmpeg -i input.mp3 -c:a aac -strict -2 -b:a 256k output.m4a;如果模拟“正确”比特率,则更正确。 cf.:link 编译方案。 (rpmfusion 包也可以正常工作:

            配置: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir =/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size= 4 -grecord-gcc-switches -m64 -mtune=generic' --enable-bzlib --disable-crystalhd --enable-frei0r --enable-gnutls --enable-libass --enable-libcdio --enable-libcelt - -enable-libdc1394 --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopencv --enable-libopenjpeg --enable-libopus --enable- libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libvpx --enable-libx264 --enable-libxvid --enable- x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir= /usr/lib64 --启用-runtime-cpudetect

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-03-15
              • 2016-02-02
              • 2012-01-16
              • 1970-01-01
              • 1970-01-01
              • 2011-01-14
              • 1970-01-01
              相关资源
              最近更新 更多