视频压缩原理
无论用代码还是视频处理工具对一个视频压缩,我们都期盼知道的是怎么样将一个100M的视频文件压缩到20M后画质还能如原来一样清晰。做到到这个其实并不难,只要我们弄懂几个问题:
1、视频压缩到底发生了什么?
2、视频压缩到底是压缩哪些参数才导致视频文件缩小?
3、又是哪些参数的变化影响到视频的清晰度,能不能不修改这些参数?
对于这几个问题我参考了一文章https://jingyan.baidu.com/article/0eb457e5db368003f1a905f3.html。
一个视频由时长、帧率、分辨率、码率、方向、音轨、音轨码率等组成。其中时长、帧率、分辨率、码率之间的相互关系最为重要,或直接或间接的影响着一个视频文件的大小。
首先,我们确定下来一个原理,在压缩过程中视频文件只跟码率有关。
可能有点视频原理常识地人会觉得不对,觉得视频文件跟分辨率即(视频尺寸)、时长、帧率、有关系。这样说也没错,但是他们与视频大小都是间接关系,码率才是直接影响文件视频大小的关键点,他们都要通过影响了码率才能影响到视频文件大小。
接下来,我会详细说一下这几个参数的关系,来证明这个原理。
分辨率:这个是一个视频的尺寸大小,也就是视频的宽高。它决定了每一个画面(图片)每一行要用多少像素,每一列用多少像素。
帧率:每秒钟播放多少个画面(图片)。
时长:视频总共播放多少秒。
码率:每秒钟的播放的图片总共占用多少bit,通常单位是kbps。还有一个码流,它是整个视频文件的公共占用多少bit;
关系:
1、码率 = 帧率*分辨率*(平均每个像素占用多少bit);每帧画面占用的bit数越多,保留的视频细节也就越详细,给人的感觉也就越清晰,越鲜活,越接近真实世界。
2、文件大小= 时长 * 码率 = 码流 / 8(转换成字节)
3、文件大小 = 时长 * 帧率*分辨率*(平均每个像素占用多少bit);
4 、(每帧画面占用总bit) = 码率 / 帧率;(计算后的单位是KB)
由上边几个公式,可以一目了然得让我们看到,分辨率的改变影响到了码率,所以才影响了文件大小。
而在压缩过程中,肯定是不能改变时长,除非输出文件愿意别剪切。而帧率是为了保障流畅度,通常24帧,人眼就能感觉到流畅不卡顿,这个值建议是24帧—30帧。过高其实人眼已经感受不到了。通常我们不去改变帧率,但如果帧率确实特别高也可以采用丢帧的方式来减小文件大小。所以根据第三个公式,我可以推论出,在时长跟帧率不变情况下,
文件大小 = 分辨率*(平均每个像素占用多少bit)*G ( 我们用G代表一个数学常数),如果设G=1,则
文件大小 = 分辨率*(平均每个像素占用多少bit)。
现在我们确定了我们要压缩的参数,分辨率,(每帧画面占用总bit),只要缩小了这两个参数,文件大小自然而然就会变小。
但是这两个参数并不是随便可以缩小的,因为只有分辨率与(每帧画面占用总bit)成一个比例关系时,视频画面才不会模糊,这个比例越大,视频画质越好,但是视频文件就会变大。
我要做的就是找到这个比例关系,然后判断一个视频文件中的这个关系没有超过这个比例,超过的我们就压缩,压缩到这个比例关系上。
对于这个比例关系可以使用压缩软件多试试几次,看看压缩后的视频的清晰度,来寻找。这里我们就不说多说,直接上网上试出来的一个比例关系:
分辨率320x240(240p) 码率200-384kbps; (流畅)
分辨率640x480 (480p) 码率768-1024kbps; (标清)
分辨率1280x720 (720p) 码率2048-3072kbps; (高清)
分辨率1920x1080 (1080p) 码率5120-8192kbps. (超清)
其中480P的字母p是Progressive,逐行的意思,数字 360 表示其垂直分辨率,也就是说垂直方向上有480条水平线的扫描线。比如,360P通常用在网络视频、手机视频里,其分辨率有两种,一种为480x360,长宽比为4:3,另一种为640x360,长宽比为16:9。
一个1280*720(720p)分辨率 25帧视频,推荐码率为2205825bps,一分钟视频大小约16M, 一分钟上传完需273K/s的网速。