FFmpeg 命令将 MP3 转换为 AAC

Soh*_*pta 27 audio mp3 ffmpeg aac audio-conversion

我可以发出这个命令:

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.m4a 
Run Code Online (Sandbox Code Playgroud)

创建一个 m4a 文件。

但是当我发出这个命令时

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.aac
Run Code Online (Sandbox Code Playgroud)

ffmpeg 抛出一个错误说

无法为输出文件 #0 写入标头(编解码器参数不正确?)。

还有,m4a文件的大小真的比原文件大了将近5.8倍,这绝对不是我想要的,也是我想转换成AAC的原因。

slh*_*hck 46

如何转换为AAC?

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

ffmpeg -i input.mp3 -c:a libfdk_aac output.m4a
Run Code Online (Sandbox Code Playgroud)

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

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

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

    ffmpeg -i input.mp3 -c:a libfdk_aac -b:a 128k output.m4a
    
    Run Code Online (Sandbox Code Playgroud)

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

ffmpeg -i input.mp3 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k output.m4a
Run Code Online (Sandbox Code Playgroud)

如果我没有libfdk_aac呢?

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

ffmpeg -i input.mp3 -c:a aac -b:a 192k output.m4a
Run Code Online (Sandbox Code Playgroud)

此编码器不正确支持 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。


小智 5

为 Zeranoe Windows Builds 轻松转换为 AAC

ffmpeg -i input.mp3 -c:a aac -b:a 128k output.m4a
Run Code Online (Sandbox Code Playgroud)

使用“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 许可的代码时,分发包含根据这些许可获得许可的代码的二进制文件。”

  • 从 3.2 开始,`libfaac` 支持也已被删除。 (2认同)