ffmpeg——关于视频压缩
这篇博客主要讲有关于视频压缩的问题,解决视频文件太大,不便于下载,占用存储空间过大等问题,在缩小视频大小的同时,保证视频的观看质量。主要讲以下几点:
1、压缩视频工具ffmpeg
2、压缩视频的技术参数
3、视频如何压缩
一、压缩视频工具ffmpeg
下载ffmpeg链接:https://ffmpeg.zeranoe.com/builds/;
安装步骤一: 可以根据你的电脑选择64位或者32位,下载下来的是个压缩文件,用解压文件解压就可以了,我是安装在C盘,如图:
步骤二:配置环境,右击“我的电脑”----->属性,然后如图所示:
步骤三:在cmd下,查看是否安装成功
二、压缩视频的技术参数
1、我们先来了解下压缩视频参数(查看这些压缩视频参数,可以用mediainfo软件打开视频文件,就可以看到各种参数如截图所示,以视频3.mp4为例):
2、在上述截图中可以看到3.mp4视频音频部分的位深度没有显示,这里我用软件Adobe Audition打开3.mp4视频,可以看到音频部分的位深度是16bit
2、技术参数解释
视频尺寸:指的就是视频的分辨率,常见的分辨率有4096*2304,1920*1080,720*576等。
视频编码:视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式。视频编码格式常见到的有:MPEG-2 TS、Divx、Xvid、H.264、WMV-HD和VC-1。
音频编码:音频编码方式指通过特定的压缩技术对音频数据进行处理的方法。
帧率:帧率(即视频更新率)是用于测量显示帧数的量度。测量单位为“每秒显示帧数”(Frame Per Second,FPS,帧率)或“赫兹”,单位用FPS用来描述视频每秒播放多少帧,而单位用赫兹用来描述显示器的画面每秒更新多少次。 一般帧率越高,视频画面越流畅。
比特率:指每秒传送的比特(bit)数,即每秒传输的文件大小。比特率规定使用“比特每秒”(bit/s 或 bps)为单位。比特率越高,每秒传送的数据越大。
采样率:采样率的单位是Hz,表示每秒采样的次数。单位时间内取样率越大,精度就越高,处理过的视频文件就越接近没有处理过的视频文件。
码率:码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。码率与体积成正比:码率越大,体积越大;码率越小,体积越小。由于文件体积与取样率是成正比的,所以几乎所有的编码格式都想用最低的码率达到最少的失真,“码率”就是失真度,码率越高越清晰,反之则画面粗糙而且马赛克多。
视频部分的位深度:用于指定图像中的每个像素可以使用的颜色信息数量,用“位即bit”为单位。
音频部分的位深度:单个声道的采样数据大小
Audio部分声道:指声音在录制或着播放的时候在不同空间位置采集或回放的相互独立的音频信号,所以声道数量也就是声音录制时的音源数量或回放时相应的扬声器数量。
(1)关于Audio部分码率的计算公式:
码率(位/秒)=采样率(HZ)* 采样位深度(bit)* 声道数量
论证"码率(位/秒)=采样率(HZ)* 采样位深度(bit)* 声道数量"公式的正确性:
1)量纲分析来看:
HZ * bit=bit/s,验证公式不是错的
2)从理论上看:
码率是每秒传输的信息大小;
采样率是每秒采样的次数;采样位深度是单个声道的每次采样数据大小;
(采样率*位深度)指的就是音频部分单个声道每秒传输的数据大小;
然后两个声道传输的信息大小=单个声道传输的数据大小 * 声道数 ;
由此得出:Audio部分码率=采样率(HZ)* 采样位深度(bit)* 声道数量。
3)以一个未被压缩的音频文件为例,验证公式是否正确。
Audio部分码率码率=采样率* 采样位深度* 声道数量=44.1KHZ * 16bit * 32= 1411.2 Kbps,与图中码率结果相符合,验证公式正确 。
(2)Video部分码率的计算公式
码率(位/秒)= 屏幕显示分辨率(无单位) * 彩色位数(位)* 帧率(帧数/秒等同于HZ)
1)量纲分析来看:
位/秒 = 位 * HZ ,验证公式不是错的。
2)从理论上看:
帧是指视频中的图像;
帧率是指每秒显示的图像数;
视频部分的位深度是用于指定图像中的每个像素可以使用的颜色信息数量;
一张图像的像素总数等于画面宽度像素数乘以画面高度像素数的乘积;
像素是图像信息大小的最小单位;
所以,一张图片的信息大小=屏幕显示分辨率(画面宽度像素数*画面高度像素数)* 位深度;每秒显示的图像信息量大小即码=一张图片的信息大小 * 帧率。从而验证了公式“Video部分码率= 屏幕显示分辨率 * 彩色位数* 帧率”是正确的。
(3)关于视频大小的计算公式:
Audio部分文件大小=Audio部分码率* 视频播放的总时间
Video部分文件大小=Video部分码率* 视频播放的总时间
整个视频 文件大小=(Audio部分码率+Video部分码率)* 视频播放的总时间
(注意:上述(1)(2)公式适用于不被压缩的视频文件。(3)公式都适用未被压缩和压缩过的视频文件)
三、视频如何压缩
1、对于压缩.mp4视频体积,压缩以后视频的效果:在不改变视频尺寸(分辨率不变)、视频和音频编码不变(视频格式不变,所以这两个编码不变)、帧率不变(保证画面连贯度,所以帧率不变)的情况下,通过改变比特率,使得视频文件体积变小,不影响画面和声音质量,保证眼睛和耳朵感受不到很大差别。
3、如何设置参数呢?
一般, 在压缩视频的时候,帧率参数都不改变,原视频帧率是多少就是多少。码率影响体积,与体积成正比:码率越大,体积越大;码率越小,体积越小。
如何设置压缩的比特率呢?
压缩视频的音频部分的码率和视频部分的码率大小相比较来说,音频部分的码率可以忽略不计,所以视频的比特率数值可以等同于视频部分的码率数值。让视频无卡顿的播放,设置的比特率要高于文件的读入速度,此处以我的联想电脑F盘为例,下载一个Parkdale软件测试F盘test.mp4读入速度,如图所示:
4、设计实验计算:以视频源test.mp4为例,设置的比特率高于(磁盘读写速度平均值*8约等于500K,单位kbps),这里设置比特率数值为600K
1、压缩的ffmpeg命令
参数解释:
-i 输入文件,后面跟的是文件的地址,如果test.mp4文件路径和ffmpeg是在同一根目录下,则直接输入-i test.mp4。
-b 数据比特率,每秒传输的数据流量大小(kb/s),这个命令里设置的比特率是600k,用于指定视频的压缩程度,后面跟的是压缩原视频后的视频存储路径。
2、原视频和压缩后视频参数,截图如下:
1是视频体积大小,2是视频的比特率,3是视频的尺寸,4是帧率,从这两个图中我们可以看到视频压缩的参数比特率发生了变化,视频体积变小了,压缩后的视频体积由码率可以算出:约等于(时间*码率/8=49*600/8=3.58MB),与实际压缩后视频大小有一定的误差,因为audio的比特率忽略不计了。压缩后的视频比原视频肯定有点区别,不过不影响观看质量。