从硬字幕说起:为什么我们需要 VSR
在视频剪辑、二创和影视加工场景里,内嵌到画面里的'硬字幕'一直是特别棘手的问题。你无法通过关闭字幕轨道来清除,直接裁剪会破坏构图,简单模糊或马赛克又会在画面上留下明显的补丁。传统做法往往要在画质和效率之间做妥协。
开源项目 video-subtitle-remover (VSR) 把问题拉到了 AI 视频修复的维度:用深度学习模型自动检测字幕区域,再通过图像修复算法把文字擦掉,并用背景自然填补。它支持完全本地运行,无需调用第三方 API,且能无损分辨率输出。
项目地址:GitHub - YaoFANGUK/video-subtitle-remover
VSR 整体架构:从检测到修复的闭环
先用一张结构图把整体流程串起来,再逐块拆解。

输入层:视频与图片的统一抽象
无论是视频还是图片,VSR 都将其统一抽象为帧序列来处理。
- 视频:通过 OpenCV
cv2.VideoCapture逐帧解码,获取帧号和图像数据。 - 图片:流程相同,只是帧数固定为 1,简化为单帧图像修复。
整个项目的入口是 backend/main.py,核心类包括负责文本检测与定位的 SubtitleDetect,以及后续负责掩码生成、修复和视频写回的 SubtitleRemover 等。
字幕检测:PaddleOCR + DB 检测器
VSR 没有重复造轮子,而是直接集成了 PaddleOCR 的文本检测能力。
关键点在于检测模型的选择与流程控制:
- 检测模型:使用 DB(Differentiable Binarization)文本检测算法,这是 PaddleOCR 默认的检测模型之一。模型路径通过
config.DET_MODEL_PATH指定,位于backend/models/V4/ch_det目录。 - 检测流程:对每一帧图像调用
TextDetector,输入原始帧(RGB),输出文本检测框dt_boxes(多边形)。随后将多边形框转换为坐标(xmin, xmax, ymin, ymax),用于生成掩码。 - 区域过滤:支持传入
sub_area自定义字幕区域,只保留落在该区域内的文本框。通过unify_regions等方法,将连续帧中相似位置的文本框统一,避免掩码频繁跳动。
从架构上看,这里完全可以替换成其他 OCR 或文本检测模型,VSR 只是选择了成熟可用的 PaddleOCR。
三种修复算法:STTN、LaMa 与 ProPainter 的对比
VSR 最大的亮点在于把前沿的视频/图像修复模型整合到了一个可工程化落地的工具中。配置文件 backend/config.py 中定义了三种 InpaintMode:
class InpaintMode(Enum):
STTN = 'sttn'
LAMA =
PROPAINTER =


