一.视频压缩

1.1 为什么需要压缩视频?

假设一个2小时未压缩的高清视频,1920×1080p的电影,我们来计算一下他的存储容量。先介绍一下帧率(frame rate或者是 FPS)概念,也就是每秒传输图片的帧数,也可以理解为图形处理器每秒能够刷新几次。由于人眼的特性-视觉暂留,帧率要在20以上才会感觉流畅。之前的电影帧率一般是24。拓展:为什么游戏帧数要60才流畅,而电影只需要24
2小时×60分钟×60秒×25 帧率×1920×1080 像素 ×3/2 每像素字节数 = 5599GB
一部高清电影占了这么大空间,不能忍。
所以,为了存储和传输方便,压缩视频,必不可少。

1.2 如何压缩视频?

接下来回答怎么进行视频压缩。
介绍最基本的概念:
信息压缩是通过去除资料中的冗余信息而达成。就视频而言,冗余信息可以分成四类:

  • 时间上的冗余信息(temporal redundancy)
    在视频中,相邻的帧(frame)与帧之间通常有很强的关连性,这样的关连性即为时间上的冗余信息。这即是上一次学习中的帧间压缩。连续的图像往往非常相近,由于一些小运动造成了细小差别。这种减小冗余的方法可以存储和上一帧或者下一帧不同的地方。这样就可以减少存储了。这个过程就称作运动补偿。位移是利用运动向量得出的。

  • 空间上的冗余信息(spatial redundancy)
    在同一张帧之中,相邻的像素之间通常有很强的关连性,这样的关连性即为空间上的冗余信息。这即是上一次学习中的帧内压缩。比如一个像素点是绿色,那它相邻的像素点可能就是深绿或者浅绿,甚至就是绿。

  • 统计上的冗余信息(statistical redundancy)
    统计上的冗余信息指的是欲编码的符号(symbol)机率分布是不均匀(non-uniform)的。

  • 感知上的冗余信息(perceptual redundancy)
    感知上的冗余信息是指在人在观看视频时,人眼无法察觉的信息。

视频压缩(Video compression)是指运用压缩技术将数位视频中的冗余信息去除,降低表示原始视频所需的存储量,以便视频资料的传输与储存。实际上,原始视频资料的容量往往过大,例如未经压缩的电视品质视频的位元率高达216Mbps,绝大多数的应用无法处理如此庞大的容量,因此视频压缩是必要的。目前最新的视频编码标准为ITU-T视讯编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)所提出的H.264/AVC。

一个典型的视频编码器:在进行当前信号编码时,编码器首先会产生对当前信号做预测的信号,称作预测信号(predicted signal),预测的方式可以是时间上的预测(interprediction),亦即使用先前帧的信号做预测,或是空间上的预测 (intra prediction),亦即使用同一张帧之中相邻像素的信号做预测。得到预测信号后,编码器会将当前信号与预测信号相减得到残余信号(residual signal),并只对残余信号进行编码,如此一来,可以去除一部份时间上或是空间上的冗余信息。接着,编码器并不会直接对残余信号进行编码,而是先将残余信号经过变换(通常为离散余弦变换)然后量化以进一步去除空间上和感知上的冗余信息。量化后得到的量化系数会再透过熵编码,去除统计上的冗余信息。

二.h264编码标准的提出

H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称。

在编码方面,我理解的他的理论依据是:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内。所以对于一段变化不大图像画面,我们可以先编码出一个完整的图像帧A,随后的B帧就不编码全部图像,只写入与A帧的差别,这样B帧的大小就只有完整帧的1/10或更小!B帧之后的C帧如果变化不大,我们可以继续以参考B的方式编码C帧,这样循环下去。这段图像我们称为一个序列(序列就是有相同特点的一段数据),当某个图像与之前的图像变化很大,无法参考前面的帧来生成,那我们就结束上一个序列,开始下一段序列,也就是对这个图像生成一个完整帧A1,随后的图像就参考A1生成,只写入与A1的差别内容。

在H264协议里定义了三种帧,完整编码的叫做I帧,参考之前的I帧生成的只包含差异部分编码的帧叫P帧,还有一种参考前后的帧编码的帧叫B帧
H264采用的核心算法是帧内压缩和帧间压缩,帧内压缩是生成I帧的算法,帧间压缩是生成B帧和P帧的算法。

参考链接:

1. 视频压缩基本概念

