FFmpeg 以及帧率的解释

因为解决FFmpeg的帧率问题,正好目前所做的视频超分帧率内容有待探讨,因此对这两个问题进行总结,先易后难。

帧率

帧 Frame

简单的理解帧就是视频或者动画中的每一张画面,而视频和动画特效就是由无数张画面组合而成,每一张画面都是一帧。

帧数 Frames

帧数其实就是为帧生成数量的简称,可以解释为静止画面的数量,也就是说,如果一个动画的帧率恒定为60帧每秒(fps),那么它在一秒钟帧数为60帧,两秒钟帧数为120帧。值得一提的是手机视频拍摄中,无论是720P还是1080P基本都是30帧每秒,因为这个将涉及到手机手机硬件条件的GPU图形处理能力和存储能力。目前受到硬件迭代更新的影响,拍摄帧率有达到60FPS/120FPS,但基本还是30的倍数。

帧率 Frame rate

帧率是用于测量显示帧数的量度,测量单位为“每秒显示帧数”( Frame per Second, FPS)或“赫兹”( Hz)

视觉暂留

由于人眼的特殊生理结构,当所见到的画面帧率高于每秒约 10-12 帧的时候,就会认为是连贯性的视频或动画效果,此现象被称之为视觉暂留。此现象的产生原因是光对视网膜所产生的影像在光停止作用后,仍保留一段时间,研究认为其时值是二十四分之一秒。该研究结果是动画、电影等视觉媒体按照24帧率制作和传播的学术根据。

因此:电影放映的标准是每秒放映24帧,中国的电视、广告、动画播放每秒25帧,这个帧率属于PAL制式,在亚洲和欧洲电视台较为常用,而美国加拿大一般都是NTSC制式每秒29.97帧。

码率、帧率和文件大小

码率和帧率是视频文件的最重要的基本特征,对于他们的特有设置会决定视频质量。如果我们知道码率和时长那么可以很容易计算出输出文件的大小。

帧率:帧率也叫帧频率,帧率是视频文件中每一秒的帧数,肉眼想看到连续移动图像至少需要15帧。

码率:比特率(也叫码率,数据率)是一个确定整体视频/音频质量的参数,秒为单位处理的字节数,码率和视频质量成正比,在视频文件中中比特率用bps来表达

FFmpeg

这是非常齐全的包文件,可以做的事情非常多,功能较于会声会影强大太多。由FFmpeg延展开来对视频进行一个较为全面的认识与理解。
首先用一张简图看一下视频播放器的原理:

1、术语:

什么是影片?其实就是一组(很多张)图片,时间间隔很小的连续展示出来,人们就觉得画面中的人物在动,这就是影片。但实际上,如果一部影片里面的图片,我们原封不动的全部存起来,空间会很大很大,但是如果通过一定的算法把每一张图片压缩(编码)成帧,再把帧连起来变成流,再把不同的流放到某个容器里面,这就是平常可以看到的电影文件组成形式。比如文件 碟中谍4.H264.ACC.mkv,mkv表达了它的容器是.mkv的,且包含至少两个流:h264的视频流,ACC的音频流。这是一种典型的 牺牲时间来换取空间的做法。

容器(Container)——容器就是一种文件格式,比如flv,mkv等。包含下面5种流以及文件头信息。

流(Stream)——是一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据。

帧(Frame)——帧代表一幅静止的图像,分为I帧,P帧,B帧。

编解码器(Codec)——是对视频进行压缩或者解压缩,CODEC =COde (编码) +DECode(解码)

复用/解复用(mux/demux)——把不同的流按照某种容器的规则放入容器,这种行为叫做复用(mux);把不同的流从某种容器中解析出来,这种行为叫做解复用(demux)。

2、I帧、P帧、B帧 (http://blog.csdn.net/abcjennifer/article/details/6577934)

视频压缩中,每帧代表一幅静止的图像。而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。

I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)

P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。

从上面的解释看,我们知道I和P的解码算法比较简单,资源占用也比较少,I只要自己完成就行了,P呢,也只需要解码器把前一个画面缓存一下,遇到P时就使用之前缓存的画面就好了,如果视频流只有I和P,解码器可以不管后面的数据,边读边解码,线性前进,大家很舒服。但网络上的电影很多都采用了B帧,因为B帧记录的是前后帧的差别,比P帧能节约更多的空间,但这样一来,文件小了,解码器就麻烦了,因为在解码时,不仅要 用之前缓存的画面,还要知道下一个I或者P的画面(也就是说要预读预解码),而且,B帧不能简单地丢掉,因为B帧其实也包含了画面信息,如果简单丢掉,并 用之前的画面简单重复,就会造成画面卡(其实就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的B帧,B帧用的多,对不支持B帧的播放器 就造成更大的困扰,画面也就越卡。 一般平均来说,I的压缩率是7(跟JPG差不多),P是20,B可以达到50,可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。

3、将图片合并为视频
最近在项目中将超分的图片集合成为视频的过程中发现,用非标准帧率(25帧/秒)时,-r 参数指定并没有真正起作用,搜了一下起作用的指令应当如下: 即同时用 -r 参数设置帧率和fps filter设置帧率-vf fps=

ffmpeg -r 4 -i ./test%02d.jpg -vf fps=4 test.mp4

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值