研究音视频的数字化技术之前,必须对声音和图像的的物理性质有基本的了解。音视频技术的本质就是声音和图像信息的采集、存储和回放。学习音视频的数字化技术,不能上来就去编解码,这样有点本末倒置。

通过阅读本文,你将会回顾中学关于光学和声学部分知识,并了解音视频技术中的一些关键概念

声音的物理特性

声音的本质是波:

物体通过振动,对空气(传播介质)产生挤压,使空气有节奏的振动并产生疏密变化,从而形成疏密相间的纵波。

声音的三要素

1、频率

频率决定音调的高低
频率与波长成反比,频率越低,波长越长。低频波传递距离较长(可对比,寺庙的钟声和轮船的鸣笛)。

2、 振幅

振幅决定音量
音量是能量大小的表现,通常用分贝来表示音量大小,超过一定分贝的声音对人体是有害的。

3.、波形

波形决定音色
不同的声源,在同等频率,同等振幅的情况下,声波的形状是不同的,从而发出的声音也是有差异的。

声音的数字化

数字化音频技术,就是声音的采集、存储和回放。

1、采样

  1. 采样就是在时间轴上数字化声音信号。
  2. 为了提高采样质量,根据采样定理,需要按比声音最高频率高2倍以上的频率对声音进行采样。人耳能听到的声音频率范围20Hz~20KHz,所有典型的采样率为44.1kHz(表示一秒钟采集44100次数据)。

2、量化

量化就是每个具体采样点的声音在振幅轴上的数字化表示。

3、编码

通常所说的音频裸数据就是PCM(Pulse Codec Modulation脉冲编码调制)

PCM

PCM数据涉及四个概念:
1、sampleFormat(采样格式):可理解为一多少字节存储声音,典型的量化格式为16bit。
2、sampleRate(采样率):这就不用说了吧,典型的采样率为44.1KHz。
3、channel(声道数):为了造成立体声效果,数字声音分为左、右两个声道。
4、比特率:对于数字音频而言,比特率是个关键概念。定义为:一秒时间内的比特数,用于衡量单位时间音频数据量的大小。

编码的必要性

我们来计算一下一分钟未经编码的数据占有多少字节:
以CD音质为例:

CD 音质参数:
采样格式(sampleFormat)为16byte(2字节)
采样率(sampleRate)为44.1KHz
声道数(channel) 为2
所以,一分钟的数据大小为:

44100 * 16 * 2 * 60 / 8 / 1024 = 10.09 MB

也许按照现在的存储技术,这个大小勉强能够接受,倒是如果要实时传输的话,那就太勉强了。所以必须对数据进行编码。

编码原理及其它

编码,也称为压缩编码。它的实质是通过特殊的算法压缩掉冗余信号。

冗余信号: 指不能被人耳感知的信号。

压缩比: 是压缩编码的基本标准之一,小于1。压缩又分为有损压缩,和无损压缩。常用压缩格式中,常用有损压缩。压缩比越小,丢失信息越多,丢失的信息不可恢复。

常见的压缩算法

1、WAV编码

  • WAV编码有多种实现方式,其中一种实现是:在PCM数据格式前加上44字节,用于表示PCM的采样率、声道数、数据格式等。也就是,并不会对PCM数据进行压缩(所有实现都不压缩)。
  • 特点:音质好
  • 场合:用于多媒体开发的中间件、或音效素材。

2、MP3编码

  • 同样MP3也有多种编码实现,其中LAME编码中的高码率文件,音效非常接近WAV。
  • 特点:码率128Kbit/s以上的音频上压缩比较高,兼容性好。
  • 场合:高比特率下,对兼容性有要求的音乐

3、AAC编码

  • 有损压缩技术,通过附加编码技术,有三种主要的版本:

    1. LC-AAC: 应用于中高码率场景(>= 80Kbit/s)
    2. HE-AAC: 应用于中低码率场景(<= 80Kbit/s)
    3. HE-AAC v2: 应用于低码率场景(<=48Kbit/s)
  • 特点:在小于128Kbit/s码率下表现优异,常用于视频中的音频编码。
  • 场景:128Kbit/s下的音频编码,用于视频中的音频编码

