先进音频编码(AAC)的后继格式到MP3,和以MPEG-4部分3(ISO / IEC 14496-3)被定义。它通常用于MP4容器格式; 对于音乐,通常使用.m4a扩展名。第二最常见的用途是在MKV(Matroska)文件内,因为它比MP4更好地支持嵌入式基于文本的软字幕。本指南中的示例将使用扩展MP4和M4A。

FFmpeg的可支持两个AAC-LC编码器(AAClibfdk_aac)和一个HE-AAC(V1 / 2)编码器(libfdk_aac)。的许可证libfdk_aac不与GPL兼容,因此GPL不允许含有不兼容的代码的二进制文件的分发时也被包含GPL许可的代码。因此,此编码器已被指定为“非自由”,您不能下载支持它的预构建的ffmpeg。这可以通过解决编译FFmpeg的自己。

libfdk_aac

Fraunhofer FDK AAC编解码器库。这是目前使用ffmpeg的最高质量的AAC编码器。ffmpeg的要求要与配置--enable-libfdk-AAC(另外--enable-nonfree的,如果您还使用--enable-GPL)。但要注意,它默认为约14kHz的(低通滤波器的细节)。如果您想保留更高的频率,使用-cutoff 18000。只有在需要时才将数字调整到频率上限; 记住,更高的限制可能可听见地降低总体质量。

恒定比特率(CBR)模式

这些设置针对特定的比特率,样本之间的变化较小。它可以更好地控制文件大小,并且与HE-AAC配置文件兼容。作为经验法则,对于可听的透明度,对于每个通道使用64kb / s(因此对于立体声为128kb / s,对于5.1环绕声为384kb / s)。设置与比特率-b:一个选项。

在M4A(MP4)容器中将音频文件转换为AAC:

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

转换视频的5.1环绕声音频,只留下视频:

ffmpeg -i input.mp4 -c:v copy -c:a libfdk_aac -b:a 384k output.mp4

转换的视频与libx264,对一个700MB(= 5734400kb)CD-ROM安装一个90分钟的电影,缩混音频两个通道(Windows用户应该使用的目标NUL而不是的/ dev / null的):

ffmpeg -y -i input.mp4 -c:v libx264 -b:v 933k -preset:v veryfast -pass  -an / dev / null && \
ffmpeg -i input.mp4 -c:v libx264 -b:v 933k -preset:v veryfast -pass \
-ac -c:a libfdk_aac -b:128k output.mp4

可变比特率(VBR)模式

靶向质量,而不是一个特定的比特率。1是最低质量,5是最高质量。设置与该VBR水平-vbr标志。

VBR模式大致给出了每通道(以下比特率的详细信息):

 
VBR kbps /信道 AOT
1 20-32 LC,HE,HEv2
2 32-40 LC,HE,HEv2
3 48-56 LC,HE,HEv2
4 64-72 LC
5 96-112 LC

HE比特率将低得多。

在M4A(MP4)容器中将音频文件转换为AAC:

ffmpeg -i input.wav -c:a libfdk_aac -vbr  output.m4a

仅转换视频的音频:

ffmpeg -i input.mp4 -c:v copy -c:a libfdk_aac -vbr  output.mp4

转换与视频libx264和音频缩混到两个渠道:

ffmpeg -i input.mp4 -c:v libx264 -crf  -preset:v veryfast \
-ac -c:a libfdk_aac -vbr output.mp4

高效率AAC

这是针对低比特率(版本1和版本2)定制的一对AAC配置文件。HE-AAC版本1适合低于64kb / s(立体声音频)下降到约48kb / s的比特率,而HE-AAC版本2适用于低至32kb / s的比特率(同样,对于立体声)。

注意: HE-AAC版本2只处理立体声。如果您有单声道,或想要下混音为单声道,请使用HE-AAC版本1。

