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的比特率忽略不计了。压缩后的视频比原视频肯定有点区别,不过不影响观看质量。
ffmpeg——关于视频压缩的更多相关文章
- mac ffmpeg mediainfo视频压缩
最近在开发官网,官网上放了一些视频,但是本宝宝拿到的都是100多.200多.300多兆的原视频,怎么把他们变成统统20兆呢?宝宝用了如下方法,很好用哟- 1.安装视频压缩工具下载ffmpeg brew ...
- ffmpeg for iOS
链接: ios ffmpeg 实时视频压缩(主要是H264) 最简单的基于FFmpeg的移动端例子:IOS 视频转码器 iOS下使用FFMPEG的一些总结 iOS配置FFmpeg框架 iOS上使用高大 ...
- 利用FFmpge进行视频压缩(从图像到H264视频流)
对于FFmpeg相信做视频或图像处理这一块的都不会陌生,在网上也能找到非常多相关的代码.但因为版本号不同等原因.往往找到的代码都是须要自行改动才干够用,为此本人希望能尽绵薄之力,将开发包和自行编写的代 ...
- Android 音视频深入 二十 FFmpeg视频压缩(附源码下载)
项目源码https://github.com/979451341/FFmpegCompress 这个视频压缩是通过类似在mac终端上输入FFmpeg命令来完成,意思是我们需要在Android上达到能够 ...
- H5外包团队 android视频压缩,使用ffmpeg方案
android视频压缩,使用ffmpeg方案,集成fdk-aac与264编码,适用于32位系统与64位系统,支持ARM 32/64 cpu与x86 32/64 cpu,mips 32/64 cpu,即 ...
- ffmpeg视频压缩与分割
ffmpeg -i .mov -vcodec libx264 -crf out.mp4 --分辨率不动进行压缩 ffmpeg -i .mp4 -c copy -c:v libx264 -vf scal ...
- javacv FFmpeg 视频压缩
package com.nmcc.demo.utils; import lombok.extern.slf4j.Slf4j; import org.bytedeco.javacpp.avcodec; ...
- h5视频上传之前端视频压缩研究
今天领导接到一个h5上传手机视频的需求,主要是要看用户在这个视频中有没有完成某个任务,比如投篮进了几个球. 但是由于手机拍摄的视频文件大小有点大,直接上传的话,用户流量顶不住,而且特别耗时,在这样的情 ...
- 基于最简单的FFmpeg包封过程:视频和音频分配器启动(demuxer-simple)
===================================================== 基于最简单的FFmpeg封装工艺的系列文章上市: 最简单的基于FFmpeg的封装格式处理:视 ...
随机推荐
- mybatis中使用in查询时的注意事项
1. 当查询的参数只有一个时 findByIds(List<Long> ids) 1.a 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list < ...
- JDK源码学习LinkedList
LinkedList是List接口的子类,它底层数据结构是双向循环链表.LinkedList还实现了Deque接口(double-end-queue双端队列,线性collection,支持在两端插入和 ...
- JavaScript组合继承的一点思考
今天看<JavaScript高级程序设计>一书中关于组合继承模式时.书上有这么一个Demo程序: <html> <head> </head> <b ...
- memcached/memcache安装
memcached安装 查找memcached: yum search memcached安装 memcached yum -y install memca ...
- django用户验证机制
django的验证机制 from django.contrib.auth.decorators import login_required 需要在要验证的界面添加`@login_required` 登 ...
- 论文笔记 Robust face landmark estimation under occlusion
1. Abstract 现实世界中的人脸很多时候都存在遮挡以及大的形状变化,而目前的人脸关键点检测方法在这种情况下表现欠佳, 因为它们未能提供一种系统的方法来处理异常.因而authors提出一种新的方 ...
- chrome 浏览器插件开发(一)—— 创建第一个chrome插件
最近在开发一个chrome插件,在网上找到了一些的文章,虽说按照文章可以写出对应的例子,但若要进行实际开发,发现还是有不少文章中没有的坑.下面我将结合我在开发过程中遇到的几个方面,对这些坑做一下补充. ...
- java课设数据库打包报错
最近在交java课设时把东西打包给老师遇到许多奇葩问题, 首先是数据库复制时提示: 这是数据库与SQL server服务没有分离(我用的是SQLserver暂时,对于其他的,我以后会继续尝试)可以进行 ...
- DML-插入
插入的方式一: 语法: insert into 表名(字段)values(值); 特点: 1.要求表明括号里的属性和values括号里的属性一致或兼容 2.字段的个数和顺序不一定与原始表中的字段个数和 ...
- 文本处理三剑客之 sed
sed:文本流编辑器 主要是对文件的快速增删改查,查询功能中最常用的是过滤,取行 sed [选项] [sed内置命令字符] [输入文件] Options: -n:取消默认的sed输出,常与sed内置命 ...