1.封装格式
MPEG-4
其中 MPEG-1 和 MPEG-2 是采用相同原理为基础的预测编码、变换编码、 熵编码及运动补偿等第一代数据压缩编码技术;
MPEG-4(ISO/IEC 14496)则是基于第二代压缩编码技术制定的国际标准,它以视听媒体对象为基本单元,采用基于内容的压缩编码,实现数字视音频、图形合成应用及交互式多媒体的集成。 MPEG 系列标准对 VCD、 DVD 等视听消费电子及数字电视和高清晰度电视(DTV&&HDTV)、 多媒体通信等信息产业的发展产生了巨大而深远的影响.
AVI
AVI,音频视频交错(Audio Video Interleaved)的英文缩写。 AVI 格式调用方便、图像质量好,压缩标准可任意选择,是应用最广泛、也是应用时间最长的格式之一。

FLV
FLV 是 FLASH VIDEO 的简称, FLV 流媒体格式是一种新的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入 Flash 后,使导出的 SWF 文件体积庞大,不能在网络上很好的使用等缺点。

2.编码格式
视频部分
h264、wmv、xvid、mjpeg(摄像头出来的每一帧都是mjpeg,缺点在于只有I帧、没有B帧、P帧)
音频部分
acc、MP3、ape、flac

3.文件封装格式和编码格式

音频帧和视频帧的帧率是不一致的,比如音频帧采样率是44.1khz,声音必须的源源不断输出,所以音频帧率可能为22.05帧,每个帧里存了2K采样数据.

视频解码

  • 软件解码:即通过软件让CPU来对视频进行解码处理,缺点耗电发热,优点兼容强
  • 硬件解码:是将原来全部交由CPU(显卡上的一个核心处理芯片,处理计算机中与图形计算有关的工作)来处理的视频数据的部分交由GPU来做,优点不需要太好的CPU,发热低,缺点起步较晚,无法与软解相提并论,兼容性不强.硬解码都是固定帧率.比如只能60帧.

音频解码

  • 将音频码流(aac、ape等)解码成pcm

4.像素格式
压缩编码中一般使用的是RGB24,YUV420 , YUV420P, YUV422P, YUV444P等格式数据,最常见的是YUV420P.
RGB格式
BMP文件存储的就是RGB格式像素数据
yuv格式
    y表示明亮度,而u(Cb 蓝色色差值)和v(Cr 红色色差值)则表示色度值.它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,由于UV色度不是很明显看出,所以除了YUV4:4:4外,又诞生了YUV4:2:2,YUV4:2:0格式.从而占用极少的存储数据.

如下图所示,黑点表示该像素点的Y分量,以空心圆圈表示像素点的UV分量:

  • YUV444:每一个Y对应一组UV分量,单位为字节,所以每个像素点有1个Y字节和1组(2字节,分别是U和V),所以为3字节.
  • YUV422:每两个Y共用一组UV分量,所以每个每个像素点有1个Y字节和1/2组UV(1字节),所以为2字节.
  • YUV420:每四个Y共用一组UV分量,所以4个像素点为5字节,每2个像素点为2.5字节,由于4个像素点是矩形构成的,为了加快换算,所以每2个像素点共用3字节,每个像素点为1.5字节(12bit).

YUV420、YUV420P、YUV420SP区别

  • 对于YUV420格式(packed封装),每个像素点的Y,U,V是连续交*存储的。所以存储数据时,data[0]中就存的是yuvyuvyuv...
  • 对于YUV420P格式(planar平面封装),先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V,比如:YYYYYYYY UU VV,所以Ffmpeg中存储P格式数据时,data[0]数组存y,data[1]数组存u,data[2]数组存v
  • 对于YUV420SP格式(semi Planar半平面封装),先连续存储所有像素点的Y,然后连续存储UV,比如:YYYYYYYY UVUV

5.YUV和RGB转换格式

RGB 转换成 YUV

  • Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
  • Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
  • Cb = U = -( 0.148 * R) - (0.291 * G) + (0.439 * B) + 128

YUV 转换成 RGB

  • B = 1.164(Y - 16) + 2.018(U - 128)
  • G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
  • R = 1.164(Y - 16) + 1.596(V - 128)

RGB取值范围均为0~255,Y=0~255,U=-122~+122,V=-157~+157
以下是经过简化的公式,运算量比上述公式要小一些。
RGB转YUV

  • Y = 0.299R + 0.587G + 0.114B
  • U'= (BY)*0.565
  • V'= (RY)*0.713

YUV转RGB

  • R = Y + 1.403V'
  • G = Y - 0.344U' - 0.714V'
  • B = Y + 1.770U'

PS:除了软解之外,则还可以交给GPU进行硬解.

6.DTS、PTS、GOP

  • dts : 解码时间戳
  • pts : 显示时间戳
  • GOP : 一组完整的IBP帧画面

而dts和pts值是不一定是相等的,如下图GOP(Group of Picture)所示:

