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

 

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

FFmpeg的可支持两个AAC-LC编码器(AAC&libfdk_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 1 -an / dev / null && \
ffmpeg -i input.mp4 -c:v libx264 -b:v 933k -preset:v veryfast -pass 2 \
-ac 2 -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 3 output.m4a

仅转换视频的音频:

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

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

ffmpeg -i input.mp4 -c:v libx264 -crf 22 -preset:v veryfast \
-ac 2 -c:a libfdk_aac -vbr 3 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。

时间: 2024-09-20 18:40:02

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

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

源码地址:https://github.com/Tinywan/PHP_Experience 总结: 说明: 测试环境:本测试全部来自阿里云直播和OSS存储点播以及本地服务器直播和点播 播放器:VideoJs 直播: 1.阿里云直播,需要CDN设置HTTP头 2.本地直播需要设置直播访问服务器的头部信息(本地为Nginx) add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-C

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

参照网址: [1]http://blog.csdn.net/redstarofsleep/article/details/45092147 [2]HLS介绍:http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html 上面这两个流的地址分别是: 第一个就是推送的地址: RTMP推流地址: rtmp://serverIp:1935/myapp/test1 第二个是HTTP地址:  HLS推流地址: http://serverIp

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

 FFmpeg 3.3"Hilbert",一个新的主要版本的一些亮点: 苹果Pixlet解码器 NewTek SpeedHQ解码器 QDMC音频解码器 PSD(Photoshop Document)解码器 FM屏幕捕获解码器 ScreenPressor解码器 XPM解码器 DNxHR解码器修复了HQX和高分辨率视频 ClearVideo解码器(部分) 16.8和24.0浮点PCM解码器 英特尔QSV加速VP8视频解码 本机Opus编码器 DNxHR 444和HQX编码 (M)JPEG编

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

FFmpeg推送视频流,Nginx RTMP模块转发,VLC播放器播放,实现整个RTMP直播 查看本机电脑的设备 ffmpeg -list_devices true -f dshow -i dummy 红色标记表示视频设备和麦克风设备 看到乱码了吧!来这里查看哦   FFmpeg编码推送到RTMP服务器 ffmpeg -f dshow -i video="Lenovo EasyCamera":audio="麦克风 (Realtek High Definition Audio)

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

H.264有四种画质级别,分别是baseline, extended, main, high: 1.Baseline Profile:基本画质.支持I/P 帧,只支持无交错(Progressive)和CAVLC: 2.Extended profile:进阶画质.支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC:(用的少) 3.Main profile:主流画质.提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced), 也支持CAV

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

一.下载地址: 网址:https://ffmpeg.org/ 选择Windows版本:https://ffmpeg.org/download.html#build-windows 二.解压安装: 下载并解压FFmpeg文件夹,它会生成一个类似名为"ffmpeg-20150504-git-eb9fb50-win32-static"的新文件夹:   打开你想安装的任意磁盘,例如:d盘.新建一个名为"ffmpeg"的文件夹,将第二步解压生成的文件夹中的内容全部拷贝到&qu

流媒体技术学习笔记之(十五)FFmpeg编码遇到的错误、警告、Debug记录

When encoding H.264 using ffmpeg I get the following type of warnings en masse:  Past duration 0.606377 too large ? FFMpeg版本在2015年1月15日后经常显示此警告. 它已被添加以警告可能的速率控制失真,否则不会造成任何危害.      real-time buffer 98% full! frame dropped? ffmpeg -re -rtbufsize 1000M

流媒体技术学习笔记之(十)HLS协议直播延时优化(35s到10S)

1.首先要了解HLS延时的机制,也就是为什么会延时,延时主要发生在什么地方. HTTP Live Streaming 并不是一个真正实时的流媒体系统,这是因为对应于媒体分段的大小和持续时间有一定潜在的时间延时.在客户端,至少在一个分段媒体文件被完全下载后才能够开始播放,而通常要求下载完两个媒体文件之后才开始播放以保证不同分段音视频之间的无缝连接.此外,在客户端开始下载之前,必须等待服务器端的编码器和流分割器至少生成一个TS文件,这也会带来潜在的时延.服务器软件将接收到的流每缓存一定时间后包装为一

流媒体技术学习笔记之(十二)Linux(Ubuntu)环境运行EasyDarwin

 Debug问题??? ./easydarwin -c ./easydarwin.xml & //这样的话是80端口 ./easydarwin -c ./easydarwin.xml -d //8088端口   以上出现的问题:在调试模式下加载配置文件是可以的,但是在后台模式下配置文件是加载不了的,列如:在配置文件配置后台管理端口为8088,当时在后台模式下,却是80端口,同时点播文件夹路径和日志文件夹路径也加载的不适 解决办法:在后台运行的时候配置文件必须是绝对路径哦!不是相对路径 root@