1 视频产生

视频本质就是一组连续播放的图像,所以研究视频离不开对于图像的研究。而图像又是由众多的色彩构成,这里就会涉及到图像的最小单元一个像素点的构成,像素点一般是由RGB三种颜色组成。

1.1 RGB图像

RGBA8888:一般一个像素点由RGB三原色组成,A表示图像的透明度,而每一个色彩又由一个八位组成取值范围0-255;一个像素总共是32bit。
RGB565:在安卓平台上采用16bit表示一个像素,R用5bit,G用6bit,B用5bit来表示。

计算一幅图1920*1080的RBGA8888图像大小:
1920 * 1080 * (32 /8)=7.91M
可以看出一张原始数据的图片大小是感觉还好。如果按照每秒30张图片的速度播放一个小时的数据量高达:834G的数据量。

1.2 YUV图像

对于视频帧而言比较常用的存储方式是采用YUV,其中Y表示亮度(专业术语灰阶值),UV则是速度,用于描述图像的色彩和饱和度。它的一个好处是可以将图像的亮度和色度分离,可以兼容黑白电视,可以单独显示色度图像。

YUV420:YUV420其中数值表示的是亮度和色度的比例为2:1需要注意的是1是UV共用的,YUV实际一比例是:4:1:1。

重新计算一张1080p图像:
1920 * 1080 * 1.5= 3.037M
可以看出YUV存储视频帧的优势还是比较明显,特别对于视频传输降低带宽占用非常明显。

2 视频处理流程

1.1 视频输入

视频输入一般是指我们从摄像头获取到采集的图像数据。一般分为两种情况:
输入到显示设备:采集设备直接渲染到显示设备
网络输入:一般分为几个步骤:

1.2 视频输出

视频输出模块主动从内存相应位置读取视频和图形数据。一般也分为两种情况:
输出到显示设备:通过相应的显示设备输出视频和图形。
输出到网络:一般分为几个步骤

1.3 视频处理

视频处理:一般是对图像进行处理包括是满足带宽要求处理:帧率控制(FRC)、图像压缩等等;提高图像质量处理:去噪(DNR)、畸变校正(LDC)、鱼眼矫正等等;图像变化:裁剪(CROP)、锐化(Sharpen)、缩放(Scale)、镜像(Mirror)、马赛克(Mosaic)、旋转(Spin)等等。

1.4 视频编码

视频编码主要是对于视频进行数据量的压缩,目标是是去除图像的冗余数据保证图像质量。目前比较常见的有两种:
去除时间上的冗余
运动补偿:利用前后图像的局部信息预测当前的图像;
去除空间上的冗余
帧内编码技术:利用图像内部信息进行编码去重和预测减少单帧的数据量的技术。

1.4.1编码流程

典型的编码流程包括了输入图像的接收、图像内容的遮挡和覆盖、图像的编码、以及码流的输出等过程。

1.4.2 编码通道

编码通道作为基本容器,保存编码通道的多种用户设置和管理编码通道的多种内部资源。编码通道完成图像转化为码流的功能,具体由码率控制器和编码器协同完成。这里的编码器指的是狭义上的编码器,只完成编码功能。码率控制器提供了对编码参数的控制和调整,从而对输出码率进行控制。

1.5码率控制

码率控制器实现对编码码率进行控制。从信息学的角度分析,图像的压缩比越低,压缩图像的质量越高;图像压缩比例越高,压缩图像的质量越低。对于场景变化的真实场景,图像质量稳定,编码码率会波动;编码码率稳定,图像质量会波动。

1.5.1 固定比特率CBR

在码率统计时间内保证编码码率平稳。码率稳定主要由两个量来评估。
码率统计时间越长,每帧图像的码率波动对于码率调节的影响越弱,码率的调节会更缓慢,图像质量的波动会更轻微;码率统计时间越短,每帧图像的码率波动对于码率调节的影响越强,图像码率的调节会更灵敏,图像质量的波动会更剧烈。
行级码率控制调节幅度是一帧内行级调节的最大范围,其中行级以宏块行为单位。调节幅度越大,允许行级调整的 QP 范围越大,码率越平稳。对于图像复杂度分布不均匀的场景,行级码率控制调节幅度设置过大会带来图像质量不均匀。

1.5.2 可变比特率VBR

允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳。

1.5.3 自适应可变比特率AVBR

允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳。码率控制内部会检测当前场景的运动静止状态,在运动时用较高码率编码,在静止时主动降低目标码率。

1.5.4 质量可变比特率QVBR

基于主观图像质量的可变比特率,该码控调节方式是利用实时统计的 PSNR(图像质量客观评价指标)的大小来动态调整码率,从而保证编码图像质量平稳。在 PSNR 较小时主动升高目标码率,PSNR 较大时主动降低目标码率。

1.5.5 限制可变比特率CVBR

以 VBR 为基础,旨在提供平稳的图像质量的码控算法,同时对 VBR 的码率进行限制,以满足传输带宽以及存储空间的要求。
CVBR 设置了瞬时,短期与长期码率的限制。其中,瞬时码率的限制保证了网络带宽对传输的要求;长期码率限制保证了在长时间视频录制时,存储设备有足够的空间储存数据;同时,短期码率会根据长期码率的设置和实际使用情况进行调节,以在场景复杂的情况下提供更加平稳的图像质量,并在场景简单时节省码率。

1.5.6 量化参数QP

QP越大压缩率越高同时质量越低,QP越小压缩率越低同时质量越高。

1.6 IPB帧

I帧是关键帧,属于帧内压缩。保存了图像所有信息,可以单独显示。属于帧内编码。
P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。
B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。
GOP表示一个GOP图像组是一段图像编码后的数据流,以I帧开始,到下一个I帧结束。

