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的封装格式处理:视 ...
随机推荐
- file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known
请求页面时候报错 file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not know ...
- git did not exit cleanly (exit code 128)
github,pull和push的时候出问题,提示git did not exit cleanly (exit code 128) 使用HTTP格式的url,不要使用SSH格式的url,在官网上赋值下 ...
- 【ORACLE】使用中注意事项(二)
问题1:ORACLE在插入数据的时候,有时候中文变成????? 原因:由于当前计算机的字符集和服务器上的字符集不一致,导致中文乱码. 解决方案: 在当前使用的计算机中设置环境变量 在我的电脑上右键属性 ...
- ORACLE数据库入门再在屋里坐会
一.数据库简介 数据库概述 数据库(database)是按照数据结构来组织,存储和管理数据的仓库,它产生与距今五十年前. 简单来说是本身可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数 ...
- php实现动态随机验证码机制(CAPTCHA)
php实现动态随机验证码机制 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Ap ...
- Uva10048 Audiophobia (Floyd)
题意:有一个无向带权图,求出两点之间路径的最大边权值最小能为多少. 思路:使用floyd算法跑一边以备查询,每一次跑的过程中dp[i][j]=min(dp[i][j],max(dp[i][k],dp[ ...
- 一些需要禁用的PHP危险函数
phpinfo()功能描述:输出 PHP 环境信息以及相关的模块.WEB 环境等信息.危险等级:中 passthru()功能描述:允许执行一个外部程序并回显输出,类似于 exec().危险等级:高 e ...
- 20165318 2017-2018-2 《Java程序设计》第七周学习总结
20165318 2017-2018-2 <Java程序设计>第七周学习总结 目录 学习过程遇到的问题及总结 教材学习内容总结 第11章 JDBC与MySQL数据库 错题总结 第五周错题总 ...
- 4196. [NOI2015]软件包管理器【树链剖分】
Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖( ...
- [JSOI2018]潜入行动
题目 我好菜啊,嘤嘤嘤 原来本地访问数组负下标不会报\(RE\)或者\(WA\),甚至能跑出正解啊 这道题还是非常呆的 我们发现\(k\)很小,于是断定这是一个树上背包 发现在一个点上安装控制器并不能 ...