codeformer 中文文档 下载 App

视频逐帧增强:mp4 mov avi 全流程处理

先决条件

一行命令

python inference_codeformer.py --bg_upsampler realesrgan --face_upsample -w 1.0 --input_path video.mp4

参数和图片处理完全一样,只是 --input_path 换成了视频文件路径。

强烈建议的参数选择

参数推荐值理由
-w1.0视频场景身份绝对优先。同一人的相邻帧如果 w 太小,前后帧可能长相微变(闪烁)
--bg_upsamplerrealesrgan背景也要修,否则人脸和背景闪烁频率不同
--face_upsample✅让修复脸和原视频分辨率匹配
-s2通常视频不需要上 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 3060RTX 3080T4 云 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。解决方案:

  1. 先用 ffmpeg 把视频缩到 1080p
  2. 修完再放大(或保持 1080p)

常见视频格式支持

不支持:实时视频流、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/

会自动识别文件夹里所有视频文件并逐个处理。