《FFmpeg Basics》中文版-03-比特率/帧率/文件大小

news2024/11/20 14:39:00

正文

比特率和帧速率是视频的基本特征,它们的正确设置对整体视频质量非常重要。 如果我们知道所有包含的媒体流的比特率和持续时间,我们可以计算输出文件的最终大小。 由于在使用FFmpeg工具时对帧速率和比特率的理解很重要,因此包含每个术语的简短描述。

帧率(频率)的介绍

帧速率是编码成视频文件的每秒帧数(FPS或fps),人眼需要至少约15 fps来观看连续运动。 帧率也称为帧频,其单位是赫兹(Hz),LCD显示器通常具有60 Hz的频率。

有两种帧速率 - 隔行(在FPS编号后表示为i)和逐行(在FPS编号后表示为p)。

在电视中使用隔行帧率:

*NTSC标准使用60i fps,意味着每秒隔行扫描60次(30帧)

  • PAL和SECAM标准使用50i fps,这意味着50隔行场,相当于每秒25帧24p,25p和30p的逐行帧率被用于电影行业。 高端HDTV产品使用较高的帧频50p / 60p。

常见的视频帧率

蓝色的,,我弄不出来,就用图片代替了

FPS
i=interlaced
p=progressive
描述
24p or 23.976从20世纪20年代开始,电影行业的标准帧速率,所有的电影都是以这个频率拍摄的。 当这些电影被采用到NTSC电视广播时,帧速率降低到24×1000/1001 = 23.976值,但是对于PAL / SECAM电视,电影的帧速率增加到25帧/秒。
25p由于25个逐行扫描视频可轻松转换为50个隔行扫描电视场,因此电影频率为50赫兹(PAL和SECAM标准)的国家中的电影和电视的标准帧频。
30p常见的视频帧速率,常用于数码相机和摄像机。 它可用于60赫兹(NTSC)隔行场的电视广播。
50iPAL和SECAM电视的标准场率(隔行帧率)。
60ior 59.94NTSC电视的标准场频率,在彩电发明之后,帧速率被降低到60 * 1000/1001 = 59.94的值,以防止色度副载波和声音载波之间的干扰。
50p/60pHDTV(高清晰度电视)的通用帧频。
48p提议的帧速率,目前经过测试了
72p提议的帧速率,目前经过测试了
120p为UHDTV(超高清晰度电视)标准化的渐进式格式,计划成为UHDTV的单一全球“双精度”帧速率(而不是使用PAL标准的100 Hz和NTSC标准的119.88 Hz)

【学习地址】:音视频新手快速入门必备系列-FFmpeg+SDL播放器开发实现-学习视频教程-腾讯课堂
【文章福利】:

免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

帧率设置

使用- r选项

要设置视频帧速率,我们在输出文件之前使用-r选项,语法是:

ffmpeg -i input -r fps output

例如改变电影的帧率。avi文件从25到30 fps值,我们使用命令:

ffmpeg -i input.avi -r 30 output.mp4

我给大家演示一下,我把我的根目录下面的一个SDWebimage.mp4文件输出为30fps的test.mp4文件 使用的命令如下:(你用自己的视频文件做测试,别瞎模仿)

 ffmpeg -i /Users/zhangfangtao/SDWebImage.mp4 -r 30 test.mp4

看到没,下面真的就出来了输出的test.mp4:

先让你们看一下之前的视频信息是什么:

再让你们看一下现在的视频信息是什么:

  • 有没有发现,重新编码以后不仅仅fps变化了,Data Rate也改变了?因为我没有设置,FFmpeg使用了默认的比特率,重新编码之后,自动降码了。所以,建议各位做转码的时候把参数填的全面一些,要不然会有意外存在。

当使用原始输入格式时,-r选项也可以在输入之前使用。

使用fps过滤器

另一种设置帧速率的方法是使用fps过滤器,这在过滤链中尤其有用。

描述将视频帧速率更改为指定的值。
Syntaxfps=fps=number_of_frames
fps指定输出帧速率的数字或预定义缩写。

例如,要更改剪辑的输入帧速率。mpg文件到值25,我们使用命令。

