RIFE 视频补帧会在已有相邻帧之间生成中间帧。希望播放更顺滑时,增加帧数的同时提高输出帧率;希望慢动作时,增加帧数但保持较低播放帧率。这两种目标不同,操作前先确定自己要哪一种。
本文使用官方 ECCV2022-RIFE 项目的命令行做两倍补帧,适合会用终端的用户。依据 2026 年 10 月 1 日核对的 README、依赖和推理源码编写,未下载模型运行,没有测画质、速度或音轨成功率。以下采用 Linux/WSL、Python 3.10 与可用 CUDA GPU 作为学习环境,不宣称任意机器兼容。

准备环境、短视频与模型
准备一段有权使用的、几秒钟的 clip.mp4,先用恒定帧率素材试验;复杂可变帧率、HDR、旋转标签和多音轨素材要另做格式检查。本教程输出不保证保留原素材的全部编码和色彩元数据。
按 项目 README安装并从它的官方预训练 HD 模型链接下载,解压到 train_log。克隆代码不会自动获得该权重,不要让压缩包多套一层目录。另安装 FFmpeg,让 ffmpeg 与 ffprobe 命令都能找到。
git clone https://github.com/hzwer/ECCV2022-RIFE.git
cd ECCV2022-RIFE
python3.10 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
python -m pip install moviepy==1.0.3
ffmpeg -version
ffprobe -version
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
项目依赖限制 NumPy 不高于 1.23.5,因此不要随意改用最新 Python 与 NumPy。源码的音轨函数导入 moviepy.editor,本例固定 MoviePy 1.0.3,避免新主版本改变模块入口。PyTorch 与 torchvision 还需要匹配设备与彼此的版本;若 CUDA 检查为 False,先按 PyTorch 安装页修正当前环境。本文没有完成这个环境的端到端验证。
先记录源视频的帧率、时长与音轨
把 clip.mp4 放到项目目录,先执行这条检查命令。r_frame_rate 和 avg_frame_rate 是分数字符串,例如 24/1 表示 24 fps;复杂素材中它们可能不同。nb_read_frames 是实际解码计数,可帮助判断是否读到了完整片段。
ffprobe -v error -count_frames -show_entries stream=index,codec_type,width,height,r_frame_rate,avg_frame_rate,nb_read_frames:format=duration -of json clip.mp4
保留输出,尤其是源帧率、总时长和是否存在 codec_type 为 audio 的流。音轨本来不存在,就不能把补帧后无声归因于模型。
做两倍补帧,先不指定 –fps
python inference_video.py --video=clip.mp4 --exp=1 --output=clip_2x.mp4
真实推理源码中,exp=1 对应两倍补帧;未传 –fps 时,输出帧率按源帧率乘以 2 设置,并在结束后尝试转移音轨。因此对于 24 fps 源片,目标输出约为 48 fps、时长接近原片。帧数和编码边界可能影响末尾时长,仍要读输出验证,不能只看文件名。
脚本会尝试使用 FFmpeg 合并音轨,失败时可能输出无声视频。指定 –fps 或输出 PNG 序列时,这个脚本不走同样的音轨合并分支。不要看到“audio will be merged”日志就认定已经成功。
高分辨率显存不足时,README 提供 –scale=0.5 作为尝试方向;这个参数控制光流处理分辨率,不等于把最终视频固定缩小一半。先用短片判断画面是否出现异常,再处理整段。
输出后做三个检查
ffprobe -v error -count_frames -show_entries stream=index,codec_type,width,height,r_frame_rate,avg_frame_rate,nb_read_frames:format=duration -of json clip_2x.mp4
- 比较帧率与时长。正常速度两倍补帧应提高帧率,时长接近原片;若帧数增加却时长明显变长,检查是不是人为设置了较低输出 fps。
- 确认输出有没有 audio 流,再播放开头、中间、结尾,检查声音是否同步。存在音轨不等于时间完全正确。
- 逐帧看快速移动的手、细线、遮挡边缘和镜头切换,查重影、拉扯或多出来的物体边缘。画面更顺滑但变形严重也不算合格。
音轨合并失败且补帧后的时长与源片一致时,可以手动从原片重新封装一份,另存文件,不覆盖检查用的原结果:
ffmpeg -i clip_2x.mp4 -i clip.mp4 -map 0:v:0 -map "1:a?" -c:v copy -c:a aac -shortest clip_2x_audio.mp4
这里会将音频转为 AAC。原片有多个音轨时,确认映射结果是否包含所需轨道;再对新文件执行 ffprobe 并回听。若你主动制作慢动作,不能直接把正常速度原音轨放回去当同步音频。
需要慢动作时怎样想参数
例如 24 fps 素材使用 exp=1 增加中间帧,但指定 –fps=24,会把增加的帧按 24 fps 播放,时长通常接近两倍。这个说明是参数关系示例,没有运行该视频。此时脚本不自动合并原音轨,慢动作的声音应另行设计或正确变速。
补帧不是超分辨率,也不能找回原片没有拍到的真实动作。镜头切换处先分段处理,快速运动模糊严重时降低补帧倍数或保留原片。项目源码使用 MIT 许可,素材、权重和后续软件的具体使用条件仍需分别核对。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31954.html