【视频】视频基本参数介绍

视频(Video)泛指将一系列静态影像以电信号的方式加以捕捉、纪录、处理、储存、传送与重现的各种技术。
连续的图像变化每秒超过24帧(frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面;看上去是平滑连续的视觉效果,这样连续的画面叫做视频。
单纯传输视频画面,视频量非常大,对现有的网络和存储来说是不可接受的。
为了能够使视频便于传输和存储,人们发现视频有大量重复的信息,如果将重复信息在发送端去掉,在接收端恢复出来,这样就大大减少了视频数据的文件,因此有了H.264视频压缩标准。

视频文件格式
视频文件后缀都有诸如mp4、rmvb、mkv、avi等等,这些是文件的扩展名,也就是视频文件格式

视频编码方式
指视频文件格式中视频流数据的压缩编码方式,MPEG-4、MPEG-4/AVC、H.264等等

帧率
表示一秒播放的视频中有多少个帧,单位是(Frame Per Second)简称:FPS或“赫兹”(Hz)以及Gop(表示多少秒一个I帧),人眼能接受的视频连续播放的最小帧率为25帧/秒。
帧是组成视频的基本单位。视频文件本身是由很多连续的图片组成,当这些图片以一定的时间间隔显示时就是所谓的视频播放,而人眼感官视频连续最大延时间隔为40ms,当然每秒显示的帧数越多画面看起来就越流畅。
所以说要想得到非常流畅的画面感,帧率当然是越高越好,但是超过60帧每秒估计人类也可能感知不出效果了。
ffmpeg -i input.mp4 –r 29.00 output.mp4

分辨率
单位英寸中所包含的像素点数,影响图像大小,与图像大小成正比:分辨率越高,图像越大;分辨率越低,图像越小。
-s 640x360   ffmpeg -i input.mp4 -s 640x360 output.mp4

清晰度
在码率一定的情况下,分辨率与清晰度成反比关系:分辨率越高,图像越不清晰,分辨率越低,图像越清晰。
在分辨率一定的情况下,码率与清晰度成正比关系,码率越高,图像越清晰;码率越低,图像越不清晰。

码率(比特率)
比特率,英文为 bit rate,描述每秒钟输出多少 KB 的参数,单位是 Kbps,也就是 kbit/s,8Kbit/s = 1KB/s。也就是说800Kbps意思就是每秒视频就要占用100KB磁盘空间  规范写法是800Kbps,也就是800Kbit/s 
由于保存完整的一帧一帧图片的视频原文件太大,必须要通过某种视频压缩算法将视频中的图片压缩,以减小视频文件大小,那么读者应该可以想到,压缩比越大,解压缩还原后用来播放的视频就会有越严重的失真,因为压缩的同时不可避免的丢失了视频中原来图像的数据信息。
在理解这个的前提下,我来举个例子,一个分辨率为1080P的原视频(未经压缩)被压缩成分别为4GB 和 1GB的两个视频文件。由于1GB的视频的压缩比更大,所以在观看1GB视频的明显感觉到没有4GB视频清晰(虽然他们的分辨率都是1080P)。
所谓码率,简单来说就是指在压缩视频的时候给这个视频指定一个参数,用以告诉压缩软件期望的压缩后视频的大小。码率的英文名为bps(bit per second),就是用平均每秒多少bit来衡量一个视频大小。
比如那个被压缩的1080P的视频,假设它的长度为100分钟,大小为1GB。
100M=100X60S=6000s
1GB=1024MB= 1024X1024KB=1024X1024X1024Byte=1024X1024X1024X8bit=8589934592bit
那么这个视频的码率大概就是1.4Mbit/s(8589934592/6000),这个比特率在在线视频中已经是非常高的了,一般主流视频平台的最高码率在1Mbit左右,比如直播网站斗鱼的高清选项实际播放的视频码率是900Kbit/s(0.9Mbit)。

码率控制对于在线视频比较重要。因为在线视频需要考虑其能提供的带宽。
那么,什么是码率?很简单: 
bitrate = file size / duration 
比如一个文件20.8M,时长1分钟,那么,码率就是: 
biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps
一般音频的码率只有固定几种,比如是128Kbps, 
那么,video的就是 
video biterate = 2831Kbps -128Kbps = 2703Kbps。

那么ffmpeg如何控制码率。 
ffmpg控制码率有3种选择,-minrate -b:v -maxrate 
-b:v主要是控制平均码率。 
比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率。 
ffmpeg -i input.mp4 -b:v 2000k output.mp4 
上面把码率从原码率转成2Mbps码率,这样其实也间接让文件变小了。目测接近一半。 
不过,ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize 
-bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。(简单来说,比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 当然是第二种比较好) 
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4

-minrate 就简单了,在线视频有时候,希望码率波动,不要超过一个阈值,可以设置maxrate。 
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

总结
对于视频来讲,码率应该是最重要的参数,从上面的例子我们看出,码率直接与视频压缩比相关。直观来讲,码率越大代表一个视频的画质也清晰(不考虑各种压缩算法的优劣问题)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试人员做到这几点,线上80%的BUG将落入你手,企业将避免重大风险

BUG事故给敲了很大的警钟,也给公司带来重大损失,作为测试人员,我们如何提现发现线上BUG并及时解决,避免落入用户手中,给企业带来无法挽回的损失。 案例1: 1月20日凌晨,拼多多App因技术漏洞&am…

Django与jQuery通信;Django前后端传值

window.onloadfunction(){var user_info{{user_info|default_if_none:0}};if(user_info0){alert("您好没有登录!");window.location.href"/login"; //跳转到登录界面} } 参考自:https://blog.csdn.net/PlusChang/article/details/7…

【Python】pysnooper模块对代码进行调试

一般情况下,在编写Python代码时,如果想弄清楚为什么Python代码没有按照预期执行的原因,比如你想知道哪些是正在运行,哪些没有运行,以及局部变量的值是什么... 通常我们会使用包含断点和观察模式等功能成熟的调试器&…

解决$ is not define

今天写js的时候,发现怎么也没有效果。然后我前端调试的时候报这样的错 $ is not define 这个错误我以前也出现过。所以就这个错误的解决,我来总结一下。 1.首先,"$"这个符号是在jquery中定义的。所以你要看一下,你有没…

模拟导入系统通讯录5000+手机号 校验大量数据处理

模拟导入系统通讯录5000手机号 校验大量数据处理 之前再测试一个导入手机通讯录系统时,随机抽了几个人的手机进行了测试,都导入显示正常 当公司BD进行项目试用时,导入通讯录一直处于下图加载中 1、于是进行抓包查看日志进行定位&#xff0c…

【股票】股票交易的手续费介绍以及计算

股票交易手续费是进行股票交易时所支付的手续费。委托买卖的手续费分“阶段式”和“跟价式”。(1)阶段式。根据股票价格和交易股数收取手续费。(2)跟价式。根据股票的交易金额收取手续费,目前世界上多采用跟价式。 我国目前主要是证券公司收取佣金和国家收取的印花税…

python3下使用cv2.imwrite存储带有中文路径图片或者绝对路径图片

由于imwrite前使用编码在python3中已经不适用,可用imencode代替,以下代码是从视频中获取第2帧保存在中文文件夹下的实例: 1 2 3 4 5 cap cv2.VideoCapture("***.mp4") cap.set(cv2.CAP_PROP_POS_FRAMES, 2) ret, framecap.read…

浅析python类继承(一)

面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父…

【Python】常用的数据类型介绍以及它们之间相互转化

在学习一门语言的过程中,首先肯定就是要先接触到它所拥有的数据类型,Python拥有多种主要的数据类型,下面介绍一下下面9种数据类型,以及一些数据类型之间的转化。 目录 1、字符串 2、布尔类型 3、整数 4、浮点数 5、数字 6、列表 7…

django select option拼接时value中空格后的内容被截断

$new $("<option value"List[i] ">"List[i]"</option>" ); $("#project").append( $new ); 此时若value中的字符串有空格&#xff0c;则会被空格截断 解决方法&#xff1a; $new $("<option value"List…

Monkey随机性能压测初探(一)

Monkey介绍 Monkey程序由Android系统自带&#xff0c;是Android SDK提供的一个命令行工具&#xff0c; 可运行Android模拟器和实体设备上。Monkey会发送伪随机的用户事件流&#xff0c;通过Monkey程序模拟用户触摸屏幕、滑动、 按键等操作来对程序进行压力测试&#xff0c;检测…

【Java】使用前准备工作配置环境变量

我们要使用java前&#xff0c;必须先安装JDK并且配置相关的环境变量&#xff0c;如果我们未配置环境变量&#xff0c;那么我们在cmd命令中&#xff0c;输入javac&#xff0c;会提示“javac”不是内部或外部命令&#xff0c;这里主要介绍如何配置jdk的环境变量。 JDK官网下载&a…

怎么在html的img src=src的值这里调用js方法或变量获取图片地址

<html> <head>参考自 </head> <body> <img src"?" id"img"> </body> <script language"javascript"> var adres"图片地址"; document.getElementById(img).src adres; </sc…

Jmeter性能测试工具Timer定时器详解

jmeter提供了很多元件&#xff0c;帮助我们更好的完成各种场景的性能测试&#xff0c;其中&#xff0c;定时器&#xff08;timer&#xff09;是很重要的一个元件&#xff0c;jemter提供了9种定时器&#xff0c;下面一一介绍&#xff1a; 一、定时器的作用域 1、定时器是在每个…

js/jq进行日期格式化为:yyyy-MM-dd 如2017-05-08

设置日期为yyyy-MM-dd,代码如下&#xff1a; function setDefaultDate() {var mydate new Date();var month myDate.getMonth() 1;var day myDate.getDate();month (month.toString().length 1) ? ("0" month) : month;day (day.toString().length 1) ? (…

【Maven】Java项目管理工具

一、为什么要Maven 在开发中经常需要依赖第三方的包&#xff0c;包与包之间存在依赖关系&#xff0c;版本间还有兼容性问题&#xff0c;有时还里要将旧的包升级或降级&#xff0c;当项目复杂到一定程度时包管理变得非常重要。 Maven是当前最受欢迎的Java项目管理构建自动化综合…

fiddler抓包工具配置详解

没有解决不了的问题&#xff0c;只是没有找到合适的方法 fiddler官网 https://www.progress.com/ 官网下载fiddler https://www.telerik.com/download/fiddler/fiddler4 fiddler插件下载 https://www.telerik.com/fiddler/add-ons 最近看到很多人都在问的一个问题&#xff0…

js 截取字符串

本文为大家介绍三种 js 截取字符串的方法&#xff1a; substring() 方法&#xff1b;substr() 方法&#xff1b;slice() 方法&#xff1b; 方法1&#xff1a;substring() 方法 string.substring(from, to) 方法从 from 位置截取到 to 位置&#xff0c;to 可选&#xff0c;没有…

【Maven】Eclipse中的Maven项目安装与配置

上一篇文章我们了解到了Maven的基本信息和如何在电脑本地安装Maven&#xff0c;这篇文章主要介绍如何在Eclipse关联Maven的配置和本地仓储地址&#xff0c;并且如何创建一个Maven项目、关联依赖包等。 一、关联Eclipse和Maven 点击Windows菜单栏下的Preference&#xff0c;找…

python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别

1、#类方法classmethod&#xff0c;只能访问类变量&#xff0c;不能访问实例变量&#xff0c;通过cls参数传递当前类对象&#xff0c;不需要实例化&#xff0c;直接【类名.方法名()】&#xff0c;可通过类对象和类对象实例访问 类方法&#xff1a;第一个参数强制为类对象&…