4、Ogg编码

  • 一种非常好的编码,在各种码率下表现都十分优异,特别是低码率下。
  • 特点:可以用比MP3更小的码率实现比它更好的音质,中高码率编码表现也毫不逊色。但兼容性不好,不支持流媒体特性
  • 场景:语音聊天

图像的物理特性

白色光能被分解为多种色光,实验证明,红绿蓝三种色光无法分解,这就是我们说的三原色。

另外,物体之所以能在我们的眼中呈像,是因为物体反射的光,进入了眼睛。但在视频技术中,却稍有不同。

因为手机或者电脑屏幕都是自发光原,并不需要反射光。

一块分辨率为1280 * 720的屏幕,水平方向有1280个像素点,竖直方向有720个像素点。每个像素点由三个子像素组成(有条件可以通过显微镜观察),分别表示RGB。屏幕显示图片时,将每一个像素点的RGB通道分别对应屏幕的子像素点,从而显示出照片。

视频的数字化

图像的数字表示方式一: RGB

不管是通过常识,还是通过阅读本文,相信你已经知道任何图像都可以由RGB组成。
每个像素点的子像素有两种表示:

  • 浮点表示:取值范围为0.0 ~ 1.0,常见于OpenGL中的子像素表示。
  • 整数表示:取之范围为0 ~ 255或者00 ~ FF,8个bit表示一个子像素。常见的格式有RGBA-8888、Android平台上的RGB-565

对于一般图像,通常使用整数表示。如计算一张分辨率为1280 * 720,格式为RGBA-8888的图像大小:
1280 * 720 * 4 = 3.516MB

RGBA-8888格式:一个字节表示透明度三个字节表示RGB分量。

以上计算出的大小,就是位图(bitmap)在内存中占据的大小。因为数据量较大,不利于网络传输。所以就有了各种压缩格式。

图像的数字表示方式二:YUV

对于视频而言,它的裸数据更多的使用YUV格式表示。和RGB比较,最大的优点在于占用较少的频宽(RGB要求三个独立的视频数据分量同时传输),另外YUV可以很好的向黑白电视兼容。
其中:

  • Y :(拉丁文Luminance或Luma)表示亮度分量,通常称为亮度分量或者灰度。
  • U和V : 表示色度(Chrominance或Chroma),作用是描述色彩和饱和度,用于指定颜色。

Y亮度分量的建立,是通过叠加RGB输入信号的特定部分完成。
U和V色度分量,定义了色调和饱和度两方面,分别用CrCb表示。Cr反映RGB输入信号红色部分和亮度值之间的差异。Cb则反映RGB输入信号蓝色部分和亮度值之间的差异。

YUV格式表示的数据,Y分量和UV是分离的。只有Y分量的数据,表现出来就是黑白视频,这正是YUV格式能兼容黑白电视的原因。

YUV 常用的格式是4 :2 :0(关于YUV格式的种类和计算方式,以后单独开篇讲解)。
Y、U、V都是使用8个bit表示。

视频编码方式

和音频数据相似,视频的编码也是通过去除冗余数据实现。不同数据在于,视频数据在时间和空间上有较强的相关性。所以这些冗余信息包括时间冗余空间冗余

帧间编码

帧内编码用于去除时间冗余。关于帧间编码技术实现细节,可以先熟悉一下概念,暂时不用了解细节,这将在以后介绍。

帧间编码技术,是去除时间冗余的方式,包括以下方面:
* 运动补偿: 通过之前的图像来预测、补偿当前图像,是减少帧序列冗余信息的有效方法。
* 运动表示: 不同区域的图像需要使用不同的运动适量来描述运动信息。
* 运动估计: 是一中从视频序列中抽取运动信息的一整套技术。

帧内编码

帧内编码用于去除空间冗余。关于帧内编码技术实现细节,可以先熟悉一下概念,暂时不用了解细节,这将在以后介绍。

帧内编码编码标准有很多,且都需要大量篇幅介绍,这里只作大致介绍。一类是MPEG,主要包括四个版本:1、Mpeg1(用于VCD)。2、Mpeg2(用于DVD)。3、Mpeg4(现在流行的流媒体)。第二类是H.26*系列,包括H264

