从 NVIDIA 即时重放、ShadowPlay 或其他游戏录像中,自动找出意外穿插的桌面帧并去除闪屏。
支持批量处理,保持原始时间轴,不覆盖源视频。
某些即时重放录像会把游戏画面和桌面捕获交替写入同一个视频。播放时,桌面可能只出现一帧或连续几帧,看起来像频繁闪屏。手动逐帧剪辑不仅费时,还容易造成音画偏移。
ReplayFlashFix 会扫描低分辨率画面特征,识别与前后游戏帧不连续的桌面来源,再让 FFmpeg 在原始时间戳上过滤这些帧。处理发生在本机,不会上传录像。
- 拖放视频,或一次选择多个文件和整个文件夹
- 自由勾选本轮需要处理的录像
- 显示每个视频的扫描、检测、预览和编码进度
- 自动估算剩余时间,支持安全取消
- 处理完成后直接打开视频、预览或检测报告
- 深色/浅色主题,界面处理期间保持响应
- 在 GitHub 仓库右侧打开 Releases。
- 下载
ReplayFlashFix-Windows-x64.zip并完整解压。 - 双击
ReplayFlashFix.exe。 - 拖入视频,保持默认的“自动(优先显卡)”,点击 开始智能修复。
便携版不要求安装 Python。首次启动如被 Windows SmartScreen 提示,请确认文件来自本项目的 GitHub Release。
需要 Windows 10/11 和 64 位完整版 Python 3.10 或更高版本(包含 Tcl/Tk)。推荐使用 python.org 标准安装包;嵌入式/精简运行时不适合启动图形界面。
- 下载或克隆本仓库。
- 双击
启动 ReplayFlashFix.cmd。 - 首次运行等待项目在
.venv中安装依赖,之后会直接打开界面。
也可以手动启动:
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\pythonw.exe .\run_gui.pyw如果没有指定统一输出目录,结果会写入每个源视频旁边的 去闪屏输出 文件夹:
去闪屏输出/
├─ 游戏录像_已去闪屏.mp4
├─ 游戏录像_20260914_141819_检测报告.json
├─ 游戏录像_20260914_141819_候选帧.jpg
└─ .flashfix_cache/
源视频不会被覆盖;同名结果已经存在时,会自动添加 _2、_3 等编号。
- FFmpeg 将每一帧缩小为
64×36,再提取分块颜色特征。 - 检测器寻找两类高置信度异常:夹在连续游戏画面之间的突变帧,以及桌面/游戏交替出现的双来源序列。
- 通过跨时间复现、画面聚类和多轮检测,减少正常转场带来的误判。
- 在原始画质视频上使用
select过滤器移除异常帧,但保留其余帧的原始 PTS。 - 异常帧的微小时间间隙由前一帧自然保持,音频仍沿原时间轴播放,因此不会逐渐失去同步。
这是启发式检测工具。对极端剪辑、频繁全屏转场或两个内容源非常相似的录像,建议先启用“仅扫描”并查看候选帧预览。
- 优先支持普通 SDR 游戏录像。当前视频导出为 8 位 H.264,并复制原音轨;识别到 HDR/PQ/HLG 或 BT.2020 时会保留检测报告并跳过导出,避免颜色异常。
- 这是重新编码处理,并非无损压缩。奇数宽高会在右侧/底部最多补 1 像素,以兼容 H.264。
- 可处理无音轨及多音轨录像;仅导出第一条视频流,不复制字幕、附件或额外视频流。
- 报告时间和
-DesktopAt参考时刻按标称帧率估算。对于可变帧率(VFR)录像,请以报告帧号与预览图为准;编码按保留帧的时间戳输出。 - 正常黑场、频繁转场与桌面内容相似时仍可能误判。未检出异常并不保证原片没有闪屏;首次使用建议先仅扫描,再确认预览。
- 首尾异常帧没有双侧参考,修复能力有限;片尾连续坏帧被移除时视频轨可能略短。工具不做运动插帧,也不重建缺失的游戏画面。
| 设置 | 默认值 | 说明 |
|---|---|---|
| 检测灵敏度 | 1.00 |
提高可捕获更轻微的差异,也可能增加误判 |
| 单次闪屏上限 | 8 帧 |
一次桌面闪屏可能连续出现的最长帧数;漏检连续闪屏时调大,误判正常转场时调小 |
| 重复检测轮数 | 4 轮 |
每轮在剩余画面中继续查找遗漏;调高可能提高检出率,也会增加耗时和误判概率 |
| 编码方式 | 自动 | 优先使用 NVIDIA NVENC,不可用或失败时回退到 libx264 |
| 输出画质 | 6 / 10 |
数值越大画质越好,文件通常也越大;只影响输出编码,不影响检测结果 |
| 候选帧预览 | 开启 | 生成“前一帧 / 疑似闪帧 / 后一帧”对比图,用于检查误判,不影响输出画质 |
| 扫描缓存 | 开启 | 调整参数重试时无需重新解码;源视频内容、大小或修改时间变化后会自动失效 |
图形界面之外,项目保留了适合自动化的命令行入口。
# 多选文件弹窗
.\修复闪屏.ps1
# 指定多个视频
.\修复闪屏.ps1 '.\视频1.mp4' '.\视频2.mkv'
# 递归处理文件夹
.\修复闪屏.ps1 'D:\录像' -Recursive
# 只检测,不编码视频
.\修复闪屏.ps1 '.\视频.mp4' -ScanOnly
# 指定已知桌面帧时刻,可帮助识别较长的桌面片段
.\修复闪屏.ps1 '.\视频.mp4' -DesktopAt '00:01:23.450','00:04:56.100'安装为 Python 包后也可以使用:
.\.venv\Scripts\python.exe -m pip install .
replay-flash-fix '.\视频.mp4' --sensitivity 1.15 --encoder auto如果当前终端未激活虚拟环境,也可直接运行 .\.venv\Scripts\replay-flash-fix.exe。
查看全部参数:
.\.venv\Scripts\python.exe .\remove_desktop_flash.py --help- 视频分析和编码全部在本地完成,没有网络上传功能。
- 默认从不覆盖源视频。
- 当检测器把超过 70% 的画面标记为异常且没有人工参考帧时,会停止编码并在报告中提示。
- 即使提供参考帧,标记整段视频为异常时也会停止编码。
- JSON 报告包含本机文件路径。提交 Issue 前可以先删除或替换其中的私人路径。
- 请勿将包含隐私、聊天窗口或个人信息的原录像直接上传到公开 Issue。
为什么输出文件可能比原视频大?
录像必须重新编码。显卡编码器和原录像的码率策略不同,文件大小不会完全一致。可以适当降低“输出画质”数值来减小文件;先用短片测试最合适的设置。
没有 NVIDIA 显卡可以使用吗?
可以。自动模式检测不到 NVENC 时会使用 CPU 的 libx264,只是处理时间通常更长。
漏掉了桌面帧怎么办?
先将灵敏度从 1.00 小幅提高到 1.10–1.25。命令行用户也可通过 -DesktopAt 提供一个已知桌面出现时刻。
正常游戏转场被标记了怎么办?
启用“仅扫描”,查看候选帧预览;若存在误判,将灵敏度调低到 0.80–0.95 后重新检测。扫描缓存会使第二次检测更快。
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements-dev.txt
.\.venv\Scripts\python.exe -m pytest
.\.venv\Scripts\python.exe -m ruff check src tests scripts remove_desktop_flash.py run_gui.pyw构建 Windows 目录式便携包:
.\scripts\build_windows.ps1构建脚本会先运行回归测试,再生成带离线文档、依赖许可证、BUILD-INFO.json 和 SHA-256 校验文件的 ZIP。发布标签时,GitHub Actions 会创建草稿预发布,方便发布前检查;详见 发布说明。
主要目录:
src/replay_flash_fix/
├─ engine.py # 特征扫描、检测、预览和编码
├─ gui.py # CustomTkinter 桌面界面
├─ cli.py # Python 命令行入口
└─ assets/ # 项目视觉资源
欢迎阅读 CONTRIBUTING.md 后提交 Issue 或 Pull Request。错误反馈请优先附上检测报告和日志,不必公开完整录像。
ReplayFlashFix 使用 MIT License。依赖和便携包内组件的许可证见 THIRD_PARTY_NOTICES.md。
NVIDIA、GeForce、ShadowPlay 及其标志是 NVIDIA Corporation 的商标。本项目是独立开源工具,与 NVIDIA Corporation 没有隶属、认可或赞助关系。