从上图,可以看到,DTS和PTS的顺序是不一致的,并且每组GOP中开头都是I帧,然后后面都是B、P帧,如果开头的I帧图像质量比较差时,也会影响到一个GOP中后续B、P帧的图像质量.

  • I帧(intra picture) : 帧内编码帧,它将全帧图像信息进行 JPEG 压缩编码及传输,是一个完整图像
  • B帧(bidirectional) : 双向预测内插编码帧,参考前面和后面两帧的数据加上本帧的变化而得出的本帧数据
  • P帧 : 前向预测编码帧,参考前面而得出的本帧数据.

一般平均来说, I 的压缩率是 7(跟 JPG 差不多), P 是 20, B 可以达到 50.

在ffmpeg中,pts和dts单位都是不确定,如果要换算为时分秒,则需要AVStream的time_base时基来一起换算出当前显示的标准时间
而time_base结构体为AVRational:

所以计算时分秒为:

if (frame->pts != AV_NOPTS_VALUE)
dpts = av_q2d(is->video_st->time_base) * frame->pts;

8.ffmpeg-基础常用知识的更多相关文章

  1. 打造自己的Android常用知识体系

    前言 Android常用知识体系是什么鬼?所谓常用知识体系,就是指对项目中重复使用率较高的功能点进行梳理.注意哦,不是Android知识体系. 古语道:学而不思则罔,思而不学则殆.如果将做项目类比为“ ...

  2. 『Python基础-1 』 编程语言Python的基础背景知识

    #『Python基础-1 』 编程语言Python的基础背景知识 目录: 1.编程语言 1.1 什么是编程语言 1.2 编程语言的种类 1.3 常见的编程语言 1.4 编译型语言和解释型语言的对比 2 ...

  3. 初学Direct X(10)—— D3D基础预备知识

    初学Direct X(10) -- D3D基础预备知识 1. 像素格式 D3DFMT_X8R8G8B8(F) X:未加使用 8:8位用于显示 B:用于显示蓝色 F:浮点像素类型 以下三个较为常用,使用 ...

  4. Python数据分析与挖掘所需的Pandas常用知识

    Python数据分析与挖掘所需的Pandas常用知识 前言Pandas基于两种数据类型:series与dataframe.一个series是一个一维的数据类型,其中每一个元素都有一个标签.series ...

  5. ROS常用知识指南

    前言:介绍一些基础常用的知识. 一.标准单位 二.坐标表现方式 三.默认安装位置 通过apt-get安装的软件包, 默认安装位置为:/opt/ros/kinetic/share 四.软件包安装流程 4 ...

  6. Java基础语法知识你真的都会吗?

    第一阶段 JAVA基础知识 第二章 Java基础语法知识 在我们开始讲解程序之前,命名规范是我们不得不提的一个话题,虽说命名本应该是自由的,但是仍然有一定的"潜规则",通过你对命名 ...

  7. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

  8. 论Linux运维的一些基础安全知识和简单办法

    不知不觉本人来北京也已经第三个年头了,从一个Linux小小鸟,开始,2012年我参加了第一份工作,其实现在想想其实我是幸运的,本来求学的时候,就没好好的学Linux,我认为有Cisco知识从上wind ...

  9. javascript常用知识点集

    javascript常用知识点集 目录结构 一.jquery源码中常见知识点 二.javascript中原型链常见的知识点 三.常用的方法集知识点 一.jquery源码中常见的知识点 1.string ...

  10. python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...

随机推荐

  1. C#设计模式之9-装饰者模式

    装饰者模式(Decorator Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/405 访问. 装饰者模 ...

  2. 精讲RestTemplate第6篇-文件上传下载与大文件流式下载

    本文是精讲RestTemplate第6篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  3. md文件批量转化为html

    任务描述 博客的源文件一般以md文件保存 读取md源文件解析为html代码,然后嵌入到body中去 公式部分,需要使用第三方js库加载 实现办法 基于Django实现,进入webpage页面,然后通过 ...

  4. 性能测试必备知识(10)- Linux 是怎么管理内存的?

    做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 内存映射 日常生活常说的内存是什么 比方说, ...

  5. 【luogu1352】没有上司的舞会 - 树形DP

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  6. 理解正向代理&反向代理

    通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中.由于外部网络上的主机并不会配置并使用这个 ...

  7. IP-master

    http://www.igotaobao.cn/IP-master/

  8. java引用传递还是值传递?

    首先,不要纠结于 Pass By Value 和 Pass By Reference 的字面上的意义,否则很容易陷入所谓的“一切传引用其实本质上是传值”这种并不能解决问题无意义论战中.更何况,要想知道 ...

  9. hbase运行流程图

    hbase运行流程图

  10. ubuntu apt-mirror 同步源到本地

    1.下载 apt-mirror apt-get install apt-mirror 2.修改配置 root@wangjq:/wangjq# cat /etc/apt/mirror.list##### ...