谈谈变帧率视频(流)

本文所说的变帧率视频,或者动态帧率视频,是相对于固定帧率视频而言的,且特指视频流数据,不涉及音频流数据。固定帧率视频比较容易理解,即这个视频里的视频流的帧率等于某个固定值。

那当我们谈到变帧率视频,是指什么呢?

在正式探讨这个问题之前,我们先来重新复习一下视频帧率这个概念。众所周知,视频帧率的单位是帧/秒,即Frames per Second,FPS。

我们知道,一个视频的处理链路通常是复杂的,大致包括采集,编码,封装和解封装,解码,显示这些环节。在每个环节中处理视频帧时的速度,则对应着各自的一个帧率。

需要注意的是,处理视频帧的速度快慢对应的帧率,和有没有或要不要把这个帧率以某种方式保存到视频中是两回事。对视频处理链路中不同环节的从业者,可能他们所谈的帧率会有些不同,但相同的是都是一个表征速度的单位。

初中物理知识告诉我们,速度可分为瞬时速度和平均速度,显然当前我所谈到的视频帧率以及变帧率,都属于”平均速度”的范畴。

而变帧率的视频,并不是在视频处理链路的每个环节都存在。只有在给视频帧引入绝对物理时间戳值以后,才产生和存在了变帧率这个问题。而视频帧所对应的时间戳值,通常是由视频封装环节引入的。

为什么这么说呢?

在视频采集阶段,这个环节的输出是一些连续的YUV或RGB格式的帧,这些视频帧也被称为”裸数据”,除了像素值以外,再无额外的信息,也就当然不存在时间戳的信息。此时它的视频采集帧率是在采集这个行为发生过程中存在,而在得到的视频帧里是不存在的。

到了视频压缩编码阶段,视频编码这个行为在处理过程中有一个实际编码帧率,此外通常还会有一个允许用户设置的目标帧率。以主流H.264和H.265视频编码标准为例,在视频编码过程中可能会在SPS参数集里面写入与编码帧率相关语法元素。但这个写入的帧率实际上只是编码时设置的目标帧率值。且当一段视频压缩编码结束以后,码流里每一帧所对应的绝对时间戳信息是没有的,所以,编码环节也没有变帧率视频。

等到视频流和音频流都编码压缩以后,在对其进行封装的过程中,是会给每个视频帧引入绝对时间戳值的。因为在播放一段既有视频流又有音频流的视频时,需要保证音画同步,而音画同步的手段就是依据视频帧和音频帧的时间戳值。

如果我们深究一下,这个时间戳是哪个环节的时间戳呢?是采集完YUV帧的那个时刻,还是编码完YUV帧的时刻?我觉得应该是后者。对于生活中大多数视频的产生过程来说,采集,编码和封装过程是依次连续完成的动作,在视频帧和音频帧编码结束的那一刻,我们选择把帧的当前绝对时间值写到封装格式里去。

好的,我们再回到视频帧率上来,帧率计算是等于视频帧数除以视频时间。当相邻两个视频帧之间的时间不相等的时候,计算出来的帧率就是变帧率,如下图:

谈谈变帧率视频(流)

产生这种视频的情况不唯一,比如:

A视频:300帧10秒,固定帧率30fps

B视频:600帧10秒,固定帧率60fps

我们把这两个视频拼接在一起,得到一个900帧20秒的C视频。这个C视频就是一个变帧率视频。

这是为什么呢?

对于这段C视频,我们可以计算出三3个帧率值,分别是最小帧率30fps,最大帧率60fps以及平均帧率45fps。

最小帧率不等于最大帧率也不等于平均帧率,那他就是一个变帧率视频!

谈谈变帧率视频(流)

换个角度来看,假如视频是连续时间轴上一系列离散的点(帧)。那么恒定帧率视频就是在连续时间轴上点与点之间的间隔都相等。而变帧率视频则是连续时间轴上点与点之间的间隔不相等,且差异比较大。

所以,要判断一个视频是不是变帧率,看它的帧之间时间间隔就行了。变帧率问题因时间而起,那就让它也随时间结束。

古语有云,君子性非异也,善假于物也。真的要检测视频是否为变帧率,其实可以用现成工具,比如Mediainfo和FFmpeg

下图是Mediainfo探测的帧率模式信息:

谈谈变帧率视频(流)

也可以使用FFprobe工具来获取视频最大帧率和平均帧率值判断:

ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate,avg_frame_rate input.mp4

此外,FFmpeg有一个检测变帧率视频的filter,命令如下:

ffmpeg -i input.mp4 -vf vfrdet -an -f null –

思考一下

1.一个变帧率的mp4视频,解封装抽出它里面的视频码流,还是变帧率的吗?一个变帧率的mp4视频,解码它的视频流得到YUV还是变帧率的吗?答案都是否定的。

2.变帧率视频,会带给编解码哪些影响?

对编码来说,尤其在对一个变帧率视频进行转码处理的时候,码率控制可能会受到影响,设置的视频帧率会影响到码率bits的分配。对解码和显示来说,变帧率视频的最大帧率和平均帧率不相等,且可能值比较大,这个时候解码显示会不会存在卡顿问题。

作者:手撕编解码
原文:https://mp.weixin.qq.com/s/Y29lP1RCO3y1GYeYpwK6KA

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论