不幸的是,可以播放AAC-LC(默认配置文件的许多设备libfdk_aac)根本无法起到HE-AAC的任一版本,所以这是不推荐的环绕声音频,通常需要与这样的硬件播放器兼容。如果你只是打算在电脑上播放,或者你确定你的硬件播放器支持HE-AAC,你可以针对版本1的比特率为160kb / s,对于版本2的比特率为128kb / s。 ,实验看看什么对你的耳朵有用。

HE-AAC版本1

ffmpeg -i input.wav -c:a libfdk_aac -profile:aac_he -b:64k output.m4a

HE-AAC版本2

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

本地FFmpeg的AAC编码

原生FFmpeg AAC编码器。这是目前第二高质量的AAC编码器可用于FFmpeg,不需要像这里描述的其他AAC编码器的外部库。这是默认的AAC编码器。

注意: -strict实验(或-strict -2)以前需要这种编码器中,但它是不再试验和这些选项是不必要的,因为2015年12月5日。

例如使用-b:a

ffmpeg -i input.wav -c:a aac -b:a 160k output.m4a

例如使用-q:a

ffmpeg -i input.wav -c:a aac -q:a 2 output.m4a

有效范围为-q:一个是0.1-2左右。这个VBR是实验性的,并且可能获得比CBR更差的结果。


不推荐使用/取出编码器

libfaac

免费软件高级音频编码器,该库的支持已被删除

libvo_aacenc

视龙AAC编码库。该库的支持已被删除。使用原生FFmpeg编码器:它提供更好的质量和支持超过2个通道。

libaacplus

AAC +编码库,支持该库已被删除。使用 libfdk_aac不是为HE-AAC:它在所有码率一贯更好。


元数据

您可以向本指南的任何示例添加元数据:

