ac3编码器ffmpeg本身带有,不需要第三方库。
以下结论均是实测得到。
ac3对于ffmpeg多声道中的宏,如下宏不支持:
not sport:AV_CH_LAYOUT_7POINT1_WIDE_BACK AV_CH_LAYOUT_7POINT1 AV_CH_LAYOUT_7POINT1_WIDE AV_CH_LAYOUT_OCTAGONAL AV_CH_LAYOUT_HEXADECAGONAL AV_CH_LAYOUT_STEREO_DOWNMIX
可以看出8声道的宏全不支持。
七声道的宏也全不支持:
AV_CH_LAYOUT_6POINT1
AV_CH_LAYOUT_6POINT1_BACK
AV_CH_LAYOUT_6POINT1_FRONT
AV_CH_LAYOUT_7POINT0
AV_CH_LAYOUT_7POINT0_FRONT
6声道的宏如下:
not sport:AV_CH_LAYOUT_6POINT0 AV_CH_LAYOUT_6POINT0_FRONT AV_CH_LAYOUT_HEXAGONAL
sport:AV_CH_LAYOUT_5POINT1_BACK AV_CH_LAYOUT_5POINT1 再试试其他六个声道的。
AV_CH_LAYOUT_5POINT1_BACK时,用ac3编码,第三个和第四个声道和其他声道耦合。第五个和第六个也与其他声道耦合。各个声道音频跳动很大。AV_CH_LAYOUT_5POINT1声道全耦合,跳动也很大。
ac3同样不支持以下宏
AV_MATRIX_ENCODING_DOLBYEX 2个通道
AV_MATRIX_ENCODING_DOLBY 1个通道
AV_MATRIX_ENCODING_DPLII 1个通道
AV_MATRIX_ENCODING_DOLBYHEADPHONE 2个通道
AV_CH_LAYOUT_NATIVE 1个通道,它的意思是指指定解码器输出的信道顺序为本机编码器信道顺序。
ac3支持下面宏
AV_MATRIX_ENCODING_NONE
AV_MATRIX_ENCODING_DPLIIX 2个通道
AV_MATRIX_ENCODING_DPLIIZ 1个通道
AV_MATRIX_ENCODING_NB 3个通道
ac3编码后的音频格式为fltp。
ac3不支持的音频格式:
AV_SAMPLE_FMT_S32
AV_SAMPLE_FMT_FLT
AV_SAMPLE_FMT_S16
AV_SAMPLE_FMT_DBL
AV_SAMPLE_FMT_U8
AV_SAMPLE_FMT_NONE
AV_SAMPLE_FMT_U8P
AV_SAMPLE_FMT_S16P
AV_SAMPLE_FMT_S32P
AV_SAMPLE_FMT_DBLP
AV_SAMPLE_FMT_S64
AV_SAMPLE_FMT_S64P
AV_SAMPLE_FMT_NB
ac3支持的音频格式:
AV_SAMPLE_FMT_FLTP
eac3支持的宏:
AV_CH_LAYOUT_5POINT1
AV_CH_LAYOUT_5POINT1_BACK
eac3不支持的:
AV_CH_LAYOUT_6POINT0
AV_CH_LAYOUT_6POINT0_FRONT
AV_CH_LAYOUT_HEXAGONAL
AV_CH_LAYOUT_6POINT1
AV_CH_LAYOUT_6POINT1_BACK
AV_CH_LAYOUT_6POINT1_FRONT
AV_CH_LAYOUT_7POINT0
AV_CH_LAYOUT_7POINT0_FRONT
AV_CH_LAYOUT_7POINT1
AV_CH_LAYOUT_7POINT1_WIDE
AV_CH_LAYOUT_7POINT1_WIDE_BACK
AV_CH_LAYOUT_OCTAGONAL
AV_CH_LAYOUT_HEXADECAGONAL
AV_CH_LAYOUT_STEREO_DOWNMIX
对于6-8声道的布局aac支持情况如下
aac不支持的宏:
AV_CH_LAYOUT_5POINT1
AV_CH_LAYOUT_6POINT0
AV_CH_LAYOUT_6POINT0_FRONT
AV_CH_LAYOUT_HEXAGONAL
AV_CH_LAYOUT_6POINT1
AV_CH_LAYOUT_6POINT1_BACK
AV_CH_LAYOUT_6POINT1_FRONT
AV_CH_LAYOUT_7POINT0
AV_CH_LAYOUT_7POINT0_FRONT
AV_CH_LAYOUT_7POINT1_WIDE
AV_CH_LAYOUT_HEXADECAGONAL
AV_CH_LAYOUT_STEREO_DOWNMIX
aac支持的宏:
AV_CH_LAYOUT_5POINT1_BACK //解码后音柱不正常。
AV_CH_LAYOUT_7POINT1
AV_CH_LAYOUT_7POINT1_WIDE_BACK //解码后音柱正常
这些宏定义转换成二进制数后,有几个1就代表有几个通道。
多的通道由低的通道布局组成,如AV_CH_LAYOUT_STEREO就是由AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT通道组成,这里不仅是组成关系,还有通道的顺序,第一个通道就是AV_CH_FRONT_LEFT,第二个通道就是AV_CH_FRONT_RIGHT。
第四个无法显示的声道是AV_CH_BACK_LEFT
根据音频格式宏,得出占几个字节。
av_get_bytes_per_sample(AV_SAMPLE_FMT_S16)=2,av_get_bytes_per_sample(AV_SAMPLEAV_SAMPLE_FMT_S32)=4
返回值是一个单通道在一个通道布局中的第几个声道,注意第一个声道是0,比如AV_CH_FRONT_RIGHT在AV_CH_LAYOUT_STEREO中的声道数是1。
int av_get_channel_layout_channel_index(uint64_t channel_layout,uint64_t channel);
在ffmpeg4.4.1中包含这个宏,它支持22个声道:
AV_CH_LAYOUT_22POINT2
根据通道个数,获得默认的布局。
int64_t av_get_default_channel_layout(int nb_channels)
根据通道布局获得对应的通道数
int av_get_channel_layout_nb_channels(uint64_t channel_layout)
DTS:即数字影院系统(Digital Theater Systems),是一种多声道的编码格式,但它的编码码率很高,为768-1536kbps,听觉效果优于ac3,但它的压缩比只有3:1。
ac3被广泛用于5.1声道,它的编码码率为384-448Kbps,分为左/右前置,中置/低音,左/右后置环绕。低音声道是120Hz以下。AC-3要求的pcm输入流的采样频率可以为48 kHz、 44.1 kHz、 或 32 kHz 中 的 任何 一种,而且是20bits。压缩比是1:9~10。AC3在ffmpeg中支持的音频格式宏只有AV_SAMPLE_FMT_FLTP,编码后产生的音频格式宏也是AV_SAMPLE_FMT_FLTP。ac3编码,实测每次送进编码器的采样数可以是1536,根据其编码器原理,猜测只支持这个采样数,未实证考究。
ac3的一帧包含有6个blocks,以及一个header。header中包含ac3的类型,采样率信息,帧长,输入通道数等。
像MP3、AAC一样,AC3利用声音的掩蔽特性,使用改进的离散余弦变换(MDCT)进行压缩。
E-AC-3支持多达15个全带宽音频通道,最大比特率为6.144Mb/s。音频声道:1.0到15.1(即从单声道到15个全音域通道和一个低频声道)
Dolby Surround 7.1 格式包括8个通道,并按以下通道布局:Left(左),Centre(中),Right(右),Low-Frequency Effects (LFE)(低频效果),Left Surround(左环绕),Right Surround(右环绕),Back Surround Left (new)(后左环绕(新的)) 和 Back Surround Right (new)(后右环绕(新的))
普通声道向ac3编码声道映射表