如何以编程方式将mp3转换为可播放iTunes的aac / m4a文件?

时间:2020-03-05 18:55:20  来源:igfitidea点击:

我一直在寻找一种以编程方式或者通过命令行将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(我知道有这样的答案,但是我的信誉低下不允许投票)