FFmpeg入门 – 前置基础
- 2020 年 4 月 8 日
- 笔记
章节
- 像素存储格式YUV&RGB
- 我,B,P帧
- pts&dts
- 音视频开发技术可以做的事情
前言
在学习音视频编程的过程中,在解决问题的过程中,总会遇到音视频当中的一些专业名词,而解决问题,这些专业名词是必须理解的,否则就会出现云里雾里的感觉 – 俗称 – 懵这给我个人的学习过程带来不小的问题,遂决定将这段时间当中遇到的一些必须掌握的名词概念做个记录,以供速查之用。
1,像素存储格式YUV&RGB
RGB
1.RGB 即 三原色,红、绿、蓝。 2.每个元素占用 1 个字节,即 24 bit。
YUV
1.YUV 也是一种像素存储格式,摄影机拍摄的影像文件存储格式即为 YUV,采用 YUV 像素存储格式对帧进行存 储,是为了保证这种文件能在黑白电视上能够播放。
2,I,B,P帧
我帧
I 帧是关键帧采用帧内压缩技术,I帧是全信息帧、一个视频文件当中的I帧越多,则文件体积越大。
B帧
B 帧是前后参考帧,它属由帧间压缩技术。也就是说在压缩成 B帧前,它会参考它前面的非压缩视频帧,和后 面的非压缩的视频帧,记录下前后两帧都不存放的“残差值”,这样可以达到更好的压缩率; 所以加入当前视频帧的编排顺序为 I B B P 则当视频文件播放时,解码的顺序为I->P->B->B 即关键帧I、向前 参考帧 P、向前向后参考帧B、向前向后参考帧B。
P帧
P帧是向前参考帧,也就是它参考的是前一个关键帧的数据。P帧也属于帧间压缩技术,相对于 B帧来说,P帧的压缩率要比B帧低。
3,pts&dts
pts(演示文稿时间戳)
视频渲染用的时pts、即以AVStream 的 AVRational (time_base)为计时单位的时间戳,加入 pts 时100 ,AVStream 的 time_base 为 1/25 (即1s播放帧数为25,FPS为25),则对应到日常时间戳 为 100 * (1/25) = 4s。
dts(解码时间戳)
视频packet 解码为 frame 时的时间戳。之所以需要dts 是因为 视频中除了I 帧还有可能含有 B帧。 DTS主要用于视频的解码,在解码阶段使用.PTS主要用于视频的同步和输出.在display的时候使用.在没有B frame的情况下.DTS和PTS的输出顺序是一样的.
4,音视频开发技术可以做的事情
视频编解码 – 后台
应用在后台的视频编解码技术常用的是 FFmpeg,一款优秀的视频编解码应用技术,属于软件编解码。 rtmp 协议,网络直播推流等。
视频编解码 – 移动终端
如iOS、Android移动端经常用到的音视频编解码sdk ijkplayer,是对ffplay.c的二次封装(ffmpeg)属于硬编硬解技术、因为硬件中内置了编解码芯片。
OPENCV
计算机视觉库、可以做图像识别、当然也可以实现音视频编解码,因为其底层也是调用 FFmpeg
openGL的
图像渲染库,你以为微视、抖音上的小姐姐那么美若天仙的原因是什么?答:是渲染啊!问:靠什么渲染?答:openGL 啊。