视频压缩和H264的更多相关文章

  1. 利用FFmpge进行视频压缩(从图像到H264视频流)

    对于FFmpeg相信做视频或图像处理这一块的都不会陌生,在网上也能找到非常多相关的代码.但因为版本号不同等原因.往往找到的代码都是须要自行改动才干够用,为此本人希望能尽绵薄之力,将开发包和自行编写的代 ...

  2. Intel Media SDK H264 encoder GOP setting

    1 I帧,P帧,B帧,IDR帧,NAL单元 I frame:帧内编码帧,又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随 ...

  3. 解密H264、AAC硬件解码的关键扩展数据处理

    通过上一篇文章,我们用ffmpeg分离出一个多媒体容器中的音视频数据,但是很可能这些数据是不能被正确解码的.为什么呢?因为在解码这些数据之前,需要对解码器做一些配置,典型的就是目前流行的高清编码“黄金 ...

  4. H264解码学习-2015.04.16

    今天看了不少,却感觉收获寥寥. 1.H264相关知识 因为RTP协议发过来的数据已经经过了H264编码,所以这边需要解码.补充一下H264的相关知识. 与以往的视频压缩标准相比,H.264 视频压缩标 ...

  5. 标清与高清,720p和1080p,720i和720p,h264与h265

    480x320, 640x480 标清 1024x720p 高清 1920x1080i (隔行扫描) 也属于高清 1920x1080p 全高清 3840x2160,7680x4320 超(高)清   ...

  6. Android IOS WebRTC 音视频开发总结(七一)-- H265/H264有何不同

    本文整理自自网络,非原创,喜欢相关文章请关注我们的微信公众号:blackerteam H.265 H.265是ITU-TVCEG继H.264之后所制定的新的视频编码标准.H.265标准围绕着现有的视频 ...

  7. H264相关知识

    1.基本概念 I frame :帧内编码帧 又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象 ...

  8. 【转载】视频编码(H264概述)

    一视频编码介绍 1.1 视频压缩编码的目标 1)保证压缩比例 2)保证恢复的质量 3)易实现,低成本,可靠性 1.2 压缩的出发点(可行性) 1)时间相关性 在一组视频序列中,相邻相邻两帧只有极少的不 ...

  9. H264 编码详解

    H264 编码详解(收集转载) (1)       x264_param_default( x264_param_t *param ) 作用: 对编码器进行参数设定 cqm:量化表相关信息 csp: ...

随机推荐

  1. 021 使用join()将数组转变为字符串

    1.定义用用法 join() 方法用于把数组中的所有元素放入一个字符串. 元素是通过指定的分隔符进行分隔的. 语法 arrayObject.join(separator) 返回值 返回一个字符串.该字 ...

  2. work工作消息队列Round-robin与Fair dispatch

    一:介绍 1.模型 有两种情形,分别是轮训分发与公平分发. 2.出现的场景 考虑到simple queue中的缺点. 因为生产者发送消息后,消费者消费要花费时间,这个会造成消息的堆积. 二:Round ...

  3. PyQt5初级教程(一)

    python 版qt入门级使用说明 我使用的是python3.5安装PyQt5: pip3 install PyQt5 可以用如下代码测试环境是否安装成功,运行成功会弹出一个窗口: from PyQt ...

  4. ettercap+arpspoof进行HTTP信息嗅探

    准备:kali.xp kali ip:192.168.14.157 目标ip:192.168.14.158 目标网关:192.168.14.2 使用工具:ettercap.arpspoof 一.工具介 ...

  5. Python3 图像边界识别

    # -*- coding: utf-8 -*- """ Created on Wed Mar 7 11:04:15 2018 @author: markli " ...

  6. SQL EXCEPT INTERSECT

    EXCEPT是指在第一个集合中存在,但是不存在于第二个集合中的数据. INTERSECT是指在两个集合中都存在的数据. )) go )) go insert into t1 ,'t1' union a ...

  7. Html5 postMessage实现跨域消息传递

    一.同源策略 要理解跨域,我们首先要知道什么是同源策略.百度百科上这样定义同源策略:同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略, ...

  8. php插入上万条mysql数据最快的方法

    1.使用thinkphp框架 先生成包含所有数据的数组,再使用 addAll() 方法,插入1万条数据仅需3秒钟. 2.PHP原始方法: 将SQL语句进行拼接,使用 insert into table ...

  9. 异构无线网络之QOS简介

    QoS(Quality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力, 是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术. 在正常 ...

  10. 51Nod1577 异或凑数 线性基 构造

    国际惯例的题面:异或凑出一个数,显然是线性基了.显然我们能把区间[l,r]的数全都扔进一个线性基,然后试着插入w,如果能插入,则说明w不能被这些数线性表出,那么就要输出"NO"了. ...