视频数据有极强的相关性,帧与帧之间有大量冗余信息,压缩的本质就是去除这些冗余信息。
压缩的方向:

空间冗余,视频的背景和整体颜色相近并且平稳变化,可以利用帧内编码进行压缩;(无损)
时间冗余,两个视频帧之间具有强相关性,利用运动估计和运动补偿进行帧间压缩;(无损)
运动补偿:通过先前的局部图像来预测,补偿当前的局部图像;
运动表示:不同区域的图像需要使用不同的运动矢量来描述运动信息;
运动估计:从视频序列中抽取运动信息的一整套技术。
结构冗余,图像内部存在相似性,通过这种关系可以进行分形编码;
编码冗余,出现概率大的颜色编码长度短,概率小的颜色编码长度长;(可变长度编码)
视觉冗余,利用人眼对亮度和色度的敏感度不同,在编码时进行数据压缩;(有损压缩)
GOP概念:它代表两个I帧之间形成的一组连续的图像帧。
通常在编码器设置参数时,必须会设置一个gop_size的值,其实就是代表2个I帧之间的帧数目。在一个GOP组中容量最大的就是I帧,所以相对而言,gop_size设置的越大,整个视频画面质量就会越好。但是解码端必须从接受的第一个I帧开始才可以正确解码出原始图像,否则无法正确解码。
IPB帧:
简略:
I帧是关键帧,解码时只需要本帧数据;
P帧是参考帧,表示这一帧与前一个关键帧(或P帧)的差别;
B帧是双向参考帧,表示本帧与前后帧的差别;(B帧压缩率高,解码复杂,直播中较少用)
IDR帧是第一个I帧,为的是和其他I帧区别开,方便控制编码和解码;
编码角度来理解IPB:
I帧通过视频压缩算法解压成一张单独的完整视频画面,I帧去掉的是视频帧在空间维度上的冗余信息;
P帧需要参考其前面的一个I帧或者P帧来解码成一张完整的视频画面;
B帧需要参考其前一个I帧或者P帧,以及后面的一个P帧来生成一张完整的视频画面,所以P帧和B帧去掉的是视频帧在时间维度上的冗余信息。
DTS:Decode Timestamp 解码时间戳。用于解码阶段进行视频的同步和输出。
PTS:Presentation Timestamp 显示时间戳
硬编码:使用GPU计算,性能高 VideoToolBox、AudioToolBox。但是特性支持有限,而且压缩率一般偏低
软编码:使用CPU来进行编码计算,实现简单直接,升级容易,但是CPU负载重。压缩率比较高,而且支持的H264特性也会比硬编码多很多,相对来说比较可控。

视频:使用ffmpeg,x264算法吧视频原始数据YUV/RGB编码成H264

音频:使用fdk_aac将音频数据PCM转换成AAC。

在优势方面,软件编码兼容性好,能解码所有的视频格式文件,画质清晰、画面精致,速度较快。而硬件编码的优势在于它的编码速度非常快且效率极高,由于GPU承担起了编码的重担,因此硬编码对CPU的占用率低,就算长时间高清录制视频手机也不会发烫降频。
在劣势方面,软件编码的CPU占用率高,一些性能比较差的手机可能会因CPU发热而降频、卡顿,无法流畅录制、播放视频,同时使用软件编码的方式可能会让软件包体变大,手机内存占用率变高。而硬件编码的确定就更明显,在某些智能手机上,由于机型区别,采取硬件编码的方式可能会出现兼容性上的问题,还有硬件编码画面不够精细的问题一直都很难解决。

作者:哈库呐玛塔塔__
链接:https://www.jianshu.com/p/3a7fbaf64a7a
来源:简书

