lime2019的小窝

vuePress-theme-reco lime2019    2019 - 2020
lime2019的小窝 lime2019的小窝

Choose mode

  • dark
  • auto
  • light
首页
分类
  • VuePress
  • Shell
  • 前端
  • Node.js
  • JavaScript
  • 专利
  • nodejs
  • R
  • 计算机基础
  • 网络安全
  • OpenCV
  • serverless
  • SDK
  • 前端工程化
  • 网页开发
  • QQ小程序
  • 项目部署
  • MySQL
  • ECS
  • 软件安装
  • Windows开发
  • 开发环境
  • 云开发
  • 腾讯云
标签
构建开发环境
  • 服务器软件安装
  • Windows软件安装
学习
  • QQ小程序开发
  • 腾讯云·Web云开发训练营
  • 腾讯云·微信小程序云开发训练营
项目开发
  • IGEM Wiki项目开发
  • 大创项目开发
关于我
工具网站
  • 镜像网站

    • 阿里云官方镜像网站
    • 清华大学开源软件镜像站
  • 站长相关

    • 百度统计
  • 实用工具

    • ProcessOn
    • 改图宝
  • 前端设计相关

    • 墨刀
    • Canva
    • 渐变色调色板:CoolHue
时间轴
我的
  • 我的其他博客

    • CSDN
    • 阿里云社区
  • 我的开源项目

    • Gitee
    • GitHub
  • 博客备用站点

    • Gitee Pages备用地址
    • GitHub Pages备用地址
author-avatar

lime2019

44

文章

34

标签

首页
分类
  • VuePress
  • Shell
  • 前端
  • Node.js
  • JavaScript
  • 专利
  • nodejs
  • R
  • 计算机基础
  • 网络安全
  • OpenCV
  • serverless
  • SDK
  • 前端工程化
  • 网页开发
  • QQ小程序
  • 项目部署
  • MySQL
  • ECS
  • 软件安装
  • Windows开发
  • 开发环境
  • 云开发
  • 腾讯云
标签
构建开发环境
  • 服务器软件安装
  • Windows软件安装
学习
  • QQ小程序开发
  • 腾讯云·Web云开发训练营
  • 腾讯云·微信小程序云开发训练营
项目开发
  • IGEM Wiki项目开发
  • 大创项目开发
关于我
工具网站
  • 镜像网站

    • 阿里云官方镜像网站
    • 清华大学开源软件镜像站
  • 站长相关

    • 百度统计
  • 实用工具

    • ProcessOn
    • 改图宝
  • 前端设计相关

    • 墨刀
    • Canva
    • 渐变色调色板:CoolHue
时间轴
我的
  • 我的其他博客

    • CSDN
    • 阿里云社区
  • 我的开源项目

    • Gitee
    • GitHub
  • 博客备用站点

    • Gitee Pages备用地址
    • GitHub Pages备用地址

视频的编码与压缩

vuePress-theme-reco lime2019    2019 - 2020

视频的编码与压缩

lime2019 2020-10-18 声网SDKWeb

视频压缩:网络传输中为什么需要压缩视频?
主讲人:张哲源(声网Agora 音视频开发工程师)

# 视频需要压缩的原因

最常见的一个像素由8bit大小构成。

一张1920×1080分辨率的高清图片,其大小=1920×1080×8×3=47MB;

而通常视频帧率为30FPS,因此带宽要求约为1.4GB,当前网络情况远远不能满足,因此必须进行视频压缩编码。

当前视频传输流程:

  • 采集
  • 预处理
  • 编码
  • 传输
  • 解码
  • 图像处理
  • 显示

# 视频编码的输入

日常会接触到图片是RGB格式,也就是红绿蓝三原色不同比例构成不同的颜色,YUV其实就是RGB的转换。

YUV是由一个亮度分量(Y)和两个色度分量(UV)构成的。

RGB与YUV的转换公式:

# 视频编码的输出

两种应用:

  • 实时传输
    • 直播平台;
    • 在线播放;
    • 微信实时通话;
  • 本地视频的播放
    • 视频编码器保存到本地的是以h.256为后缀的文件,和音频编码器的本地输出一起封装变成MP4等格式。

# 视频编码

# 帧类型分析

对输入进来的YUV的每一个帧确定一个类型:

  • 共分为I、P、B这三种类型;
  • I帧不会依赖其他帧的信息,也就是自我进行参考的帧;
  • P和B帧:都是会依赖其他帧信息来完成自身预测的帧,区别在于显示序列中P帧是前向参考,B帧是前后双向参考。

理想状态下,一个视频流,从一个帧开始后面轻微运动都是P/B,直到遇到场景切换就再插一个I,如此往复。

一般来说,P/B参考范围不会越过帧。但也有特例,我们可以强行指定P/B参考不允许越过帧,这样的帧我们叫它IDR帧,每个IDR帧的间隔称作一个GOP。

# 帧内/帧间预测

预测原理:

  • 大量统计表明:源YUV中两个相邻像素值相等、相似或者缓变概率极大,发生突变的几率是极小。

帧内预测:

  • 垂直预测模式,属于帧内预测模式的一种。与它相似的,还有水平预测模式、均值预测模式(也就是4×4的均值填充整个4×4)等。
  • 码流中传输帧內预测模式标志位、残差即可

帧间预测:

  • 以当前块空域相邻的位置,在时域参考帧上的同为块,作为起始点进行规则搜索;
  • 直到搜索完找到能够节省码流最大的块作为帧间预测块,当前块到预测块的位移称为运动矢量;
  • 码流中传输运动矢量、帧间预测模式标志位、残差即可;

宏块概念:

  • 264中把16×16大小的块称作宏块,做帧内/帧间预测的时候可以分成8x8、4×4这样的子块,都是要把它们最能节省码流的预测模式都算岀来,然后比较岀最优秀的划分模式进行传输。

# 变换量化

变换意义:

  • 大量统计表明,把经过预测后得到的残差经过DCT空频变换;
  • 直流和低频(相对平坦,图像或块中大部分占比)能量集中在左上;
  • 高频(细节,图像或块中少部分占比)能量集中在右下;
  • DCT本身没有压缩作用,但为以后压缩时的取舍,奠定了必不可少的基础。

量化:

  • 由于人眼对高频信号不敏感,可以定义这样一个变量QP=5,将变换块中所有的值都除以QP,将QP运算的过程称为量化;
  • 这样做进一步节省传输码流位宽,同时主要去掉了高频分量的值,在解码端只需要将变换块中所有的值在乘QP就可以基本还原低频分量。

量化所带来的副作用:

  • 量化值越大,丢掉的高频信息就越多,再加上编码器中都是用整形变量代表像素值,所以量化值最大还原的低频信息也会越不准确,即造成的失真就越大,块效应也会越大,视频编码的质量损失主要来源于此。

# 滤波

初步估算块效应边界强度

  • 4:边界两边块是帧内预测且块边缘是所在宏块边缘
  • 3:边界两边块是帧内预测且块边缘
  • 2:边界两边块的残差变换系数包含非零系数
  • 1:边界两边块的残差变换系数不包含非零系数,且两块的参考帧或运动向量不同
  • 0:边界两边块的残差变换系数不包含非零系数,且两块的参考帧或运动向量相同

# 整体流程