有几种“标准”帧速率,但是越来越多,以至于支持任意帧速率要比专门支持许多特定帧速率容易。对于像VLC这样的软件播放器来说尤其如此。
对VARIABLE fps的支持越来越多。(VFR,可变帧频)。在同一视频中,帧之间的间隔不是恒定的。许多视频容器文件格式(例如Matroska(.mkv
)或MPEG-4(.mp4
与Apple的关系密切.mov
))甚至都不存储FPS编号,而是存储时基(例如1/30秒),然后每帧时间戳是该时基的倍数。恰好发生在CFR(恒定帧速率)视频中,每帧之间的间隔是时基的一个或少量整数单位。
丢弃了几乎重复的帧的安全摄像机镜头将是VFR的明显用例。更重要的是,如果使用不充分利用时间冗余(具有帧间(p和b))的简单视频编解码器对其进行压缩。(ffmpeg -vf mpdecimate
试着丢掉近乎重复的帧。-vsync 2
在输出到mp4时使用,因为出于某种原因,它不是该多路复用器的默认值,但对于mkv是这样。)
另一个案例是现代智能手机。例如,我兄弟的Moto G(第二代)录制了VFR视频。当传感器需要更多光线时,它会降低帧速率。在手机的软件创建的mp4上运行mediainfo的一些输出记录在室内:
Bit rate : 9 999 Kbps
Width : 1 280 pixels
Height : 720 pixels
Display aspect ratio : 16:9
Rotation : 90°
Frame rate mode : Variable
Frame rate : 16.587 fps
Minimum frame rate : 14.985 fps
Maximum frame rate : 30.030 fps
单个VFR视频流的播放并不困难。该软件只是准备好显示下一帧,休眠直到应显示它,然后唤醒并显示它。
考虑到人类只有在监视器显示视频帧时才能看到视频帧,事情变得更加复杂。VFR监视器存在,但仍然很少。(Google表示g-sync freesync)。
在将显示的图像扫描到显示器上时更改显示的图像会导致视频难看(通常在关闭vsync的情况下玩游戏时可见)。这限制了播放器以50或60Hz更改显示的图像。(CRT支持在一定范围内的任意vrefresh速率,但是在所有正确的时序下准备模式都是很复杂的,因此大多数人只使用了几个固定的刷新率。现在人们拥有的LCD始终仅支持固定的刷新率。直到无论如何,freesync监控器更加普及。我真的很期待。
因此,如果视频帧速率不是监视器刷新率的倍数或因子,则某些帧将显示3次监视器刷新,而有些帧显示2次,例如,即使视频的恒定帧率为25FPS (在60Hz显示器上)。
当您要使用多个剪辑并在它们之间渐隐,画中画或各种其他效果时,事情变得更加复杂。如果您可以假设所有剪辑同时具有新的帧,那么编写视频编辑软件就容易得多。(它们强制剪辑对齐以捕捉到整个帧)。
这就是为什么NLE(例如kdenlive或pitivi,选择随机的Free软件示例)更有可能迫使您使用固定的FPS,并从剪辑中删除/复制帧以使其与该帧速率匹配。您选择的CFR可以是任意的,但对于整个“项目”,它通常必须恒定。
(是否有任何NLE可以完全与VFR剪辑配合使用,并在这种情况下产生VFR输出?)
总而言之,我想一旦有了变量同步监视器和操作系统,唯一阻碍我们前进的就是视频编辑。广播,因为显然CFR对此也很重要?
如果您想知道,令人讨厌的非整数帧速率的29.970(实际上是30000/1001)和23.976(实际上是24000/1001,来自电视转播)是彩色NTSC的缺点。 搜索1.001。如果他们只愿意冒一些B&W设备无法处理音频子载波的0.1%额外频率的风险,那么世界将免于这种胡说八道。(我想我在某处看到了另一篇文章,听起来似乎很多集都可以,但是他们不确定完美的兼容性。维基百科表示听起来没有集可以处理高0.1%的音频子载波。IDK事实。)
不过,令人讨厌的帧速率是广播的次要缺点之一。真正的隔行扫描一直是现代(所有像素一次点亮)屏幕上视频质量的祸根,并且这种情况不会改变。我仍然不明白为什么高清电视会隔行扫描。为什么曾经定义1080i60,而不是使用720p60为运动和事物获得相同的时间分辨率?它类似于1920x540p60,但是在奇数场和偶数场之间有一个愚蠢的垂直偏移,需要在接收端进行大量计算才能使其看起来不可怕。
编辑:
对于您的用例,我绝对建议在本机FPS上进行归档。不要丢帧丢掉任何信息。不要复制帧并使文件变大(或使您的h.264编码器花费更多时间注意重复项,并输出一个充满跳过宏块的帧,整个帧仅占用20个字节)。
将来,当我们希望所有的Freesync显示器都可以播放任何帧率时,您将需要撤消上拉至24fps的操作,以便视频播放更加流畅!或者,如果以某种方式无法保持自由同步,或者LCD之后显示的是CFR,则速率转换最好还是在播放时完成。这并不是24fps甚至可以在60Hz显示器上完美播放。(我没有从视觉上注意到一些帧显示为3 * 1/60的帧,而有些帧显示为2 * 1/60的事实,但这是事实。)
如果您在使用Quicktime时遇到问题,请使用IDK。也许要确保Handbrake正在以h.264比特流以及容器设置正确的帧速率来制作文件。(是的,h.264标头显然可以存储帧速率,与容器所说的分开。请参阅文档mkvmerge --fix-bitstream-timing-information
。然后尝试将其与--default-duration 16fps
用于制作mkv文件。然后将其复用回mp4,看看是否可以解决quicktime? )或者也许有一种方法可以首先使用mp4工具。参见例如:https : //askubuntu.com/questions/370692/how-to-change-the-framerate-of-a-video-without-reencoding
我可以保证任意帧率mp4都是有效的,甚至可变帧率mp4都是有效的。如果Quicktime错了,那很可能是Quicktime的错。也许是Handbrake的错误导致了文件错误。我通常直接使用ffmpeg,因为我是命令行忍者。