ffmpeg -i input ... -metadata author =“FFmpeg Bayou Jug Band”-metadata title =“Decode my Heart(Let's Mux)”output.mp4

渐进式下载

默认情况下,MP4 muxer在音频流('mdat'atom)之后的文件末尾写入'moov'原子。这导致用户需要在可以进行播放之前完全下载文件。将此moov原子重定位到文件的开头可以方便在客户端完全下载文件之前回放。

你可以用做-movflags +的fastStart选项:

ffmpeg -i input.wav -c:a libfdk_aac -movflags + faststart output.m4a

您也可以在现有MP4 / M4A文件上使用此选项。由于音频的仅仅是数据流复制有重新编码没有发生,只是重新混流,等于是没有质量损失:

ffmpeg -i input.m4a -c:a copy -movflags + faststart output.m4a

常见问题

哪个编码器提供最好的质量?

对于AAC-LC:libfdk_aac > Native FFmpeg AAC encoder (aac).

对于HE-AAC你有一个选择:libfdk_aac

我应该使用AAC-LC还是HE-AAC?

如果您需要低音频比特率,例如≤32kbs /通道,那么HE-AAC将值得考虑,如果您的播放器或设备可以支持HE-AAC解码。由于较少的处理,任何较高的可能从AAC-LC获益更多。如果有疑问,使用AAC-LC。所有支持HE-AAC的玩家也支持AAC-LC。

流媒体技术学习笔记之(六)FFmpeg官方文档先进音频编码(AAC)的更多相关文章

  1. 流媒体技术学习笔记之(十八)Ubuntu 16.04.3 如何编译 FFmpeg 记录

    官方文档:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu 一.最简单安装: apt-get install ffmpeg 二.安装最新版本 大 ...

  2. 流媒体技术学习笔记之(四)解决问题video.js 播放m3u8格式的文件,根据官方的文档添加videojs-contrib-hls也不行的原因解决了

    源码地址:https://github.com/Tinywan/PHP_Experience 总结: 说明: 测试环境:本测试全部来自阿里云直播和OSS存储点播以及本地服务器直播和点播 播放器:Vid ...

  3. Java学习全攻略-->阅读官方文档

    一直感觉Java的官方文档有些杂乱,最近特意整理了一下,仅供参考. 入口 Oracle官方文档入口:http://docs.oracle.com/.下级页面这边只整理了JavaEE跟JavaSE的文档 ...

  4. FFmpeg官方文档之————先进音频编码(AAC)

    先进音频编码(AAC)的后继格式到MP3,和以MPEG-4部分3(ISO / IEC 14496-3)被定义.它通常用于MP4容器格式; 对于音乐,通常使用.m4a扩展名.第二最常见的用途是在MKV( ...

  5. 流媒体技术学习笔记之(十七)FFmpeg 3.3《希尔伯特》-新版本的亮点

    FFmpeg 3.3“Hilbert”,一个新的主要版本的一些亮点: 苹果Pixlet解码器 NewTek SpeedHQ解码器 QDMC音频解码器 PSD(Photoshop Document)解码 ...

  6. 流媒体技术学习笔记之(一)nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器

    参照网址: [1]http://blog.csdn.net/redstarofsleep/article/details/45092147 [2]HLS介绍:http://www.cnblogs.co ...

  7. 流媒体技术学习笔记之(十三)Windows安装FFmpeg

    一.下载地址: 网址:https://ffmpeg.org/ 选择Windows版本:https://ffmpeg.org/download.html#build-windows 二.解压安装: 下载 ...

  8. 流媒体技术学习笔记之(十四)FFmpeg进行笔记本摄像头+麦克风实现流媒体直播服务

    FFmpeg推送视频流,Nginx RTMP模块转发,VLC播放器播放,实现整个RTMP直播 查看本机电脑的设备 ffmpeg -list_devices true -f dshow -i dummy ...

  9. 流媒体技术学习笔记之(十六)H264编码profile & level控制

    H.264有四种画质级别,分别是baseline, extended, main, high: 1.Baseline Profile:基本画质.支持I/P 帧,只支持无交错(Progressive)和 ...

随机推荐

  1. Asp.net中汉字转换成为拼音

    1.应用场景 将汉字转换为拼音(eg:"我爱你"--->"WOAINI") 取各个汉字的首字母(eg:"我是中国人"--->&q ...

  2. startActivity时报错Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVI

    原代码如下: Intent intent = new Intent(); intent.setClass(mContext, PhotoView.class); Bundle bundle = new ...

  3. web api token验证理解

    最近一直在学习web api authentication,以Jwt为例,可以这样理解,token是身份证,用户名和密码是户口本,身份证是有有效期的(jwt 有过期时间),且携带方便(自己带有所有信息 ...

  4. 安装Ubuntu后要做的事

    优化 删除libreoffice sudo apt-get remove libreoffice-common 删除Amazon sudo apt-get remove unity-webapps-c ...

  5. live555学习(一)通读Makefile编译live555

    live555学习(一)通读Makefile编译live555 live555 编译live555 学习开源 live555学习(一)通读Makefile编译live555 前言 live555简介 ...

  6. MiniNet自定义拓扑

    SDN 与 Mininet 概述 SDN 全名为(Software Defined Network)即软件定义网络,是现互联网中一种新型的网络创新架构,其核心技术 OpenFlow 通过网络设备控制面 ...

  7. LeetCode 628. Maximum Product of Three Numbers三个数的最大乘积 (C++)

    题目: Given an integer array, find three numbers whose product is maximum and output the maximum produ ...

  8. Daily Scrum 12.22

    姓名 上周末任务 今日任务 刘垚鹏 完善和增加quiz页面的过滤功能 完善和增加quiz页面的过滤功能 王骜 对问答功能的修复 对问答功能的修复 林旭鹏 存储文件路径太长导致bug修复 存储文件路径太 ...

  9. 动态绑定,多态,static

    1:下面程序的输出结果为: class base2{ static{ System.out.println("static base2"); } } public class te ...

  10. ElasticSearch 2 (20) - 语言处理系列之如何开始

    ElasticSearch 2 (20) - 语言处理系列之如何开始 摘要 Elasticsearch 配备了一组语言分析器,为世界上大多数常见的语言提供良好的现成基础支持. 阿拉伯语.亚美尼亚语,巴 ...