音视频相关技术基础知识总结

2022-03-24 08:55:23 浏览数 (1)

前阵子写了很多笔记,由于忙于研究生课程学习,故很少有时间整理笔记分享到公众号上,今天整理的笔记是我之前学习音视频技术相关的笔记整理。
1、视频
1.1、视频帧

帧,是视频的一个基本概念,表示一张画面,一个视频就是由许许多多的帧组成的。

1.2、帧率

即单位内帧的数量,单位为:帧/秒 或 fps(frames per second),一秒内包含多少张图片,图片越多,画面越顺滑,过渡越自然。

常见的帧率典型值:

(1)24/25 fps:1秒24/25帧,一般的电影频率。

(2)30/60 fps:1秒30/60帧,游戏的频率,30帧可以接受,60帧会感觉更加流畅逼真

(3)85fps:这个帧率及以上人眼基本无法察觉出来,更高的帧率在视频里没有太大意义。

2、色彩空间
2.1、RGB

通过R、G、B三种基础色,可以混合出所有的颜色

2.2、YUV

也叫,YCbCr,是一种亮度与色度分离的色彩格式

(1)Y:亮度,就是灰度值,出了表示亮度信号外,还含有较多的绿色通道量

(2)U:蓝色通道与亮度的差值

(3)V:红色通道与亮度的差值

优势:

人眼对亮度敏感,对色度不敏感,因此减少部分UV的数据量,人眼却无法感知出来,这样可以通过压缩UV分辨率,在不影响感观的前提下,减少视频的体积。

2.3、RGBYUV的换算

(1)RGBYUV算法

Y = 0.299R 0.587G 0.114B

U = -0.147R - 0.289G 0.436B

V = 0.635R - 0.515G - 0.100B

(2)YUVRGB算法

R = Y 1.14V

G = Y - 0.39U - 0.58V

B = Y 2.03U

3、音频
3.1、基本知识

人类能够听到的所有声音都称之为音频,在计算机中,音频只是存储在计算机里的声音。

PCM:音频数据的承载方式最常用的是脉冲编码调制

在自然界中,声音是连续不断的,是一种模拟信号,那怎样才能把声音保存下来呢?就是将这些模拟信号数字化,即模数转换,将模拟信号转换为数字信号。

声音是一种波,由自己的振幅和频率,那么要保存声音,就要保存声音在各个时间点上的振幅。而数字信号并不能连续保存所有时间点的振幅。

奈奎斯特采样定理:为了不失真地恢复模拟信号,采样频率应该不小于模拟信号频率中最高频率的2倍。

3.2、采样率和采样位数

(1)采样率

根据奈奎斯特采样定理,人耳能听到的最高频率为20KHz,所以为了满足人耳的听觉要求,采样率至少为40KHz,通常为44.1KHz,更高的通常为48KHz

注意:人耳听觉频率范围[20Hz,20KHz]

(2)采样位数

波形振幅在模拟信号上也是连续的样本值,而在数字信号中,信号一般是不连续的,所以模拟信号量化后,只能取一个近似的整数值,为了记录这些振幅值,采样器会采用一个固定的位数来记录这些振幅值,通常有8位、16位、32位。

注意:位数越多,记录的值越准确,还原度越高,但是占用的硬盘空间越大。

位数

最小值

最大值

8

0

255

16

-32768

32767

32

-2147483648

2147483647

3.3、音频编码

由于数字信号是由0、1组成的,因此,需要将幅度值转化为一系列0和1进行存储,也就是编码。

3.4、PCM的采集步骤

模拟信号->采样(奈奎斯特采样定理)->量化->编码->数字信号

3.5、声道数

声道数是指支持能不同发声(注意是不同声音)的音响的个数。

  • 单声道:1个声道
  • 双声道:2个声道
  • 立体声道:默认为2个声道
  • 立体声道(4声道):4个声道
3.6、码率

码率是指一个数据量中每秒钟能通过的信息量,单位bps(bit per second)

码率 = 采样率 * 采样位数 * 声道数

3.7、常见的音频格式

CD格式、WAVE(*.WAV)、AIFFMP3MIDIAACWMAOggVorbis

4、FFmpeg
4.1、FFmpeg是什么?

是一套可以用来记录、转化数字音频、视频、并能将其转化为流的开源计算机程序。它有着非常强大的功能,主要包括:视频采集功能、视频格式转换、视频抓图、给视频加水印等。

4.2、FFmpeg的组成

FFmpeg由三个部分组成:

(1)工具

分别是ffmpegffplayffserverffprobe

ffmpeg:音视频转码、转换器

ffplay:简单的音视频播放器

ffserver:流媒体服务器

ffprobe:简单的多媒体码流分析器

(2)SDK

提供开发者使用的SDK,我们可以根据自己的需求使用这些库开发自己的应用程序,这些库主要有:

libavcodec:包含音视频编码器和解码器

libavutil:包含多媒体应用常用的简化编程的工具,如随机数生成器、数据结构、数学函数等功能

libavformat:包含多种多媒体容器格式的封装、解封装工具

libavfilter:包含多媒体处理常用的滤镜功能

libavdevice:用于音视频数据采集和渲染等功能的设备相关

libswscale:用于图像缩放和色彩空间和像素格式转换功能

libswresample:用于音频量采样和格式转换等功能

libpostproc:用于后期处理,当我们使用filter的时候,需要打开这个模块,filter会用到这个模块里的一些基础函数

(3)源代码

整个工程的源代码,无论是编译出来的可执行程序还是SDK

它的源代码由C语言实现,主要在Linux平台上进行开发。

0 人点赞