从零开始的音视频基础

声音

声音是一种压力波,物体的振动带动周围空气的振动,产生疏密相间的空气纵波,传入人耳引起听觉

声波由频率、振幅和相位(波形)组成。

频率决定音高,振幅决定响度,波形(主要部分)决定音色

关于音色比较复杂,可以参考这篇文章 对声音的主观感受:音色 - 知乎

人耳听觉的频率范围是20Hz - 20kHz,但不同频率下,听力的感觉是不同的。下图是等响曲线,表示在各个频率下需要多强的声压才能产生相同强度的听觉

查看源图像

由于声压的绝对数值变化范围太宽,且人耳对声音的感受,和声压的变化不是线性相关的,而是呈对数相关。所以对声压进行对数处理,得到分贝的概念

被测量参考量

一般的声音通过空气作为介质传播,但声音还可以通过固液相的其他物质来传播,不同介质的传播速度也不同,最常见是颅骨传导声音

生活中经常能听到回声,但理论上任何声音的传播都伴随着复杂的回声。人脑的极限是80ms,间隔小于这个阈值的声音传入人耳是无法区分的

声波是含能量的,特定情况下能通过共鸣的方式把能量传递给另一个物体

数字音频

数字化的过程是对声音进行,采样、量化和编码

采样遵循奈奎斯特定理,一般的采样频率是44.1kHz

量化是将声音的幅值切分成若干区间,如用16 bit的数位量化声音,那么一共有65536个区间

编码将采样和量化后的数据组织并存储起来。一般的音频裸数据格式都是脉冲编码调制 PCM,需要三个量来描述这段音频,位深度(如16 bit),采样率(如44.1kHz),声道数(如2声道)

关于声道,可参考 录音时只有一个麦克风,音乐应该大多是单声道的,那为什么我们下载的音乐普遍是双声道呢? - 知乎

假设以上述默认值进行编码一个 60 s 的音频,其占用的存储空间(裸数据)应该是

音频编码

音频的裸数据用于网络传输显然太大,所以有一些压缩编码的方法

压缩分为无损和有损两种。无损指可以通过压缩数据完全复原原始数据,压缩比较低。有损指丢弃一部分不太重要的原始信息,压缩比较高

压缩算法之所以能在丢弃部分数据后保持良好的听觉效果,是因为人耳存在频域掩蔽效应和时域掩蔽效应,即一部分声信号被其余声信号掩盖,人耳天然就听不到

WAV 编码

它是一种没有压缩的编码,仅仅是在 PCM 的基础上加上一些标注信息。它的一种实现是在裸数据前加一个44 字节的文件头,描述位深度、采样率、声道等

这种格式是最通用的,数据也没有任何丢失,几乎所有平台和音视频软件都支持

MP3 编码

应用最广泛的有损压缩之一,它的一种实现是 LAME 编码算法,在中高码率时听感非常接近 WAV。压缩比也较高,兼容性强

AAC 编码

新一代的有损压缩,分为三个子类

LC-AAC 用于中高码率(80Kbit/s以上)

HE-AAC 用于中低码率(80Kbit/s以下)

HE-AAC-V2 用于低码率 (48Kbit/s 以下)

这些编码技术在小于128Kbit/s 的码率下性能比高,常用于视频中的音频轨的编码

Ogg 编码

算法性能极佳,可以用比 MP3 更低的码率实现比 MP3 更好的音质,高中低码率下性能都很好

缺点是兼容性不好,不支持流媒体,目前应用不够广泛

图像

从手机屏幕出发,分辨率位1280 x 720的屏幕,水平方向有 720 个像素点,垂直方向是 1280 个,总计1280 x 720个

每个像素点由3个子像素点构成,分别对应 RGB 三个通道。所以手机屏幕的图像源自自身发光,而生活中的物体颜色源于对自然光的反射

RGB中每个子像素点,一般用0-255的整数表示,即8个bit表示一个子像素。但这不是绝对的,不同的RGB格式可能用不同位数的bit表示像素。比如 RGBA_8888用32个bit表示一个像素

为了节省空间,还有一种像素表示形式是 YUV 格式。它将图像分为亮度和色彩两部分,是视频编码和通信中最常用的格式。其与RGB的转换如下

img

视频编码

类似音频编码中利用人耳的掩蔽效应,视频编码也是利用人眼的一些视觉特性,比如对亮度敏感,对颜色不敏感,对静态事物分辨率高,对动态事物分辨率低,最高分辨率是24Hz,超过之后就形成连续感等等

视频编码分为帧间编码和帧内编码,前者去除时间上的冗余,后者去除空间上的冗余

视频编码格式分很多种,如MPEG1, MPEG2, MPEG4 AVC, H.261, H.262, H.263, H.264, H.265

目前使用最多的是 H.264MPEG4在某种意义上和它是兼容的),相对性能最好,广泛用于普通视频传输和流媒体技术

编码技术中的一些术语:

IPB

I 帧是帧内编码帧,又叫做关键帧。这种帧通常是 GOP的第一个帧,压缩比不是非常高,保留了所有重要信息,作为视频解码的参考帧,在某种意义上可以理解为一幅普通的静态图像。这种帧能去除空间冗余

P 帧是前向预测编码帧,解码时需要依赖视频序列前面已经解码的参考帧,如 I 帧 P 帧。能去除时间冗余

B 帧是双向预测编码帧,解码时需要同时依赖视频序列前后已经解码的参考帧,如 I 帧,P 帧。能去除时间冗余。 P B帧的压缩比通常都很高

事实上,H.264中还有一种 D 帧,用于多帧预测技术,STFW

PTS & DTS

DTS = Decoding Time Stamp,用于解码视频

PTS = Presentation Time Stamp,用于解码的同时同步输出视频

之所以要分成两部分,是因为 I P B帧的解码顺序和应该要显示的顺序是不同的,因为 B 帧的解码需要依赖其后面的 I 或 P 帧

本文虽然内容很简单,但对于初入应用层的业务开发来说已经足够了~(如想了解更多音视频原理部分,请参考本人其余博客 在写了在写了.jpg

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值