跳转至

视频信息初探

封装格式

format 大箱子,会装好多东西

  • mp4 mov mkv
  • 网络发布选择 mp4

编码格式

编码: coder & decoder

H.264

H.264 = AVC = AVC1 Advance Video Code 目前使用最广的高清视频压缩编码(不考虑H.265),以低码率提供高质量。一般网上下载的视频一般都为H.264编码

H.264是帧间编码(interframe),有三种帧,分别是IPB

  • I帧:解码不依赖其他帧(也就是不参考任何一个帧),存有一个完整的画面信息
  • P帧:向前预测帧,有较高的压缩比,仅记录它所参考的帧的残差,并记录运动矢量(有可能导致错误扩散),解码依赖它所参考的I、P、B帧(当打开B-Pyramid允许B帧作为参考帧时参考B帧)
  • B帧:双向预测帧,一般情况下压缩比最高,在解码时依赖于它所参考的I、P和B帧

H.265

H.265 = HEVC

Apple ProRes

Apple ProRes是帧内编码(intraframe),是全I帧的编码,不存在P、B帧

Apple ProRes是苹果为非线编开发的一种视频编码,有ProRes 4444XQProRes 4444ProRes 422HQProRes 422ProRes422LTProRes422Proxy

(Apple ProRes 4444Apple ProRes 4444 XQ 非常适合动态图形媒体的交换,因为它们几乎是无损的。它们也是仅有的支持 alpha 通道的 Apple ProRes 编解码器。)

  • 4444 对于 1920x1080 和 29.97 fps 的 4:4:4 源,具有大约 330 Mbps 的目标数据速率。它还提供到 RGB 和 Y’CBCR 像素格式的直接编码和解码
  • 422 目标数据速率在 1920x1080 和 29.97 fps 时约为 147 Mbps
  • 422 Proxy Apple ProRes 422 Proxy 是比 Apple ProRes 422 LT 更高度压缩的编解码器,适用于需要低数据速率和全分辨率视频的离线工作流程。目标数据速率在 1920x1080 和 29.97 fps 时约为 45 Mbps。(FCPX做代理剪辑生成的媒体编码就是Apple ProRes 422 Proxy)

(PS.代理:重新编码出一个分辨率更低,帧内编码的视频文件,让你在剪辑的时候更加流畅.剪辑完成之后,可以把代理替换为原素材做进一步的处理)

视频参数

分辨率

1980*1080 视频中一帧(frame)由横纵1920×1080个像素(pixel)构成

帧率

frame-rate,一秒钟内闪过的图像的数量

24000/1001=23.976

视频的帧率是可以是恒定的(cfr, Const Frame-Rate),也可以是变化的(vfr, Variable Frame-Rate)

逐行扫描 p 隔行扫描 i

  • 1080i 60 隔行扫描 每秒60帧的半帧 牺牲画面细节保证画面流畅
  • 1080p 30 逐行扫描 每秒30帧的全帧 细节丰富但画面流畅度低

彩色信号使用的频段可能和声音信号干扰,产生噪音和画面扭曲——把画面的帧率做0.1%的缩减,避免两者之间相互产生干扰. 59.94,29.97

两种标准:NTSC(30Hz,美国,日本,韩国,菲律宾等)拍摄25Hz会发生闪烁,PAL(25Hz,中国,欧洲等)

码率

完全无压缩的4K 8bit RGB:4096*2160*24*(8+8+8)/1024/1024=4860Mbit/s≈5Gbit/s≈600MB/s

解析:先考察一个像素点,由于是RGB且未压缩,8bit则代表三个通道都会有8bit的信息.那么一个像素点的数据量为(8+8+8)bit.再考察一帧,由于4K的分辨率是4096*2160,一帧图像的数据量为4096*2160*(8+8+8)bit.一秒内24帧,再进行单位换算得到结果

分恒定码率(CBR)和可变码率(VBR).可变码率更加实用

当输出时制定码率之后,编码会尽可能在码率大小的限制先保留最好的图像

图像/帧的表示方法

RGB

分三个通道红(Red)、绿(Green)、蓝(Blue)

YUV

色度采样,又被称为亮度-色度模型(Luma-Chroma)

一种实现方式是三个通道为:亮度(Y),蓝色色度(Cb),红色色度(Cr)

优点:YUV模型将多数有效信息集中在Y通道,减少了冗余信息量,且为压缩提供便利;亮度和颜色饱和度的调节,在YUV模型下更方便

播放的时候,播放器需要将YCbCr的信息,通过计算,转换为RGB。这个步骤称为渲染(Rendering)

采样格式

研究表明,亮度信息最好全部保留,而色度信息可以由多个像素共享一个色度值,这样做可以减少数据量,同时画面不会出现什么问题

(自己的理解:采样就是随机抽取,8个相邻的像素,取其中几个拿出来存进去就行了)

第一个数字代表了像素的横向数量,来进行色度采样;第二个数字,代表了第一行像素的色度采样值;第三个数字,代表了第二行像素的采样值

主要采样格式:

  • 4:4:4 每四列像素进行一次取样.取样时第一行取4个,第二行取4个.8bit量化时,一个像素3Byte
  • 4:2:2 每四列像素进行一次取样.取样时第一行取2个,第二行取2个.剩下没有被取样的像素由周围的像素代替.这样做相比444丢失了一半的色度信息.8bit量化时,两个像素4Byte(两个像素的亮度)2*1+(一个像素的两个色度通道色度)1*2*1,一个像素2Byte
  • 4:2:0 每四列像素进行一次取样.取样时第一行取2个,第二行不取.8bit量化时,四个像素6Byte(四个像素的亮度)4*1+(一个像素的两个色度通道色度)1*2*1,一个像素1.5Byte.相比444扔掉了75%的色度信息.不过正常拍摄和调色都没问题

(注:4:2:0并不意味着只有Y,Cb而没有Cr分量。它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量, 也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0...以此类推。对每个色度分量来说,水平方向和竖直方向的抽样率都是 2:1,所以可以说色度的抽样率是4:1)

色深

色深(bit-depth),就是我们通常说的8bit和10bit,是指每个通道的精度。8bit就是每个通道用一个8bit整数(0~255)代表,10bit就是用10bit整数(0~1023)来显示,更高的色深16bit则是0~65535

例子:8bitRBG所能呈现的颜色种数为:2^24=16,777,216, 10bitRBG所能呈现的颜色种数为:2^30=1,073,741,824≈10亿

总结:10bit在进行高端处理的时候十分必要,但是8bit在日常使用已经足够

参考资料