FFmpeg命令将MP3转换为AAC


21

我可以发出以下命令:

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.m4a 

创建一个m4a文件。

但是当我发出此命令时

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.aac

ffmpeg抛出错误提示

无法写入输出文件#0的标头(错误的编解码器参数?)。

此外,m4a文件的大小实际上比原始文件大了近5.8倍,这绝对不是我想要的,也不是我想要转换为AAC的原因。

Answers:


38

如何转换为AAC?

这是最基本的FFmpeg命令,可使用最高质量的AAC FFmpeg将输入转换为AAC音频。libfdk_aac是Fraunhofer AAC编码器,在编译带有支持的FFmpeg时可用。

ffmpeg -i input.mp3 -c:a libfdk_aac output.m4a

要更改质量,您有两种选择:

  • 对于可变比特率(VBR),请使用该-vbr选项。例如,这-vbr 4是一个不错的选择(立体声音频约为128 kBit / s)。越高意味着越好。取值范围是1到5。

    ffmpeg -i input.mp3 -c:a libfdk_aac -vbr 4 output.m4a
    
  • 对于固定比特率(CBR),请使用-b:a选项,例如-b:a 128k。对于大多数情况,128 kBit / s应该足够了。您通常也可以选择较低的东西。

    ffmpeg -i input.mp3 -c:a libfdk_aac -b:a 128k output.m4a
    

您还可以使用HE-AAC(v1 / v2)代替最适合低比特率的默认AAC-LC(低复杂度)配置文件:

ffmpeg -i input.mp3 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k output.m4a

如果我没有libfdk_aac呢?

某些版本的FFmpeg没有libfdk_aac(出于许可原因)。如果是这样,您可以使用内置的AAC编码器:

ffmpeg -i input.mp3 -c:a aac -b:a 192k output.m4a

该编码器不正确支持VBR,因此,如果需要它或HE-AAC,请继续阅读。

您可以自己编译ffmpeg并添加libfdk_aac支持。FFmpeg Wiki上有指南。在Linux上容易编译,在OS X上容易编译,而在Windows上很难编译。当您遵循编译指南并事先安装适当的库时,FFmpeg现在为您提供了使用的选项libfdk_aac


您的原始方法存在一些问题:

  • alac不是AAC。ALAC是Apple无损音频编解码器,而AAC是高级音频编码

  • 这就是为什么您的输出大于输入的原因,因为与MP3相比,ALAC仍然经过压缩,但是它需要无损–这就是为什么它需要存储更多数据。

  • .aac不是ALAC音频的输出容器。如果您使用AAC,那应该可以。我会使用MP4或M4A。


在Ubuntu 12.04上,我无法使用option -c:a,这有什么同义词吗?我想这可能意味着,-acodec:a但最后我只是删除了它,并且ffmpeg能够根据所需的输出文件名推导出编解码器。(-strict experimental尽管需要;并且-map_metadata 0:0为了保留ID3标签而采取了充分措施。)
2013年

还值得注意的是:我想要M4B文件(有声读物),该文件ffmpeg似乎不支持,但是转换为M4A然后重新命名似乎是可行的。
2013年

@tripleee这意味着您正在使用一个名为的过时程序ffmpeg,但这实际上不是来自FFmpeg,而是Libav分支。不幸的是,Ubuntu捆绑了它,而不是“真正的” ffmpeg。请参阅:谁能告诉我ffmpeg,libav和avconv之间的区别和关系
slhck

@slhck:感谢您的快速更新和链接!
13年

1
@tripleee实际上,.m4a文件与.mp4相同(这只是对仅带有音频的mp4文件的约定命名),但是格式与.aac不同(称为ADTS流)。您还可以通过添加强制FFmpeg以ADTS格式输出-f adts
Bigue Nique

4

轻松转换为Zeranoe Windows构建的AAC

ffmpeg -i input.mp3 -c:a aac -b:a 128k output.m4a

使用“ aac”代替libfaac或libfdk_aac:https://trac.ffmpeg.org/wiki/Encode/AAC

“ FFmpeg可以支持三种AAC-LC编码器(aac,libfaac,libfdk_aac)和一种HE-AAC(v1 / 2)编码器(libfdk_aac)。libfaac和libfdk_aac的许可证与GPL不兼容,因此GPL不允许分发包含这些许可所许可的代码的二进制文件,同时还包括GPL许可的代码。”


2
libfaac从3.2开始,支持也已删除。
slhck
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.