ffmpeg -i clip.mpg -vf fps=fps=25 clip.webm

我亲自给大家测试一下,我用的是我刚才转码出来的test.mp4,转码成为test.webm,具体的命令行如下:

ffmpeg -i /Users/zhangfangtao/test.mp4 -vf fps=fps=25 test.webm

因为没有设置bit rate,所以给了一个默认值96000bps

帧速率的预定义值。

除了数值,设置帧率的两种方法都接受下一个预定义的文本值:

帧速率的预定义缩写。

缩写精确值相应的FPS(相应的帧)
ntsc-film24000/100123.97
film24/124
pal, qpal, spal25/125
ntsc, qntsc, sntsc30000/100129.97

例如,设置帧速率为29.97 fps,接下来的3个命令给出了相同的结果:这个就不用我给大家示范了吧。。。

ffmpeg -i input.avi -r 29.97 output.mpg
ffmpeg -i input.avi -r 30000/1001 output.mpg
ffmpeg -i input.avi -r ntsc output.mpg

位(数据)率的介绍

比特率(也是比特率或数据率)是决定整体音频或视频质量的参数。 它规定了每时间单位处理的位数,在FFmpeg中,位速率以每秒位数表示。

类型的比特率

类型缩写描述
平均比特率ABR平均每秒处理的位数,该值也用于VBR编码,需要时是输出的某个文件大小
恒定比特率CBR每秒处理的比特数是恒定的,这对于存储是不实际的,因为具有快速运动的部分需要比静态比特更多的比特,CBR主要用于多媒体流
可变比特率VBR每秒处理的比特数是可变的,复杂的场景或声音被编码更多的数据并与CBR进行比较,相同尺寸的文件的VBR质量比CBR更好(VBR编码比CBR需要更多的时间和CPU功率 ,但最近的媒体播放器可以充分解码VBR。)

设置比特率

比特率决定了存储1秒编码流的位数,它使用-b选项设置,以区分推荐使用-b:a或-b:v格式的音频和视频流。 例如,要设置总体1.5 Mbit / s的比特率,我们可以使用以下命令:

ffmpeg -i film.avi -b 1.5M film.mp4

我是用的是我电脑桌面上的一个视频,使用的代码如下:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -b 1.5M newTest.mp4

原来的视频信息是:

转码之后的视频信息是:

如果可能的话,ffmpeg使用一个可变比特率(VBR),并对比具有快速运动的部分具有更少比特的静态部分进行编码。 ffmpeg通常用于使用高级编解码器来降低输出文件的比特率和相应的文件大小,例如:

ffmpeg -i input.avi -b:v 1500k output.mp4

该命令将输入比特率更改为每秒1500千比特。

在我电脑上测试的命令行是:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4  -b:v 1500k /Users/zhangfangtao/Desktop/newTest.mp4 

转码之后的结果如下图:

固定比特率(CBR)设置

例如视频会议之类的实时视频流,可以使用固定的比特率,因为传输的数据不能被缓冲。为了设置输出的恒定比特率,三个参数必须具有相同的值:比特率(-b选项)、最小速率(-minrate)和最大速率(-maxrate)。对于minrate和maxrate选项可以添加一个流指示符,maxrate选项需要设置一个-bufsize选项(比特的速率控制缓冲区大小)。例如,要设置0.5 Mbit/s的CBR,我们可以使用以下命令:

ffmpeg -i in.avi -b 0.5M -minrate 0.5M -maxrate 0.5M -bufsize 1M out.mkv

我自己测试的命令行是:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -b 0.5M -minrate 0.5M -maxrate 0.5M -bufsize 1M /Users/zhangfangtao/Desktop/newTest.mp4 

输出的视频信息是:

设置输出文件的最大尺寸

为了使输出文件的大小保持一定的值,我们使用-fs选项(文件大小的缩写),期望值以字节为单位。 例如,要指定10兆字节的最大输出文件大小,我们可以使用以下命令:

ffmpeg -i input.avi -fs 10MB output.mp4

给大家看一下我自己的测试命令行:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -fs 1MB /Users/zhangfangtao/Desktop/newTest.mp4