视频编码(压缩)方式/编码(压缩)原理/概念 (转)作者:哈库呐玛塔塔__相关推荐

  1. 【hive】如何设置hive以及MapReduce的压缩方式?

    一.MapReduce的压缩方式的介绍 压缩compress:目的是为了压缩map输出的 结果数据,减少网络IO和磁盘IO流 常见的压缩算法:Snappy.Lz4,Lzo 配置压缩:MapReduce ...

  2. RLE压缩传输编码原理

    from:http://data.biancheng.net/view/152.html RLE压缩算法(下简称RLE算法)的基本思路是把数据按照线性序列分成两种情况:一种是连续的重复数据块,另一种是 ...

  3. 【音视频零基础入门 1】视频播放器原理、流媒体协议、封装格式、视频编码、音频编码

    [音视频零基础入门 1]视频播放器原理.流媒体协议.封装格式.视频编码 一.视频播放器原理 1.1 解协议 1.2 解封装 1.3 解码 1.4 视音频同步 二.流媒体协议 三.封装格式 四.封装格式 ...

  4. 视频千倍压缩背后的技术原理之环路滤波

    随着5G的成熟和广泛商用,带宽越来越高,让传输视频变得更加容易.移动设备算力的提升.存储容量的提升,也使得视频技术的应用越来越广泛.视频相关的技术,特别是视频压缩技术,因其专业性,深入开发的门槛较高, ...

  5. 什么是码率控制? 在视频编码中,码率控制的概念是什么,它是通过什么实现的?

    码率控制实际上是一种编码的优化算法,它用于实现对视频流码流大小的控制.那么它控制的目的是什么呢? 我们可以试想一下,同样的视频编码格式,码流大,它包含的信息也就越多,那么对应的图像也就越清晰,反之亦然 ...

  6. 基于哈夫曼编码对文件进行压缩和解压缩(详细讲解)

    基于哈夫曼编码对文件进行压缩和解压缩(详细讲解) 本文对应c++代码实现链接 一.背景 利用特定的算法来压缩数据的工具,压缩后生成的文件称为压缩包.如果想使用其中的数据,就得用压缩软件对数据进行解压. ...

  7. 哈夫曼编码及文本文件的压缩解压(c++SourceCode)

    哈夫曼编码是一种编码方式,是可变字长编码(VLC)的一种.以哈夫曼树-即最优二叉树,带权路径长度最小的二叉树,经常应用于数据 压缩. 在计算机信息处理中,"哈夫曼编码"是一种一致性 ...

  8. 哈夫曼编码实现文件的压缩和解压

    哈夫曼编码的概念 哈夫曼编码是基于哈夫曼树实现的一种文件压缩方式. 哈夫曼树:一种带权路径最短的最优二叉树,每个叶子结点都有它的权值,离根节点越近,权值越小(根节点权值为0,往下随深度增加依次加一), ...

  9. hbase实战 与mysql_HBase实战系列1—压缩与编码技术

    1.hbase压缩与编码的配置 安装LZO 解决方案: 1)apt-get install liblzo2-dev 2)hadoop-gpl-compression-0.2.0-dev.jar 放入c ...

最新文章

  1. 连载《一个程序猿的生命周期》-《发展篇》 - 5.奶奶终于“自杀”了
  2. Windows API 的数据类型与 Delphi 数据类型对照表
  3. c语言实现灰度图像阈值分割,灰度图像--图像分割 阈值处理之平均阈值
  4. prop attr 到底哪里不一样?
  5. php 5.6 文档,文件存储 | 进阶系列 | Laravel 5.6 中文文档
  6. 深入浅出 - 公钥、私钥和数字签名最通俗的理解
  7. nodejs与sqlite
  8. VB模拟按键终极教程
  9. 前端跨域解决方案总结
  10. 【设计模式】05模板方法模式学习笔记
  11. Ubuntu内核版本降级
  12. Android-使用SimpleAdapter创建ListView
  13. 快速开发分享功能,一键分享到微博、微信等平台。
  14. 【软件定义汽车】【中间件】iceoryx冰羚
  15. 超融合服务器连接虚拟机,H3C UIS 6.5超融合产品新增虚拟机配置指导-5W100
  16. FMS Dev Guide学习笔记(验证客户端)
  17. SpringMVC 13. RESTful CRUD
  18. 质量保障与管理——各大厂质量保障实践分享汇总
  19. 15 - 单星(*) 和双星(**) 运算符的作用
  20. 一流管理者,必须具备的4项关键能力

热门文章

  1. Linux gcc 升级后没用
  2. python地图标点_如何用python画地图上的标注线?
  3. Godex条码打印机(EZ-PL打印语言)集成开发小结
  4. C++ miniblink mb开源浏览器框架
  5. 双指缩放canvas图片_移动端 图片手势控制 双指缩放 单指移动
  6. 暗访升级版”票贩子:一个月至少赚几十万
  7. 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试六十题
  8. 小米智能家庭接入亚马逊Echo
  9. Kindle剩余空间变少
  10. 【通俗向】非参数检验(一)游程检验(Runs test)