资讯动态

从24fps到120fps:HyperFrames高帧率重建的补帧技术与实操指南

发布时间:2026/9/11 2:28:43 来源:尧图企业网站定制
手头有一段30年前的老素材导演想要一段丝滑的120fps慢动作但素材本身只有24fps每两帧之间根本没有真实存在的画面。大多数人的第一反应是打开某个“AI补帧”工具点一下“插帧到4倍”然后祈祷画面别闪成廉价动画片。我最近在整理HyperFrames这套高帧率重建流程时最大的感触是补帧这个操作被严重低估也被严重误解了。HyperFrames这个叫法在不同圈子里含义不太一样。在VFX和视频工程方向它通常指以一组帧为处理单元、通过光流做运动补偿的高帧率重建流程在VR和空间视频方向它又可能指把多视角帧打包成的高维数据结构。我这篇文章聊的是第一种把低帧率素材通过运动估计和帧合成重建出更高帧率、并且时序稳定不闪烁的画面。我会把这套流程从原理到实操拆开讲包括我踩过的坑、实验后确定的参数区间以及哪些素材碰都不该碰补帧。如果你手头正好有老素材想提速帧率或者在做影视慢动作、游戏回放、广电级交付这篇文章应该能帮你少走不少弯路。1. HyperFrames到底是什么一个被不同圈子反复使用的词1.1 从“高帧率”到“超帧”的跨度为什么这么大先说一个反直觉的事实HyperFrames并不是一个官方标准术语它更像一个“行业黑话”。在后期制作里它被用来描述一种处理范式——不再把视频当作一帧一帧独立的图片而是把连续若干帧看作一个整体单元通过分析帧与帧之间的运动关系生成原本不存在的中间帧。这种思路跟传统剪辑软件里“光流法补帧”有本质区别传统方法是对两个相邻帧做插值而HyperFrames的核心是把运动信息显式建模出来然后再用这个运动模型去合成任意时间点的画面。为什么需要这么做因为原生高帧率不是所有场景都能拍。高速摄影机虽然能拍到1000fps但价格、存储、灯光成本都是翻着倍往上涨。更常见的情况是素材已经拍完了只有24fps或者25fps但交付规格突然变成50fps、60fps甚至需要120fps的慢动作。这时候唯一可行的路线就是从已有的帧里“算出”缺失的帧。1.2 高帧率重建要解决的不只是“多几帧”很多人在这个阶段会犯一个错误觉得补帧就是把两帧之间平均一下多出几帧来播放起来更顺滑就行。如果真这么干结果就是重影和糊。真正的重建要解决三个问题第一运动估计要准。每一帧里的像素点在下一帧里移动到了什么位置必须算出来。这是整个流程的地基。第二遮挡区域要处理好。前景物体移动后原本被挡住的背景露出来了这部分像素在前一帧里根本不存在没有运动矢量可用。第三时序要稳定。单帧画面看着没问题但连起来播放时如果亮度、纹理、边缘在时间轴上抖动观众一眼就能看出这是个“人工补出来的视频”。这三个问题不解决帧率再高也只是数字游戏。HyperFrames这个名字之所以带“Hyper”我的理解是它不是简单地在时间维度上多塞几帧而是把时间当作一个连续变量让画面在任何时间点都可以被“查询”出来。这也是为什么光流插帧类模型比如RIFE、RAFT、FILM会成为这个方向的核心工具。2. 把24帧变成120帧的核心逻辑光流不是滤镜是运动建模2.1 插帧的本质是“预估运动轨迹”不是“生成像素”很多人第一次接触补帧时会以为AI是在“凭空画出”不存在的画面。实际上绝大多数补帧模型做的事情是先算出像素在两帧之间的运动路径再沿着这条路径把已知的像素放置到中间位置。用一个生活化的例子来理解你站在马路这边看到一辆车从左边开到右边你拍下了它出发时的照片和到达时的照片。现在让你画一张车在中间位置的照片你不会把两辆车都画上去而是会判断它的行驶轨迹把车画在轨迹中点。光流插帧里的“运动轨迹”就是每一个像素的“速度矢量”通常用光流场来表示。数学上最简单的帧间合成是线性混合I_out (1 - α) × I_0 α × I_1这里α是时间位置0到1之间。这个公式的致命问题在于如果物体在移动直接把两个画面的颜色平均得到的是一个半透明的重影而不是一个清晰的中间状态。加入光流场之后的合成方式完全不同。假设已经从第0帧到第1帧估计出一个光流场F那么对于中间时间点t我们需要把第0帧的像素沿着光流方向移动t × F的距离把第1帧的像素反向移动(1 - t) × F的距离然后在中间位置融合。这样运动中的物体在中间帧的位置是符合运动轨迹的画面自然就清晰了。2.2 前向光流、后向光流和遮挡问题的纠缠实际操作中光流估计通常需要计算两个方向从第0帧到第1帧的前向光流以及从第1帧到第0帧的后向光流。为什么要两个方向因为遮挡问题。想象一个简单场景一个人从镜头前走过他身后有一面墙。人在移动时墙的一部分被他挡住另一部分随着他的移动逐渐露出来。在前一帧里那块露出来的墙面是“不存在”的——它没有对应的像素可以跟踪。如果只用前向光流这部分的运动矢量就是无效的直接用它来插帧背景会像融化了一样扭动。解决思路是用后向光流检测遮挡区域。如果前向光流和后向光流不一致——比如前向光流说某个像素往左走了后向光流却找不到对应点——那这个像素大概率落在遮挡区域。针对这些区域模型会选择只信任其中一帧的像素或者用周围的背景信息来修复而不是硬把两个方向的颜色混合在一起。这也是为什么我建议不要只看模型的输出效果最好要能可视化它的光流和遮挡掩码。RIFE这类开源工具一般都会在推理时生成中间光流图你把它叠加到画面上看一下就能很直观地判断当前参数下哪些区域运动估计是失效的。这一步对调参的帮助远超你在效果图上肉眼盯着看好几个小时。2.3 模型选型RIFE、RAFT、FILM到底该用谁市面上补帧模型不少但真正经得住工程考验的其实就那么几个流派。我按自己的使用经验整理了一个对比模型速度精度典型场景我的评价RIFE极快中等偏上实时预览、快速出片工程首选能扛住大多数素材RAFT慢很高需要精细化光流分析适合做光流预计算不太适合直接逐帧推理FILM较快高大幅率插帧对遮挡处理比较聪明但显存占用偏高DAIN慢中等早期项目现在看已经有点过时不推荐新项目使用Topaz Video AI取决于显卡较高一键式处理封装最好但黑盒难以精细控制RIFE家族的模型比如RIFE 4.0之后的版本使用的是IFNet结构核心特点是“任意时刻插值”和“轻量快速”。在RTX 4090上一个1080p的帧对做单次插帧耗时大概在几十毫秒量级几乎可以实时。它的短板是在快速运动和复杂遮挡下会产生边缘断裂但通过调高推理时的迭代次数和光流平滑参数大部分情况都能压下去。RAFT的优势在于光流场质量高但代价是速度慢。实际工程里我会在前期用RAFT对几个关键片段做光流可视化判断素材的运动复杂度再决定要不要上更重的方案。FILM则在光学流与合成网络之间做了更精细的配合在处理大位移目标时优势很明显但显存需求也水涨船高。选型建议就一条如果只是要快速出一个可交付的高帧率成片RIFE系列足够如果做的是电影级修复项目对每一帧都有质量要求那就在关键片段上用RAFT做消融对比再决定最终管线。3. 一套可以复现的高帧率重建管线从老素材到120fps的完整实操3.1 预处理这一步决定了光流解算的上限很多人都急着跳到插帧那一步结果在低质量素材上反复调参都救不回来。我自己的血泪教训是预处理没做好后面全是白费。第一步是去隔行。老素材尤其是DV带、电视转录的内容很多是隔行扫描的每一帧其实是两个半帧拼起来的。直接对隔行素材做光流运动边缘会出现明显的梳状条纹光流场在这些区域会完全错乱。先用yadif这类去隔行滤镜处理一遍再进入插帧流程。FFmpeg命令参考ffmpeg -i input.mov -vf yadif1 deinterlaced.mov第二步是色彩一致性处理。如果素材由多个镜头拼接而成不同镜头之间的白平衡和曝光可能差异很大。光流模型对像素颜色的变化非常敏感同一个物体在相邻两帧里颜色发生跳变模型会倾向于认为“发生了运动”结果就是画面扭曲。预处理阶段把每个镜头的色彩做一次匹配让相邻帧的色调尽量连续插帧的稳定性会有一个质的提升。第三步是必要的降噪。光流估计对高频噪声极其敏感噪声会让模型的运动矢量在平坦区域出现随机抖动导致补出来的帧在播放时会有细碎的闪烁。这里要提醒一句降噪不是越狠越好过度降噪会把皮肤的肌理、头发的发丝这些细节磨掉插出来的帧看着干净但已经失真了。我的做法是对高ISO素材做轻度时域降噪对普通素材基本不动。3.2 运动估计与插帧参数把模型调整到“顺手”的状态预处理做完就进入核心的解算阶段。以RIFE家族的开源实现为例一个完整的插帧流程大致是读入相邻两个帧、计算光流、生成中间帧、对遮挡区域做修复、输出。具体到命令级的操作如果用的是社区里常用的RIFE推理工具一般能看到几个关键参数插帧倍数、光流平滑系数、是否启用遮挡修复、迭代次数。一般来说插帧倍数不是越高越好。把24fps素材直接8倍插到192fps效果通常不如先2倍到48fps、再2倍到96fps这种分步过程来得好。原因在于8倍的一次性插值意味着模型要在一个非常大的时间跨度上做运动估计光流在大位移区域很容易丢失目标分步插值时每一步的时间跨度都小运动估计的可靠性更高。当然你也可以在同一帧对上反复推理多次做逐级插值但那样累积计算量也很大速度反而慢。我的经验是如果目标帧率不超过原始帧率的4倍一次性插值问题不大超过4倍用2倍-2倍-2倍的分步策略。光流平滑系数这个参数很多教程一句话带过但它在实际项目中特别关键。这个系数控制的是光流场在空间上的平滑程度。系数越大光流场越“规整”适合平滑、稳定的镜头系数越小光流场能保留更多细节适合复杂、多目标运动的画面。一般从0.3上下开始调画面出现边缘扭曲就调高画面出现运动断层就调低。3.3 合成与后处理从单帧“好看”到整体“稳定”插帧完成后光看单帧是没有意义的必须按目标帧率合成视频再逐段反复播放检查。合成这一步推荐在FFmpeg里完成直接按PNG序列导入再编码ffmpeg -framerate 120 -i output_%06d.png -c:v libx265 -crf 14 -pix_fmt yuv420p output_120fps.mp4这里有个容易被忽略的细节如果用ProRes中间格式做后期建议在编码输出时保留高位深等剪辑调色完成后再统一压缩交付。如果用H.264/H.265直出CRF建议控制在14到18之间太高的压缩率会在纹理复杂的区域引入块效应块效应又会干扰光流追踪形成恶性循环。后处理阶段最需要盯的是时间轴上的稳定性。具体来说要重点观察三个地方一是静态背景区域会不会出现纹理蠕动二是运动物体的边缘会不会有断裂或锯齿三是亮度会不会出现逐帧闪烁。前两个问题通常在插帧参数调整后就能缓解第三个问题如果特别严重可能是素材本身有严重的白平衡漂移需要回到预处理阶段重新做色彩匹配而不是在后处理里强行压亮度。3.4 编码输出和音频对齐最后一公里最容易翻车补帧只动画面音频时间不变这是一个看似简单但很容易坑人的事情。假设24fps的素材时长10秒插帧到120fps后视频帧数变成原来的5倍但播放速率如果按120fps走时长依然是10秒音频不需要做任何拉伸。问题出在剪辑软件里如果你把新视频导入一个24fps的时间线软件会重新解释帧率导致画面时长变成原来的5倍音画就会完全错位。所以输出时一定要把帧率信息写对导入剪辑软件时也要手动确认“解释素材”为120fps而不是自动套用序列帧率。4. 实测三种典型素材后我调整了哪些参数为什么4.1 老旧纪录片素材24→48fps的真实体验这是我测试最久的一类素材。老纪录片的特点是噪点重、画面偏软、运动多为缓慢摇镜和人走动的中景。最初直接按默认参数跑结果人物轮廓边缘出现了细碎的抖动像烧开的开水一样翻滚。排查后定位到两个问题。第一是噪点干扰了光流。老素材的颗粒噪声在光流模型眼里就是无数个微小运动目标导致光流场变得杂乱。对策是在预处理里加一道轻度的时域降噪压掉颗粒但保留画面的锐度。第二是光流平滑系数偏低。平移摇镜占据大部分画面这种情况下光流场本来就应该是高度一致的稍微调高平滑系数就能让运动矢量更统一抖动问题立刻缓解。最终这套素材的参数是2倍插帧平滑系数0.4启用遮挡修复先轻度降噪再进插帧。输出48fps后观感非常接近原生48fps拍出来的效果。4.2 高动态体育画面慢动作对运动模糊的考验体育慢动作是另一个极端。它的问题不在于噪点而在于运动模糊。拍摄时如果快门速度不够快快速移动的人体在每一帧里都会带着拖影。补帧模型面对有运动模糊的帧对时会尝试在两条模糊轨迹之间找到一个中间状态结果经常是物体的位置移动对了但模糊的方向和长度看起来跟运动速度不匹配画面有一种“虚中带抖”的诡异感。这种素材我的建议是不要盲目追求高倍率。25fps的素材补到100fps做5倍慢动作需要中间生成三帧但源素材的运动模糊信息根本不足以支持这么精细的中间状态还原。实测下来25→50fps的效果可以接受50→100fps时伪影开始明显增多。如果一定要高倍率我建议在拍摄阶段用更高的快门速度而不是完全依赖后期。4.3 动画与平面素材最容易被伪影击穿的类型动画片、MG图形这类素材看起来简单——色块大、边缘清晰、没有噪点——但它们恰恰是补帧最容易翻车的类型。原因在于动画的“运动”常常不是真实的物理运动而是逐帧位移的图形。人物的手臂可能上一帧在左边下一帧直接跳到右边中间没有任何过渡姿势。光流模型拿到这样的帧对时会尝试给每一块像素找一个“合理”的运动轨迹但角色肢体的跳变本身没有物理轨迹可言模型只能硬编一个结果就是肢体在中间帧里扭曲成一个不可名状的形状。对这类素材我踩坑之后得出的结论是大部分传统动画不适合光流补帧。如果你必须处理可以用RIFE试一次但一定要把中间帧单独提取出来逐帧检查不要图省事直接合成整段。但凡看到人物五官错位、手臂断裂就果断放弃该片段。4.4 几张实测结果和参数对照素材类型原始帧率目标帧率推荐模型光流平滑系数是否启用遮挡修复是否降噪老纪录片摇镜人物24fps48fpsRIFE0.4是轻度体育比赛慢动作25fps50fpsFILM0.2是否赛璐璐动画24fps48fps不建议补帧——否现代电影级素材24fps60fpsRIFE0.3是否大范围航拍延时30fps60fpsRIFE0.5是是5. HyperFrames的边界哪些素材真的不适合补帧5.1 直接劝退的三类场景说实话做了这么多测试之后我反而更清楚什么情况该收手了。第一类是强遮挡加上快速运动的组合比如树林里奔跑的人、人群密集的街头这类场景里每一帧都有大量像素在消失和出现光流模型再强也补不出真实的遮挡关系。第二类是低频纹理区域比如大面积的纯色墙面、天空、水面反光这些区域没有足够纹理特征给光流做匹配补出来的帧会出现一种类似“波光粼粼”的纹理蠕动。第三类是大幅度镜头快速摇移尤其是带有运动模糊的快速摇镜光流会几乎完全失效补帧结果惨不忍睹。还有一个容易被忽视的场景是字幕和UI。新闻节目、游戏录屏里如果有滚动字幕或UI动画插帧后字幕边缘会闪得非常明显。对这类素材建议在插帧前用工字形遮罩保护字幕区域或者干脆先用OCR提取字幕层补完帧再叠加回去。5.2 换个思路把光流当作“中间表示”来用而不是最终结果在持续折腾HyperFrames的过程中我自己的使用方式也在变化。最开始我试图用它解决所有帧率问题后来发现很多场景下让模型直接输出“中间帧”并不是最优解。更成熟的做法是把光流当作一种中间表示来使用。比如在视频编辑里做重定时间retime传统方式是用光流法在时间轴上重新采样这本质上跟补帧是一回事但如果你把光流场单独导出在调色、合成、甚至稳定阶段复用同一份运动数据整个流程的稳定性和效率都会好很多。这也是为什么我会在项目里保留光流可视化这一步——它不止是调参用的还能成为后续特效合成的“运动依据”。5.3 如果继续做我下一步会尝试什么High-level的路线已经很清楚了更精准的光流、更聪明的遮挡处理、更强的多帧时序一致性约束。具体到实际操作我下一步会在两个方向上做实验一是把RIFE和RAFT做级联先用RAFT算高精度光流再用RIFE的合成网络基于这份光流做插帧看看能不能兼顾RAFT的精度和RIFE的速度二是在插帧后加入一个时域稳定网络把时间轴上每一帧的运动矢量再做一次全局一致性校验减少长时间序列上的漂移。这套流程折腾下来我个人的体会是工具越来越容易拿到但真正的瓶颈在于对“运动”本身的理解。光流模型给的是统计意义上的最优解它不懂“这个人跑步的姿势应该是什么样的”也不懂“这个手臂在物理上不可能反着弯”。所以每次跑完一个项目我都会把明显失败的片段单独截出来反复看慢动作弄清楚是光流丢了、遮挡错了还是运动模糊在误导模型。看得多了你对一个素材能不能补、补多少倍、用哪套参数会形成一种近乎直觉的判断这可能是比任何工具都值钱的东西。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价