结果可能要让大家失望了,我设置的1MB的大小,结果输出的文件将近8MB(ーー゛)我去。。。

我把大小的控制设置成1024K,就会精确很多,新的命令行:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4  -fs 1024K /Users/zhangfangtao/Desktop/newTest.mp4 

再看一下结果:

文件的大小计算

编码输出的最终文件大小是音频和视频流大小的总和。以字节为单位的视频流大小的方程是(由比特到字节的转换为8):

video_size = video_bitrate * time_in_seconds / 8

如果音频未压缩,其大小由公式计算:

 audio_size = sampling_rate * bit_depth * channels * time_in_seconds / 8

要计算压缩音频流的文件大小,我们需要知道它的比特率和方程。

audio_size = bitrate * time_in_seconds / 8。

例如,用1500 kbits/s的视频比特率和128 kbits/s音频比特率计算10分钟视频剪辑的最终大小,我们可以使用这些公式:

file_size = video_size + audio_size
file_size = (video_bitrate + audio_bitrate) * time_in_seconds / 8
file_size = (1500 kbit/s + 128 kbits/s) * 600 s
file_size = 1628 kbit/s * 600 s
file_size = 976800 kb = 976800000 b / 8 = 122100000 B / 1024 = 119238.28125 KB
file_size = 119238.28125 KB / 1024 = 116.443634033203125 MB ≈ 116.44 MB
  • 1 byte (B) = 8 bits (b)
  • 1 kilobyte (kB or KB) = 1024 B
  • 1 megabyte (MB) = 1024 KB, 等.
    最终文件的大小比计算的要大一些,因为包含了一个muxing开销和文件元数据。

都是计算题,我就不发表什么个人的测试数据了。。。

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

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

相关文章

文件存储解决方案-云存储阿里 OSS

文件存储解决方案-云存储阿里 OSS 1.文件存储(上传)解决方案讨论 1.图解 文件存储解决方案-云存储阿里 OSS 解读上图 普通上传并不是分布式,也不是集群,可用性不高普通上传的分布式情况,使用了集群,但是…

数据结构每日亿题(七)

文章目录一题目二.思路2.1链表2.2数组三.代码一题目 原题传送门:力扣 题目: 题目的意思是让你写一个数据结构,这个结构的特点和队列一样先进先出,然后完成:判断是否为空,判断是否为满,添加一个…

实验29:循迹传感器实验

今天讲一个基本实验 循迹实验 循迹传感器的原理是: CTRT5000传感器的红外发射管不断发射红外光。由于黑色吸收光线,当红外发射管照射黑色表面时,反射光较少,接收管接收的红外线较少。这表明黑色吸收光线的强度大,那么比较器输出高电平,指示灯熄灭。同样,当它在白色表面…

MCE虚拟筛选化合物库

Discovery Diversity Sets 新颖的化合物库! 药物筛选是发现药物先导物的重要途径,好的化合物库则是药物筛选的必备武器。MCE 拥有丰富的数据库资源,助力您的药物筛选研究!药物筛选研究与化合物新颖性密切相关。Discovery Divers…

单目标应用:求解旅行商问题(TSP)的猎豹优化算法(The Cheetah Optimizer,CO)提供MATLAB代码

一、猎豹优化算法 猎豹优化算法(The Cheetah Optimizer,CO)由MohammadAminAkbari等人于2022年提出,该算法性能高效,思路新颖。 参考文献: Akbari, M.A., Zare, M., Azizipanah-abarghooee, R. et al. The…

Linux实战案例——使用LNMP+WordPress搭建个人博客网站

一、案例目标 了解 LNMP 环境的组成。 了解 LNMP 环境的部署与安装。 了解 WordPress 应用的部署与使用二、环境介绍 1.LNMP LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也…

技术分享 | TiUP工具 - TiDB集群滚动升级核心流程解析

作者:贲绍华 爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 引言&#xff1a…

运维工程师怎么找兼职?什么样的兼职合适?

