最近一直在看雷霄骅 FFmpeg 系列视频,然后将自己的理解总结一下。

参看:《基于 FFmpeg + SDL 的视频播放器的制作》课程的视频

一、视频播放器原理

自己理解:

比如一个 MP4 文件,它是有音频、有视频两部分封装的。PCM 音频采样数据和 YUV 视频像素数据,通过音视频编码 Encode,生成AAC和H.264文件,最后封装成 MP4 文件。

然后,我想起我使用 PR 剪辑视频时,其实就是这个过程,将音视频合成MP4文件的。

二、常用播放器

     

VLC、CyberLink PowerDVD 14、完美风暴

下载:VLC media player 下载

下载:powerDVD 14 破解 安装 方法 下载 地址 免费

下载:完美解码V20170702官方版

三、信息查看工具

(1)综合信息查看:MediaInfo


可选择以什么形式查看,比如我们以文本形式查看:


任意4个文件的总体信息

(2)二进制信息查看

下载:UltraEdit

(3)单项详细分析

封装格式: Elecard Format Analyzer


MKV、 MP4、 AVI封装格式信息



视频编码数据: Elecard Stream Eye


H.264码流分析信息

               红色的帧: I帧;蓝色的帧: P帧;绿色的帧: B帧。

视频像素数据: YUV Player


YUV视频像素数据
 

音频采样数据: Adobe Audition


PCM音频采样数据 

四、封装格式

(1)封装格式的作用

视频码流和音频码流按照一定的格式存储在一个文件中。

(2)格式类型



五、视频编码数据

(1)视频编码的作用

将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。

(2)视频编码类型

六、音频编码数据

(1)音频编码的作用

将音频采样数据(PCM 等)压缩成为音频码流,从而降低音频的数据量。

(2)音频编码类型

七、视频像素数据

(1)视频像素数据作用

保存了屏幕上每个像素点的像素值。

(2)格式

常见的像素数据格式有 RGB24,RGB32,YUV420P,YUV422P,YUV444P 等。压缩编码中一般使用的是 YUV 格式的像素数据,最为常见的格式为 YUV420P。

(3)特点

视频像素数据体积很大,一般情况下 1 小时高清视频的 RGB24 格式的数据体积为:

        3600*25*1920*1080*3=559.9GByte
PS:这里假定帧率为25Hz,取样精度8bit。

(4)RGB 格式简介

Red、 Green、 Blue三种颜色,可以混合成世界上所有的颜色。
彩色图像中每个点,由R、 G、 B三个分量组成。
以 RGB24 为例,图像像素数据的存储方式如下:

       

从图中可以看出, RGB24依次存储了每个像素点的R、 G、 B信息。
PS: BMP文件中存储的就是RGB格式的像素数据。

(5)YUV格式简介

相关实验表明,人眼对亮度敏感而对色度不敏感。因而可以将亮度信息和色度信息分离,并对色度信息采用更“狠”一点的压缩方案,从而提高压缩效率。
YUV 格式中, Y 只包含亮度信息,而 UV 只包含色度信息。以 YUV420P 为例,图像像素数据的存储方式如图所示。从图中可以看出, YUV420P 首先存储了整张图像的Y信息,然后存储整张图像的 U 信息,最后存储了整张图像的 V 信息。

8、音频采样数据

(1)音频采样数据作用

保存了音频中每个采样点的值。

(2)特点

音频采样数据体积很大,一般情况下一首4分钟的PCM格式的
歌曲体积为:
        4*60*44100*2*2=42.3MByte
PS:这里假定采样率为44100Hz,采样精度为16bit。

(3)PCM格式简介

单声道的情况下按照顺序存储每个采样点的数据。

双声道的情况下按照“左右、左右”的顺序存储每个采样点两个声道的数据。

最新文章

  1. Mask裁切UI粒子特效或者3D模型
  2. js动态的把左边列表添加到右边,可上下移动。
  3. java中InvocationHandler 用于实现代理。
  4. Junit使用
  5. 跳转至指定ViewController
  6. c# 验证码类
  7. 斌哥的 Docker 进阶指南
  8. jQuery分别获取选中的复选框值
  9. QuickXdev+sublime text打造quick-cocos2d-x开发环境
  10. Hibernate中Criteria的用法
  11. Linux curses库使用
  12. Jsp传递参数的方法
  13. C#中文件管理的运用(Twelfth Day)
  14. 巡逻机器人(BFS)
  15. 认识bash这个shell
  16. 在windows下安装pip scrapy...
  17. 1574: [Usaco2009 Jan]地震损坏Damage
  18. 关于p-Laplace的想法
  19. C#分割字符串并统计重复出现的次数
  20. Spring中的@Async

热门文章

  1. SHELL —— BASH环境
  2. Django框架之ORM(数据库)操作
  3. SSIS利用Microsoft Connector for Oracle by Attunity组件进行ETL!
  4. PAT 天梯赛 L1-007. 念数字 【水】
  5. CodeForces - 220B Little Elephant and Array (莫队+离散化 / 离线树状数组)
  6. dogo 官方翻译 Ajax with dojo/request
  7. 把Arch Linux安装到U盘上的具体教程
  8. Spring_使用 JdbcTemplate和JdbcDaoSupport-代码
  9. python标准库学习-ftplib
  10. Oozie java.io.IOException: output.properties data exceeds its limit [2048]