音视频基础详细笔记(一)——音频编码原理

本文介绍了音频编码的基本原理,重点讨论了音频压缩去除冗余信息的方法,以及AAC和OPUS编码器在ffmpeg中的使用,包括参数设置和编码过程。
摘要由CSDN通过智能技术生成

文章主要介绍音频编码原理相关内容,分享自己学习中记录的笔记,学习资料为李超老师的《音视频小白系统入门课》。

一、音频压缩

音频压缩主要包括两种:

  • 消除冗余信息
  • 无损压缩

1.1音频冗余信息

音频压缩技术是在保证信号在听觉方面不产生失真的前提下,对音频数据信号进行尽可能大的压缩。
压缩的主要方法是去除采集到的音频冗余信息。所谓冗余信息包括人耳听觉范围外的音频引号以及被掩蔽掉的音频信号。
信号的遮蔽可以分为频域遮蔽时域遮蔽
在这里插入图片描述


时域遮蔽,声强高的声音会压着声强低的声音;

总结

低于20hz,高于2whz的声音被屏蔽掉;

同时说话时的声音,声音越高会压着声音低;

频率相近,声音越高会压着声音低;

不同频域,相互影响较小。

1.2 无损编码:

常遇到的3种熵编码

  • 哈夫曼编码
  • 算数编码
  • 香农编码

1

二、音频编码过程

在这里插入图片描述
编码流程

采集到声音,给时域转频域,分成多个频域,拆除需要的和不需要的数据。心理声学模型去除超出范围的声音(20~2whz)、复杂声音中被遮蔽的声音,之后将需要的数据进行合并,用熵编码等量化编码,形成比特流格式化数据。

常见音视频编解码

常见的音视频编码器包括OPUS、AAC、Ogg、Speex、iLBC、AMR、G.711等。

其中,AAC在直播系统中应用的比较广泛;OPUS是较新的音编码器,WebRTC默认使用OPUS;固话一般用的G.711系列

网上评测结果:OPUS>AAC>Ogg

在这里插入图片描述

OPUS和AAC是两种常见的音频编解码器。它们的特点如下:

1.OPUS编解码器:

  • 延迟小 - 压缩率高 - 广泛应用于实时通讯的相关应用,如在线教育、音视频会议等 - 在不同的质量情况下,可以有不同的码流,适应范围广

2.AAC编解码器:

  • 音质保真性好 - 压缩率优于MP3 - 应用广泛,用于取代MP3 - 属于全带音频,码流范围在32k以上到128k之间 - 常见于iOS、安卓系统和嵌入式设备中

在这里插入图片描述

2.1 AAC编码器

AAC(Advanced Audio Coding)是一种高级音频编码格式,是MPEG-2和MPEG-4标准中的一部分。AAC编码器采用了一系列高级音频处理技术,能够在相对较低的比特率下提供高质量的音频。

AAC编码器以其高压缩效率、广泛支持、多通道支持和低功耗等特点,成为了音频编码领域的主流标准,被广泛应用于各种音频传输、存储和播放场景。

常用的规格有AAC-LC、AAC-HE 、AAC-HE v2。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1) ADTS格式

ADTS结构

ADTS由7/9个字节组成
在这里插入图片描述

各个位:

A 12 3个F,标志头。

B 1 MPEG规范

C总是0

D1——no CRC、0——CRC

E对应Audio Object Types
在这里插入图片描述
编码时需减1。
在这里插入图片描述ADTS格式网址:ADTS

三、ffmpeg进行aac和opus编码

3.1 aac编码

ffmpeg -i xxx.mp4 

​			  -vn -c:a libfdk_aac

​			  -ar 44100 -channels 2 -profile:a aac_he_v2 3.aac

ffmpeg -i 输入多媒体文件
-vn (vidio no)
-c:a(制定音频编码器) libfdk_aac(目前性能最好的aac)
-ar(音频采样率) -channels(通道数) -profile(对编码器设置参数):a(指定对音频设置)acc_he_v2(3中格式之一) 3.aac(输出音频文件名字)
进入到ffmpeg

进行aac编码
ffmpeg -i xxx.mp4 -vn -c_a libfdk_aac -ar 44100 -channels 2 -profile:a aac_he_v2 3.aac
播放
ffplay 3.aac

aac各参数详细参考资料:
http://ffmpeg.org/ffmpeg-codecs.html#libfdk_005faac
libdk - AAC库基于来自Android项目的Fraunhofer FDK AAC代码,在配置过程中需要libfdk-aac头文件和库。需要使用——enable-libfdk-aac显式配置构建。
该库与GPL不兼容,所以如果使用GPL,应该配置 --enable-gpl --enable-nonfree --enable-libfdk-aac

常用参数选项:
b —— 设置比特率,单位为bits/s。如果没有显式指定比特率,则根据所选配置文件将其自动设置为合适的值。
ar——设置音频采样率(Hz)
channels——设置音频通道的数量
flags +qscale——启用固定质量,VBR(可变比特率)模式。请注意,当VBR值为正值时,VBR是隐式启用的。
profile——设置配置文件,以下为认可的配置文件:

  • aac_low:低复杂度AAC (LC)
  • aac_he:高效AAC (HE-AAC)
  • aac_he_v2:高效AAC版本2 (HE-AACv2)
  • aac_ld:低延迟AAC (LD)
  • aac_eld:增强低延迟AAC (ELD)

如果未指定,则设置为’ aac_low '。

vbr——设置VBR模式,取值范围为1 ~ 5。

1是最低质量(尽管仍然很好),5是最高质量。0表示关闭VBR,使能CBR (Constant Bit Rate)。

目前只有’ aac_low '配置文件支持VBR编码。
VBR模式1-5大致对应以下平均比特率:

  • 1:32 kbps/channel
  • 2:40 kbps/channel
  • 3:48-56 kbps/channel
  • 4:64 kbps/channel
  • 5:about 80-96 kbps/channel
  • Default value is 0.

使用ffmpeg将音频文件转换为M4A (MP4)容器中的VBR AAC:

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

使用ffmpeg将音频文件转换为CBR 64k kbps AAC,使用高效率AAC配置文件:

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

3.2 opus编码

ffmpeg -i xxx.mp4 -vn -c_a libopus 1.opus
ffplay 1.opus

就两个参数:
-b 设置码流
-opus_delay:设置延迟

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君莫笑lucky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值