FFmpeg入门 – 前置基础

章节

  • 像素存储格式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 啊。