运维老哥们应该都知道,这个岗位其实是个很宽泛的定义,不同公司对运维的要求也不一样。有些公司所谓运维就是桌面helpdesk ,有些公司就是网管。基本上从修电脑到会写点脚本做自动化,各个层次的都有。现状就是,有少数公司或者大厂的…

基于Django的图书交易系统

摘 要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,图书交易系统也不例外,但目前国内的有些公司仍然都使用人工管理,图书销量越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化…

第五课 算术运算

一、加法与减法 经过上次课的学习,我们已经学会了该如何在控制台中输出我们想要的内容了,但是计算机计算机,最早其实是用来进行计算的,Python能做这事吗,我们来试试。 看到这结果,估计很多同学就该说了&…

【每周研报复现】基于阻力支撑相对强度(RSRS)的市场择时

原创文章第106篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。 今天要复现的研报是:”光大证券_金融工程深度:基于阻力支撑相对强度(RSRS)的市场择时——技术择时系列报告之一“。 研报核心…

写个注解帮你净化使用分布式锁的重复操作

RedissonAop实现分布式锁 前言 简介 Aop的意义 AOP 旨在从业务逻辑中分离出来通用逻辑,切面实现了跨越多种类型和对象的关注点(例如事务管理、日志记录、权限控制)的模块化。 例子 就以这段代码为例子,这段代码总是回去获取锁之…

【HTML】关于height值设置和显示不同的原因以及font-size对象为中文和英文的区别

关于height值设置和显示不同的原因 height: 100px; CSS中把高度设置为100px,但是实际测量发现高度为125px 这个是因为:笔记本默认显示大小为125%,所以100的125%就是125. 还有一点,在你写网页时,要注意网页的缩放一定…

050_阵列天线方向图乘积原理

天线增益概念。原创不易,恐有错误,恳请读者指正。碎片三分钟逛电巢App,收获一丢丢。 天线定向性(directivity) 假设理想的无定向性天线,在远场区的3D球面空间各方向的辐射功率都相等,则定义球面等辐射功率的方向图的定…

Linux内存泄露案例分析和内存管理分享

作者:李遵举 一、问题 近期我们运维同事接到线上LB(负载均衡)服务内存报警,运维同事反馈说LB集群有部分机器的内存使用率超过80%,有的甚至超过90%,而且内存使用率还再不停的增长。接到内存报警的消息&…

代码随想录day56|583. 两个字符串的删除操作|72. 编辑距离|编辑距离总结篇|Golang

代码随想录day56 考试周了解一下 目录 代码随想录day56 583. 两个字符串的删除操作 72. 编辑距离 动态规划之编辑距离总结篇 583. 两个字符串的删除操作 思路 动态规划一 本题和动态规划:115.不同的子序列相比,其实就是两个字符串都可以删除了&am…

2023职教高考报名开启,报考人数继续增加

进入11月起,各地区2023年职教高考报名已经陆续开始,报考考生主要以中职学校学生为主。根据南京日报的报道,11月1日就启动的江苏省职教高考报名,吸引了不少家长和学生的关注,有些专业的报名人数已经比2022年翻了不止一倍…

Flutter Hooks — 快速了解

Flutter Hooks — 快速了解 前言 Hooks,直译过来就是"钩子",是前端 React 框架加入的特性,用来分离状态逻辑和视图逻辑。现在这个特性并不只局限在于 React 框架中,其它前端框架也在借鉴。 我们都知道在 FLutter 开发中的一大痛点就…

图解 | 监控系统 Prometheus 的原理

本篇将会以图解的方式剖析 Prometheus 的原理。本文主要内容如下: 一、Prometheus 是什么? ELK Stack 日志收集和检索平台想必大家应该比较熟悉,Elasticsearch Filebeat Logstash Kibana。 ELK 架构 而 Prometheus 就相当于一整个 ELK&a…

功率放大器的主要指标有哪些呢

功率放大器是电子测量行业比较常见的能够放大信号源电压信号的仪器,虽然功率放大器的应用十分广泛,但是很多人对于功率放大器的主要指标参数还不了解,就让安泰电子来为大家介绍功率放大器的主要指标。 功率放大器的核心参数指标包括带宽、电压…