如何以编程方式将mp3转换为可播放iTunes的aac / m4a文件?
我一直在寻找一种以编程方式或者通过命令行将mp3转换为aac的方法,但是没有运气。理想情况下,我会从我的rails应用程序中调用一段代码,将mp3转换为aac。我安装了ffmpeg和libfaac,并能够使用以下命令创建aac文件:
ffmpeg -i test.mp3 -acodec libfaac -ab 163840 dest.aac`
当我将输出文件的名称更改为dest.m4a时,它无法在iTunes中播放。
谢谢!
解决方案
回答
我知道通过命令行界面可以使用三种免费的AAC编码器:
- FAAC(LPGL),这确实很糟糕(在相同的比特率下,其质量将明显比LAME差)。如果我们愿意追求更高的比特率(>> 128kbps),并且出于兼容性考虑而不是出于质量原因而需要AAC,那也很好。使用FAAC的最常见方法是通过ffmpeg,如libfaac。
- Nero AAC,在Windows和Linux下可免费使用其命令行编码器,但仅用于非商业用途(并且相应地为闭源)。
- ffmpeg的AAC编码器仍在开发中,尽管我相信它在技术上可以正常工作,但由于它仍处于起步阶段,因此它一点也不稳定,不好甚至快。据我所知,它在行李箱中也不可用。
(编辑:似乎iTunes可能也有一个,我怀疑它的使用条款与Nero相似。
回答
在运行Rails应用程序的linux / window机器上安装转换应用程序后,在Ruby中使用" system()"命令在系统上调用转换应用程序。 system(" command_here");
回答
如果已将FFmpeg进行编译,则FFmpeg会提供AAC编码功能。如果使用Windows,则可以从此处获取完整的二进制文件
ffmpeg -i source.mp3 -acodec libfaac -ab 128k dest.aac
我不确定你怎么称呼红宝石。
另外,请确保正确设置比特率。
回答
我已经使用mplayer(我相信使用ffmpeg ...)和me脚了。至此,我将其包装在脚本中:
#!/bin/sh TARGET= 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子来自芬克
回答
我意识到我参加这个聚会迟到了,但是我在质疑这个问题的前提。为什么甚至要将MP3转换为" itunes可播放"格式? iTunes已经可以本地处理MP3.
似乎我们正在执行不必要的转换,并且由于我们是从一种有损格式转换为另一种格式,因此我们在此过程中损失了一些质量。
回答
在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(我知道有这样的答案,但是我的信誉低下不允许投票)