1.7 Stride跨距

Stride :指在内存中每行像素所占的空间。为了实现内存对齐每行像素在内存中所占的空间并不一定是图像的宽度。
如下图所示比如分辨率638x480的RGB24图像,我们在内存处理的时候如果要以16字节对齐,则638*3/16=119.625不能整除,因此不能16字节对齐,我们需要在每行尾部填充6个字节。

1.8 绿屏的原理

首先需要知道YUV和RGB转换关系:

绿屏主要是因为解码失败YUV分量都为零。
R = 1.402 * (-128) = -126.598
G = -0.34414*(-128) - 0.71414*(-128) = 44.04992 + 91.40992 = 135.45984
B = 1.772 * (-128) = -126.228
RGB 值范围为[0,255], 所以最终的值为:
R = 0
G = 135
B = 0
此时只有G分量有值所以为绿色。

音视频开发-视频基础相关推荐

  1. Android 音视频开发之基础篇 使用 SurfaceView绘制一张图片

    Android 音视频开发 上一篇文章:使用 imageview绘制一张图片 任务一 SurfaceView绘制一张图片 文章目录 Android 音视频开发 前言 一.surfaceview是什么? ...

  2. 音视频开发入门基础知识(视频入门篇)

    RTSP实时音视频开发实战课程:<RTSP实时音视频开发实战> 音视频开发入门基础知识(音频入门篇) 目录 一.前言 二.视频采集和显示 三.视频常见的格式 四.RGB转YUV和YUV转R ...

  3. Android音视频开发---0基础入门准备篇

    文章目录 0,题记 1,学习路线 2,学习目标 任务列表 基础知识 FFmpeg 3,开始音视频开发必备的技能 1,C语言. 2,Linux. 3,基本的Linux编译执行命令,以及vim操作. 4, ...

  4. 音视频开发入门基础知识(音频入门篇)

    RTSP实时音视频开发实战课程:<RTSP实时音视频开发实战> 音视频开发入门基础知识(音频入门篇) 目录 前言 音频的采集和播放 音频常见的格式 音频的编码 前言 在音视频开发入门基础知 ...

  5. [Python MoviePy 音视频开发零基础到实战] 一、用6条代码为你的视频裁剪以及添加水印

    一.MoviePy 安装及配置 在 Python 有一个音视频开发模块 MoviePy,MoviePy 依赖于 FFmepg,使用 MoviePy 可以对音视频进行编辑:例如视频合成.视频处理.视频特 ...

  6. 浅谈音视频开发入门基础及进阶资源分享

    导言:音视频开发涉及的知识面比较广,知识点又相对独立琐碎,入门门槛相对较高.想要对音视频开发具有深入全面的了解,需要在行业深耕多年.本文将简单介绍音视频的采集,编解码,传输,渲染四个技术点并对涉及到的 ...

  7. Android 音视频开发之基础篇 使用 imageview绘制一张图片

    Android 音视频开发 任务一 ImageView 绘制图片 文章目录 Android 音视频开发 任务一 ImageView 绘制图片 前言 一.配置activity_main.xml 二.添加 ...

  8. 【音视频开发】基础知识:视频简介

     在学习了⾳频的相关概念之后,现在开始讨论视频,视频是由⼀幅幅图像组成的,所以要学习视频还得从图像学习开始.  与⾳频的学习⽅法类似,视频的学习依然是从图像的物理现象开始回顾,这⾥需要回顾⼀下⼩学做过 ...

  9. iOS音视频开发——视频采集

    1.认识 AVCapture 系列 AVCapture 系列是 AVFoundation 框架为我们提供的用于管理输入设备.采集.输出.预览等一系列接口,其工作原理如下: \1. AVCaptureD ...

最新文章

  1. 微信小程序使用阿里巴巴iconfont字体图标
  2. 实例解说Linux中fdisk分区使用方法
  3. android图像处理(3)底片效果
  4. 【Python学习系列二十九】scikit-learn库实现天池平台智慧交通预测赛
  5. 无RTOS下使用队列出现的问题记录
  6. 从直觉主义到量化分析 让大数据做主
  7. ZZ flex preloader
  8. ThinkPHP中的快捷函数小结
  9. 已启用 https://chai2010.cn, 欢迎访问!
  10. spring源代码系列(一)sring源代码编译 spring源代码下载 spring源代码阅读
  11. Spark学习笔记(7)---Spark SQL学习笔记
  12. HDU 1158【简单dp】
  13. 基于速度学习机的局部感受野
  14. 深度学习笔记其一:基础知识和PYTORCH
  15. java freemarker转PDF和Word
  16. 中年男人失业,滴滴,外卖,保安三选一,怎么选?
  17. 数字示波器CAN节点标定
  18. linux中病毒排查步骤,linux系统下病毒排除思路
  19. 怎样卸载deepin系统_Deepin深度系统系统卸载教程 - 安装卸载 - Deepin深度系统用户手册...
  20. 骁龙8gen2和天玑9200功耗对比 天玑9200和骁龙8gen2哪个好

热门文章

  1. mac os linux pageup pagedown,[整理]Mac中的类似于Windows中的PageUp和PageDown以及Ctrl+Home和Ctrl+End...
  2. C语言用函数指针实现数组排序
  3. 华虹U盾(红白那种)win7旗舰版64位驱动解决方案
  4. 软件测试--测试用例
  5. 两位数求和(xhh)
  6. 云计算 大数据 人工智能 三者之间关系
  7. Python代码画喜羊羊怎么画_利用Python让你的命令行像蔡徐坤一样会打篮球
  8. 多元函数的泰勒级数展开公式
  9. KVM is required to run this AVD /dev/kvm permission denied Ubuntu Android Studio
  10. 需求评审会如何做才不会沦为形式主义