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个像素点为6字节(4个Y、1个U、1个V),所以每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.4075 * (V-128);
  • G = Y - 0.3455 * (U-128) - 0.7169*(V-128);
  • B = Y + 1.779 * (U-128);

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;

下章学习 9.下载ffmpeg、使QT支持同时编译32位和64位_诺谦的博客-CSDN博客

8.ffmpeg-基础常用知识相关推荐

  1. FFmpeg 基础知识

    第一.FFmpeg 简介和基础知识 1.1 FFmpeg 简介 FFmpeg的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward",FF ...

  2. 网络基础:计算机网络由基础到深入常用知识集锦!

    网络技术的发展给社会带来了诸多益处,随着网络的广泛应用,网络给我们带来便利的同时,网络故障也时有发生.本文探讨了计算机网络中常见的网络问题及计算机网络维护方法,保证计算机网络运行稳定. 在日常使用过程 ...

  3. 电脑计算机网络由基础到深入常用知识集锦!

    网络技术的发展给社会带来了诸多益处,随着网络的广泛应用,网络给我们带来便利的同时,网络故障也时有发生.本文探讨了计算机网络中常见的网络问题及计算机网络维护方法,保证计算机网络运行稳定. 在日常使用过程 ...

  4. 【网络入门】详解常用的基础网络知识(面试笔试常考内容)

    目录 1.概述 2.OSI七层模型和TCP/IP四层模型 3.数据进入TCP/IP协议栈时的封装过程 4.端口的概念 5.TCP建立连接时的三次握手 5.1.TCP头的构成 5.2.三次握手的流程说明 ...

  5. python中pandas格式_Python学习笔记之数据分析中Pandas常用知识

    前言 Pandas基于两种数据类型:series与dataframe. 一个series是一个一维的数据类型,其中每一个元素都有一个标签.series类似于Numpy中元素带标签的数组.其中,标签可以 ...

  6. python基础语法有哪些-Python基础语法知识有哪些?

    相信大家都听过Python除了不会生孩子,基本上无所不能的段子,这一定程度上反映了目前Python编程语言的火爆程度和广泛应用.然而,对于许多零基础的Python学习者来说,常常会遇到无从学起,找不到 ...

  7. 【学习笔记】Python 基础零碎知识

    Python 基础零碎知识 条件表达式 比如上面的if条件判断,我们可以用条件表达式(Conditional Expression)更加简洁的书写. y = math.log(x) if x > ...

  8. 计算机网络常用知识笔记(超全面)!

    网络技术的发展给社会带来了诸多益处,随着网络的广泛应用,网络给我们带来便利的同时,网络故障也时有发生.本文探讨了计算机网络中常见的网络问题及计算机网络维护方法,保证计算机网络运行稳定. 在日常使用过程 ...

  9. 算法设计中的基础常用代码

    引言 本篇博客旨在记录一些基础算法知识的常见组合用法,以及何时使用,需要注意的问题等,长期更新. 为什么要这样总结呢?难道掌握了位运算.常用算法工具API的定义还不够吗? 这是因为某些知识比如 &am ...

  10. 你需要知道的基础算法知识——STL和基础数据结构(六)

    引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...

最新文章

  1. int数组,找小于右边所有数,大于左边所有数的数
  2. Android URL
  3. iOS6和iOS7代码的适配(1)
  4. aqs java 简书,Java并发之AQS原理
  5. Kafka2.0生产者客户端使用
  6. idea 执行 java jar_idea打包java可执行jar包的实现步骤
  7. iphone全部机型_iPhone 上新,首次明确支持中国北斗
  8. 情人节,请带走我给您的祝福
  9. Oracle学习网站总结
  10. gps84转换gcj02公式_WGS84-GCJ-02坐标转化
  11. 实景化数字城市共享信息平台
  12. linux切换到独显,笔记本双显卡如何切换到独立显卡
  13. ios, android平台手机游戏,《王者荣耀》ios和安卓怎么转平台 ios和安卓转平台攻略...
  14. 关于测试思维的个人思考框架
  15. 成功的路上会布满荆棘
  16. 前端工程师必备的 10款开发工具
  17. “玲珑杯”ACM 热身赛 # 2.5 A-B (数论)
  18. Linux Zram配置使用(特定平台个人使用,maybe不具普适性)
  19. Linux:ARM+lUbuntu16.04配置国内镜像源
  20. 医学生的编程学习:R Python— — 前言

热门文章

  1. # dd 制作镜像文件
  2. SpringBoot项目集成字体工具类
  3. python保存图片时和原图大小一致
  4. 二叉树的后序遍历-python
  5. [日推荐]『小易充电』随时随地给电动车充电!
  6. android搭建网络框架,Android 搭建MVP+Retrofit+RxJava网络请求框架(三)
  7. 利用Xapian构建自己的搜索引擎:检索
  8. 手机微信自带的亲属功能,让对方消费由你买单,这种好事必须分享
  9. html5生日福利页面,福利到!HTML5实现动画两种方式
  10. 汽车后市场的得力助手-vin码识别