如何以编程方式将mp3转换为itunes-playable aac / m4a文件?

时间:2008-09-16 07:35:17

标签: ruby mp3 aac m4a

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

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

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

谢谢!

7 个答案:

答案 0 :(得分:9)

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

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

我不确定你怎么称它为红宝石。

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

答案 1 :(得分:2)

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

  1. FAAC(LPGL),老实说非常糟糕(质量会比同样比特率的LAME差很多)。如果您愿意购买更高的比特率(>>> 128kbps)并且需要AAC以实现兼容性,而不是质量原因,那就很好。使用FAAC的最常用方法是通过ffmpeg,如libfaac。

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

  3. ffmpeg的AAC编码器,目前仍处于开发阶段,虽然我认为它在技术上有效,但由于它仍处于初始阶段,因此它完全不稳定,不好或甚至不快。据我所知,它也不适用于行李箱。

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

答案 2 :(得分:2)

我意识到我迟到了这个派对,但我在质疑这个问题的前提。为什么你甚至想把MP3转换为“itunes playable”格式? iTunes已经在本地处理MP3。

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

在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 :(得分:0)

我使用mplayer(我相信使用ffmpeg ......)和跛脚运气好。我已将其包装在脚本中:

#!/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和lame来自fink

答案 6 :(得分:0)

实际上,语法是ffmpeg -i input.mp3 -c:aac -strict -2 -b:256k output.m4a;如果一个人正在模仿,那就更正确了#34;正确"比特率。 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 --enable-runtime-cpudetect