编码中的重要概念

  1. IPB帧

    1. I帧帧内编码帧(intra picture),通常是每个GOP(MPEG使用的一种视频压缩技术)的第一帧,经过适当的压缩,作为随机访问的参考点,可以当作静态图像。I帧可以得到6:1的压缩比,而不造成图像模糊,可以去除空间冗余。I帧可理解为一张独立完整的视频画面,只是进行了空间冗余的压缩而已。
    2. P帧前向预测帧(predictive-frame),通过图像序列中,前面已编码帧的时间冗余信息的去除来压缩数据量的编码图像,也称为预测帧P帧可理解为需要前一个I帧P帧来解码才能得到一张完成视频画面。
    3. B帧双向预测内插编码帧(bi-directional interpolated prediction frame), 即考虑图像序列前已编码帧,也参照图像序列后已编码帧的时间冗余信息,来压缩数据量,也称为双向预测帧B帧可理解为需要曹考前一个I帧P帧,以及后一个P帧生成一张完整的视频画面。
    4. IDR帧:(instantaneous decoding refresh picture),在H264编码中出现的概念,类似I帧,区别在于:H264采用多帧预测,I帧之后的P帧可能参考I帧之前的帧才能解析完整图像,所以在随机访问中,就不能以I帧作为参考条件。而IDR帧就是一种特殊的I帧,这一帧后的所有帧只会参考它,而不会参考前面的帧。在编码器中,一旦接收到一个IDR帧,就会立即清理参考帧缓冲区,并将这个IDR帧作为参考帧使用。
  2. PTS和DTS
    PTS英文全称为Presentation Time Stamp,DTS英文全称为Decoding Time Stamp,都是时间戳的概念。
    简单起见,先来介绍一下FFmpeg中关于这两者的概念。FFmpeg使用AVPacket表示解码前或编码后的压缩数据,用AVFrame表示解码后或编码前的原始数据。对于视频而言,AVFrame就是以帧图像,至于什么时候显示给用户,取决于它的PTSDTSAVPacket的一个成员,表示该压缩包需要什么时候被解码,如果视频中的各帧是按顺序输入,那么解码时间和显示时间一致,但实际上大多数解码标准,编码顺序和输入顺序并不一致,于是就出现了两种不同的时间戳。
  3. GOP
    英文全称为Group Of Picture,意思是,两个I帧之间形成的一组图片。通常在为解码器设置参数时,需要指定gop_size的值,因为I帧的压缩率是最低的,对一个视频源而言,gop_size越大,相对来说I帧就越少,节约出来的空间就可以保存更多的I帧,所以画质就会越好。所以,应该根据业务场景,选择适当的gop_size值,从而提高视频质量。

    常见的压缩率:
    I帧: 7
    P帧: 20
    B帧: 50

MUX和DEMUX

mux的全称是multiplex,译为多路传输。在音视频中,其实就是混流。意思是将多路流包括音频、视频流混合/封装到一个流文件中。

demux自然就是相反的意思,表示分流,意思是将经过混流后的流文件拆分开来,方便后续处理。

muxerdemuxer,则可以分别表示为混流器分流器

muxingdemuxing加上ing后缀,表示动作,可以分别理解为混流操作分流操作

编解码后的音频、视频、字幕等流文件通过混流器封装(打包)到一个文件中,同时作为数据传输,传输完毕后,又通过分流器对数据进行解封(拆包),将音频、视频、字幕等数据分流出来,进一步处理。

结语

如有任何有描述不清,或者有误之处,欢迎流言交流。更音视频相关内容将持续更新,敬请期待。

