视频逐帧增强:mp4 mov avi 全流程处理
先决条件
- 已装好 ffmpeg(见 ffmpeg 安装)
- 显存 ≥ 12GB(整图 + 背景增强)
- 视频分辨率 ≤ 1080p(4K 视频逐帧处理太慢太吃显存)
一行命令
python inference_codeformer.py --bg_upsampler realesrgan --face_upsample -w 1.0 --input_path video.mp4
参数和图片处理完全一样,只是 --input_path 换成了视频文件路径。
强烈建议的参数选择
| 参数 | 推荐值 | 理由 |
|---|---|---|
| -w | 1.0 | 视频场景身份绝对优先。同一人的相邻帧如果 w 太小,前后帧可能长相微变(闪烁) |
| --bg_upsampler | realesrgan | 背景也要修,否则人脸和背景闪烁频率不同 |
| --face_upsample | ✅ | 让修复脸和原视频分辨率匹配 |
| -s | 2 | 通常视频不需要上 4 倍 |
处理流程(更透明)
脚本内部做了这些事:
video.mp4
↓ ffmpeg 抽帧
tmp_frames/000001.jpg, 000002.jpg, ...
↓ 逐帧执行整图修复
tmp_frames_enhanced/000001.jpg, 000002.jpg, ...
↓ ffmpeg 合成(保留原音频)
results/CodeFormer_w1.0/video_enhanced.mp4
↓ 清理临时帧
tmp_frames/ 和 tmp_frames_enhanced/ 删除
所以视频处理的耗时 ≈ 图片张数 × 单张处理时间。30fps 的视频,10 秒就是 300 帧。
耗时估算
| 视频规格 | RTX 3060 | RTX 3080 | T4 云 GPU |
|---|---|---|---|
| 10s 720p | ~8 分钟 | ~5 分钟 | ~12 分钟 |
| 10s 1080p | ~15 分钟 | ~9 分钟 | ~22 分钟 |
| 60s 1080p | ~1.5 小时 | ~50 分钟 | ~2.5 小时 |
视频处理是CPU + GPU 混合型任务:ffmpeg 抽帧合成靠 CPU,推理靠 GPU。瓶颈通常在 GPU 推理速度。
显存管理
显存紧张时(< 12GB)
# 关掉背景增强
python inference_codeformer.py -w 1.0 --input_path video.mp4
代价:背景不修,人脸和背景可能有"分辨率差"感。
4K 视频
4K 逐帧处理在 12GB 显存上很容易 OOM。解决方案:
- 先用 ffmpeg 把视频缩到 1080p
- 修完再放大(或保持 1080p)
常见视频格式支持
- ✅ mp4(H.264 / H.265)
- ✅ mov
- ✅ avi
- ✅ mkv(ffmpeg 支持的容器基本都可以)
不支持:实时视频流、USB 摄像头直接输入。先录屏保存成文件再处理。
处理后效果观察
时间一致性
CodeFormer 没有显式时间约束(不像某些专门的视频修复模型),但 Codebook token 是确定性的,同一人的相邻帧通常预测出相似 token → 自然保持时间一致性。
但如果原图本身抖动严重(手机手持拍摄),帧间人脸位置变化大,还是会有轻微闪烁。
音频
原视频的音频会被完整保留(ffmpeg 合成时 -c:a copy),不会有任何变化。
编解码格式
输出视频默认是 mp4 (H.264),码率和原视频接近。如果需要特定格式,处理完后用 ffmpeg 再转一次:
ffmpeg -i results/output.mp4 -c:v libx265 -crf 20 output_h265.mp4
批量处理多个视频
脚本的 --input_path 也支持放文件夹,里面放多个视频:
python inference_codeformer.py \
-w 1.0 --bg_upsampler realesrgan --face_upsample \
--input_path videos_folder/
会自动识别文件夹里所有视频文件并逐个处理。