如何以编程方式将 mp3 转换为 iTunes 可播放的 aac/m4a 文件?
Posted
技术标签:
【中文标题】如何以编程方式将 mp3 转换为 iTunes 可播放的 aac/m4a 文件?【英文标题】:How do I programmatically convert mp3 to an itunes-playable aac/m4a file? 【发布时间】: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 中播放。
谢谢!
【问题讨论】:
【参考方案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 编码器可以通过命令行界面获得:
FAAC (LPGL),老实说非常糟糕(在相同比特率下,质量将明显比 LAME 差)。如果您愿意追求更高的比特率 (>>128kbps) 并且需要 AAC 以实现兼容性,而不是质量原因,那也可以。使用 FAAC 最常见的方式是通过 ffmpeg,作为 libfaac。
Nero AAC,命令行编码器,可在 Windows 和 Linux 下免费使用,但仅用于非商业用途(并且相应地是封闭源代码)。
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
【讨论】:
以上是关于如何以编程方式将 mp3 转换为 iTunes 可播放的 aac/m4a 文件?的主要内容,如果未能解决你的问题,请参考以下文章
Macsome iTunes Converter for Mac如何将 Apple Music 转换为 Mac 的 MP3/AAC/WAV/FLAC/AIFF?
如何使用 iTunes 文件共享以编程方式将文件传输到 iOS 设备?
如果 Itunes:Keep iTunes Folder Organized 在 Windows 上以编程方式设置,我该如何解决