音视频开发第一篇——音视频基础概念。相关推荐

  1. 两轮平衡车开发第一篇之姿态基础

    一.基本认识:扫盲 1.1几个角:偏航角.横滚角.俯仰角. (1)偏航角:个人理解就以飞机的坐标为例,假如我是在朝某一个方向飞行,方向比较正,比如正东方,这是我要超东南方向飞行,飞机调整机头转向,正东 ...

  2. 音视频开发进阶指南--音视频概念基础

    音视频开发进阶指南--音视频概念基础 音频概念基础: 采样.量化和编码: 首先要对模拟信号进行采样,所谓采样就是在时间轴上对信号进行数字化.根据奈奎斯特定理(也称为采样定理),按比声音最高频率高2倍以 ...

  3. 【Android音视频开发】- 实时采集视频

    前言 通过我的上一篇文章,可以知道直播大致有几个步骤:音视频采集 -> 美颜/滤镜/特效处理 -> 编码 -> 封包 -> 推流 -> 分发 -> 解码/渲染/播放 ...

  4. B站黑马测试第一篇P182视频数据库SQL语句查询数据准备代码

    drop table if exists goods; create table goods(id int unsigned primary key auto_increment,goodsName ...

  5. 视频相关的理论知识与基础概念

    本文将视频相关的理论知识与基础概念划分为 11 个知识点,如下: 视频 分辨率 比特率 采样率 帧率 视频编码 编码标准 视频封装格式 视频解码 视频播放原理 视频与流媒体 1.视频 根据人眼视觉暂留 ...

  6. 大数据技术原理与应用 第一篇 大数据基础

    目录 第一章 大数据概述 一. 大数据时代 1.1 三次信息化浪潮 1.2 信息科技发展 1.3 数据产生方式的变革 1.4 大数据的影响 二. 大数据的概念 2.1 大数据的特征 2.2 大数据关键 ...

  7. 《Ansible权威指南 》一 第一篇 Part 1 基础入门篇

    本节书摘来自华章出版社<Ansible权威指南 >一书中的第1章,第1.1节,李松涛 魏 巍 甘 捷 著更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 ...

  8. 语音技术(百度语音)开发 - 第一篇

    语音技术(百度语音)开发 - 第一篇 AI接入指南 短语音识别标准版.查看文档 短语音识别API文档 .调用流程.speech 参数填写.参数说明.等等 官方demo地址 创建应用.百度云平台 网上案 ...

  9. OS开发UI篇—核心动画(基础动画)

    文顶顶 最新博文发布地址:花田半亩(wendingding.com) iOS开发UI篇-核心动画(基础动画) iOS开发UI篇-核心动画(基础动画) 一.简单介绍 CAPropertyAnimatio ...

最新文章

  1. Oracle RAC CSS 超时计算 及 参数 misscount, Disktimeout 说明
  2. Python3 爬虫学习笔记 C13【验证码对抗系列 — 滑动验证码】
  3. abb限位开关已打开drv1_Telemecanique传感器限位开关产品系列
  4. c语言大作业 模拟泊松分布,C语言下泊松分布以及指数分布随机数生成器实现
  5. HNU 实验五松雅的旅馆
  6. Entrust是一种为Laravel5添加基于角色的权限的简洁而灵活的方法。
  7. 网上购物与开店赢家随身查
  8. 两种分布式锁实现方案(一)
  9. Gulp学习笔记(黑马教程)
  10. 水系图一般在哪里找得到_真空排水系统在综合管廊工程中的应用探讨
  11. 最简单的 Django 教程
  12. android仿今日头条App、多种漂亮加载效果、选择器汇总、记事本App、Kotlin开发等源码
  13. 微软反linux广告图片,一张地铁站“前程无忧广告”的图片引发网友热议 官方:虚假图片...
  14. 2021 TWeb 腾讯前端技术大会精彩回顾(附PPT)
  15. 黑崎一护为什么没有和朽木露琪亚在一起
  16. 人机交互-6-评估之用户测试
  17. 51SCM_AD模块CS5550学习心得
  18. java-net-php-python-16jspm望奎县城郊所考勤系统计算机毕业设计程序
  19. 天地图key申请_关于天地图官网资源的一些记录
  20. IDEA2018.1.4 破解教程

热门文章

  1. Maven-核心概念2
  2. python定义列表和数组
  3. Android ProgressDialog
  4. 一文搞懂字符和字节的含义
  5. Python signal 信号处理模块
  6. 【Python】1039 到底买不买 (20 分)
  7. Vue项目中使用和清除定时器
  8. ElasticSearch相关知识点
  9. 【无标题】22222
  10. PHPExecl获取最大列数(数字),不是列名