Easy4K Logo

Easy4K

一键视频超分补帧工具

把低清卡顿的视频,一次跑成高清高帧
拆帧 · AI 超分 · AI 补帧 · 合并 · 音频嵌入 · SDR→HDR
Stars开源许可证

基于 WinUI 3 (Windows App SDK 2.4) / .NET 10 的 Windows 桌面应用,工具与模型随程序自包含分发,无需配置环境变量。

一条处理链路跑通全流程

#流水线

一条流水线跑完全部处理

Easy4K 不把参数丢给用户自己拼命令,而是把六个阶段串成固定链路:每一步的产物落在临时目录, 上一步完成才进入下一步,中途失败会留下可复用的中间结果。

拆帧ffmpeg -q:v 2
超分realesrgan-ncnn
补帧rife-ncnn / Offical
合并libx265 -crf 18
HDRNVEncC TrueHDR
音频pcm_s24le 96kHz

#主界面

主界面:一次配齐参数

选择视频后自动探测分辨率、帧率、时长与总帧数,勾选要执行的流程,选好超分与补帧模型, 输出分辨率与目标帧率实时算给你看。

#实时反馈

进行中:全程可见

处理过程不是黑盒:阶段进度、最新产出帧、子进程的完整输出、CPU/GPU 占用都在同一个页面里滚动更新。

阶段进度

拆帧 / 超分 / 补帧 / 合并 / HDR 各自独立进度,逐帧计数的同时保留百分比。

实时预览

跟随最新产出的帧刷新;新帧解码完成前保留旧画面,避免闪烁。

命令日志

子进程的完整输出(含标准错误)逐行入日志,自动裁剪到最近 200 行并可一键复制。

占用监控

CPU 与 GPU 使用率实时采样,环形指示器直接反映当前压力。

同一帧的效果对比

#对比

720P → 4K:同一帧的细节差多少

把鼠标移到任意一张图上,两张图会以光标所在位置为中心同步放大——左右对照的永远是画面里的同一处细节。 移开鼠标即复位。

原帧 720P
原帧 · 1280 × 720
超分后 4K
超分后 · 4K(3840 × 2160,示例图为等比压缩)
悬停放大 2.6×两张图始终锁定画面中的同一处;手机上按住拖动也能放大。

一款参数可调的视频超分补帧工具

#Real-ESRGAN

超分:按倍率筛模型

模型列表来自 realesrgan-ncnn-vulkanmodels 目录,按当前倍率过滤: x2 / x3 对应 realesr-animevideov3-x2|-x3,x4 还提供 realesrgan-x4plus 与其动漫版。

倍率与模型联动

切换倍率会重新扫描模型目录并优先恢复上次选择,再回落到 realesr-animevideov3-x{倍率}, 避免出现"选了模型却不可用"。

低显存保护

显存不足时可勾选降低部分画质(NCNN 的 -u UHD 模式 / Offical 的 FP16), 与安全帧率可同时启用。

#RIFE

补帧:两套引擎

NCNN 引擎直接调用 rife-ncnn-vulkan,Offical 引擎用便携版 Python 加载官方 pkl 模型; 两者共用同一个补帧倍率与线程滑块。

v4 之前只支持 2 倍

只有 rife-v4 及以后支持 -n 目标帧数,命中 v2 / v3 老模型时会自动锁定倍率为 x2。

设备丢失就换策略

出现 VK_ERROR_DEVICE_LOST 或显存溢出:开启安全帧率则立即停止保护显卡, 未开启则降级为单线程 -j 1:1:1 重试一次。

#性能

高级性能选项与输出命名

线程滑块直接映射到工具的 -j 1:N:N,超过 1:8:8 会提示设备丢失风险;CPU 处理模式下三项 GPU 相关开关会一并关闭。

线程数
-j 1:N:N(N = 1 ~ 32)
安全帧率
致命 GPU 错误 → 停止
降低画质
-u(NCNN UHD / FP16)
FFmpeg GPU 加速
-hwaccel auto / NVENC·AMF·QSV
CPU 处理
-g -1 / run.py -cpu
输出命名
{原名}_{分辨率}_{fps}fps_{SDR|HDR}[_音频嵌入].mkv

内置的模型与引擎

#Real-ESRGAN

超分:三个模型覆盖三种取向

模型放在 realesrgan-ncnn/models 下,启动与切倍率时按 *.param 扫描过滤, 所以下拉框里只会出现当前倍率真正能用的组合。

realesr-animevideov3
x2 / x3 / x4 · 动漫与视频通用,速度最快,默认推荐
realesrgan-x4plus
x4 · 通用照片与实拍视频,画质最高,速度较慢
realesrgan-x4plus-anime
x4 · 动漫线条专用,适合二次元素材

#rife-ncnn-vulkan

补帧:NCNN 引擎

纯 Vulkan 推理,不依赖 CUDA 运行时,开箱即用。模型目录下带 flownet.param 的子目录都会被识别。

内置 40+ 模型

rife-v2 / v2.3 / v2.4 / v3.x / v4.x 及 -lite / -HD / -UHD / -anime / -large / -heavy 变体; 常用模型(v4.6、v4.18、v4.22-lite、v4.25、v4.26)会排在最前。

8GB 显存门槛

v4.25 / v4.26 这类大模型建议 8GB 以上显存;显存偏小时仍可选中,但显卡状态区会给出明确告警。

#PyTorch

补帧:Offical 引擎

用官方 pkl 模型做 PyTorch 推理,带 flownet.pklofficial_*rpr_* 目录会被识别;随包一份便携版 Python,无需本机另外装环境。

内置 10+ 模型

official_2.3 / 4.6 / 4.8 / 4.9 / 4.15 / 4.18 / 4.22 / 4.26 / 4.26_heavy 与 rpr_v7_2.3。

没有 CUDA 也能跑

未检测到可用 GPU 时自动降级 CPU 推理,阶段标题会标注「降级」;开启 CPU 处理模式则强制 CPU, 并标注为主动选择,避免和自动降级混淆。

旗舰的软件性能

#性能

把机器压满,把界面留给你

外部工具会把 CPU 与显卡吃满,所以"不卡"靠的不是少用资源,而是把资源分配和界面更新彻底分开: 重量级工作全在子进程与后台线程里,UI 线程只负责渲染和绑定。

线程可控

线程滑块直接映射到 -j 1:N:N(N = 1~32),超分与补帧都走 load:proc:save 三段线程;超过 1:8:8 会明确告警设备丢失风险。

GPU 全链路

拆帧 -hwaccel auto 硬件解码,合并优先 NVENC → AMF → QSV,HDR 交给 NVEncC 的 Tensor Core。

低显存自适应

遇到显存不足或设备丢失时自动降为单线程重试一次;降低画质可开 UHD 模式 / FP16 进一步压缩占用。

界面不冻结

删除几万个中间文件放后台线程执行,CPU/GPU 采样也是独立线程,主线程只做绑定更新。

预览不闪烁

新帧解码完成前保留旧画面,并用序号丢弃过期的异步解码结果,避免旧帧覆盖新帧。

日志不拖垮 UI

界面侧只保留最近 200 行,内部另存 5000 条供导出分析;追加串行走到 UI 线程,避免渲染错乱。

#指标

可以量化的部分

这些都是代码里写死的常量与阈值,不是宣传口径。

线程范围
-j 1:1:1 ~ 1:32:32
CPU / GPU 采样
250 ms 一次,独立线程
预览帧轮询
200 ms 取最新产出帧
界面日志上限
200 行(内部保留 5000 条)
磁盘预估
1080p 约 2 MB/帧 · 4K 约 8 MB/帧
崩溃留痕
exe 旁 crash.log 带完整堆栈

#实测

显卡是真的被吃满

超分与补帧都在显卡上跑:拆帧可开硬件解码,合并优先走硬件编码,HDR 交给 NVEncC 的 Tensor Core。 软件自己会把 CPU 与 GPU 使用率实时采样、画成环形指示器放在进行中页;下面左边是它显示的样子, 右边是同一时刻任务管理器 GPU 页的实测占用。

Easy4K 进行中页的 CPU / GPU 环形指示器
软件内 · CPU / GPU 环形指示器
任务管理器 GPU 页的实测占用
任务管理器 · GPU 页(处理中实测)

更好的自动化流程

#自动化

从选择视频到交付,中间不用你管

能自动判断的都让它自己判断:该先验证的先验证,该跳过的跳过,该退让的退让,跑完自己把产物交出来。 你只需要决定"要做什么",不用盯着"现在到哪一步、要不要重来"。

#流程

一条链路自己往下走

选择视频
 ├─ 自动探测分辨率 / 帧率 / 时长 / 总帧数
 ├─ 临时目录指纹校验 ── 不符 → 引导更换或清理
 ├─ 处理前测试:1 秒测试视频 × 当前勾选流程
 │    └─ 没跑通 → 直接取消正式处理,不浪费几个小时
 └─ 正式处理:拆帧 → 超分 → 补帧 → 合并 → HDR → 音频
      ├─ 每阶段:帧数够就跳过,残留就清理后重跑
      ├─ 出错时:自动降级 / 回退 / 重试
      └─ 完成后:自动命名输出 + 生成 HTML 报告

启动前先验证一遍

先用 1 秒测试视频按当前勾选的流程完整跑通,再开始处理正式视频,测试残留自动清理;也可以选择跳过。

失败自动换策略

GPU 解码失败退 CPU、硬件编码失败退 libx265、模型不被支持换 rife-v4.6、设备丢失降单线程——全自动完成。

断点自动续跑

按输出帧数判断阶段是否已完成,够数就整段跳过;中断留下的半截帧序列会被清理后从该阶段重跑。

产物自动交付

按规则自动命名输出文件,成功后生成内嵌选项、命令与抽帧图的自包含 HTML 报告,并可自动打开。

缓存自动校验

临时目录写 cache.json 指纹,换了视频会在启动前提示更换目录或清理,避免旧帧被当成新素材。

配置自动记忆

主题、模型、倍率、线程、各开关与目录改动即时落盘;首次运行由向导一次配齐,之后开箱即用。

一款有架构的视频超分补帧工具

#分层

单一职责的三层结构

没有引入依赖注入容器,启动时在 App.OnLaunched 里手工装配服务链并交给 MainViewModel,界面通过静态入口 App.Services 取用状态中枢。

#Views

表现层

XAML 窗口与页面负责交互:主界面收集参数,进行中页展示进度、预览与日志,欢迎向导负责首次运行配置。

#ViewModels

状态与编排层

MainViewModel 维护勾选联动、模型过滤、输出预览与启动前校验,并驱动 ProcessingOrchestrator 执行流水线。

#Services

基础设施层

进程执行、命令拼装、显卡与环境探测、工具路径解析、配置持久化、报告生成都被拆成可单独测试的小服务。

App 与窗口

App.xaml.cs 装配服务并决定进入欢迎向导还是主窗口;MainWindow 负责标题栏、菜单、导航与关闭拦截。

Views

MainPage 收集参数与启动校验,ProgressPage 展示进度/预览/日志/占用,WelcomeWindow 完成首次配置。

ViewModels

MainViewModel 是状态中枢:勾选联动、模型按倍率过滤、显存告警、输出命名预览、缓存校验。

ProcessingOrchestrator

编排六个阶段,处理断点续传、进度推送、失败回退与最终输出拷贝。

ProcessRunner

统一的进程执行器:逐行读取输出、支持取消与挂起/恢复、记录退出码与标准错误摘要。

CommandBuilders

FFmpeg / Real-ESRGAN / RIFE / NVEncC 的参数拼装各自独立,路径统一加引号并规范化分隔符。

探测与解析

GpuDetector 判断型号与显存,EnvironmentDetector 校验工具与版本,VideoInfoDetector 用 ffprobe 取分辨率/帧率/总帧数。

配置与产物

SettingsService 读写 appsettings.json,ToolPathResolver 定位 Tools 目录,OutputNamer 决定最终文件名。

监控与界面

CpuGpuMonitor 采样 CPU/GPU 占用;主题支持浅色、深色、跟随系统与亚克力,选择即时落盘。

关键实现逻辑

#进度采集

进度是怎么算出来的

FFmpeg 与 NVEncC 会往标准错误输出覆盖式进度,所以进程读取按 \r\n 都切分,逐行实时回调;AI 工具没有进度输出,就轮询输出目录的帧数再叠加当前帧内的 tile 百分比。

// 按 \r 与 \n 都切分,否则 FFmpeg 的覆盖式进度会被缓冲到进程结束
if (c == '\r' || c == '\n') { onLine(sb.ToString()); sb.Clear(); }

// 拆帧 / 合并:解析行内帧号
frame=\s*(\d+)            →  已处理 1234 / 4823

// HDR:优先解析百分比,帧号比例仅在分母合理时采用
(\d+(?:\.\d+)?)\s*%       →  已处理 45%

// 超分 / 补帧:轮询输出目录帧数 + stderr 的 tile 百分比
进度 = min(已完成帧数 + 当前帧内百分比 / 100, 总帧数)

#容错回退

失败不是终点,是分支

每条外部工具链路都准备了退路:能用 CPU 的退 CPU,能用别的编码器的换编码器, 模型不被支持就换模型,实在不行就把错误原样交给日志。

拆帧       GPU 解码失败                 → 去掉 -hwaccel 用 CPU 重跑
合并       硬件编码器失败               → 回退 libx265 -crf 18
超分       捆绑版无 CPU 后端            → 自动升级为 GPU 处理
补帧       "MemoryData not exists"      → 因硬件原因回退 rife-v4.6
补帧       v2 / v3 老模型               → 强制 x2 并锁定倍率下拉框
GPU 致命   设备丢失 / 显存溢出            → 安全帧率:停止;否则:-j 1:1:1 重试
音频       GPU 加速合并失败             → 去掉 -hwaccel 重试一次

#断点续传

断点续传靠数帧数

每个阶段开始时先数输出目录里的 PNG:够数就整段跳过;有残留但不够数,说明上次是被中断的, 先清理再从该阶段重跑,避免半截帧序列被当成有效输入。

existing = 输出目录 PNG 数量

existing >= 目标帧数      → 当前阶段已完成,直接跳过
0 < existing < 目标帧数   → 清理残留,从本阶段重新开始
existing == 0            → 正常执行

#缓存校验

临时目录的指纹

临时目录里会写一份 cache.json,记录来源视频路径、文件大小与最后修改时间。 换了视频却没清理临时目录时,启动前会提示重新选择目录或清理缓存,避免旧帧被误当成新素材。

{
  "inputVideo": "D:/video/彩条测试视频.mp4",
  "videoSize": 1089894,
  "videoModifiedTicks": 638600000000000000,
  "createdAt": "2026-09-13 13:20:41"
}

指纹不一致 → 弹窗:重新选择临时目录 / 清理缓存 / 取消

开发与自测

#--selftest

命令行自测

带参数启动即可跳过界面操作跑一遍链路,结束后把完整日志写进报告文件并退出, 适合放进批处理或 CI 做回归。

Easy4K.exe --selftest <输入视频> <报告文件> [阶段掩码]

阶段掩码(位运算):
  1  拆帧       2  超分       4  补帧
  8  合并      16  音频      15  全流程(默认)

示例:
Easy4K.exe --selftest "C:\test.mp4" "C:\report.txt" 15

#--autotest-all

全模型自动测试

遍历模型目录里的超分与补帧模型逐个真跑,界面全程可见可停;失败的用例会把临时目录单独保留, 方便对着中间产物复查。

Easy4K.exe --autotest-all          # 代表性模型 × 多倍率
Easy4K.exe --autotest-all matrix   # 全模型 × 2~5 倍率全矩阵

结果写入:Res\autotest\AutoTestSummary.txt
失败残留:Res\autotest\fail\

#技术栈

技术栈

界面与逻辑打包成一个自包含的 exe,外部工具与模型随包分发,目标机器不需要装运行库。

框架
WinUI 3 / Windows App SDK 2.4
语言 / 运行时
C# · .NET 10(net10.0-windows)
MVVM
CommunityToolkit.Mvvm 8.4
分发方式
Unpackaged + Self-Contained
外部工具
FFmpeg · Real-ESRGAN · RIFE · NVEncC
配置
appsettings.json(工具路径 / 默认模型 / 开关)

上手使用

#键盘

快捷键

常用的操作都留了快捷键,处理中也能直接停。

Ctrl + O           打开视频
Ctrl + S           开始处理
Ctrl + Shift + S   停止处理
Ctrl + L           清空日志
F1                 帮助
Alt + F4           退出

#目录

发布后的目录结构

工具与模型就放在 exe 旁边,程序启动时自动定位。

Easy4K/
├─ Easy4K.exe
├─ appsettings.json      工具路径 / 默认模型 / 开关
├─ FFmpeg-Lei/           ffmpeg.exe · ffprobe.exe
├─ realesrgan-ncnn/      realesrgan-ncnn-vulkan.exe + models/
├─ rife/                 rife-ncnn-vulkan.exe + 各版本模型
├─ NVEncC_9.32_x64/      NVEncC64.exe
├─ officalrife/          run.py + models/ + python/
├─ Temp/                 中间产物(帧序列等)
└─ Output/               最终输出

运行环境要求

操作系统
Windows 10 1809+ / Windows 11
显卡
支持 Vulkan(NVIDIA / AMD / Intel)
SDR→HDR
RTX 20/30/40/50 + NVEncC ≥ 9.32
内存
建议 8GB 以上
显存
4K 超分建议 6GB 以上
补帧引擎
Offical 附带便携版 Python 运行时

#环境

跑起来需要什么

Windows 10 1809 及以上 / Windows 11;显卡需支持 Vulkan(NVIDIA / AMD / Intel)。 SDR→HDR 额外需要 NVIDIA RTX 20/30/40/50 系列与 NVEncC ≥ 9.32,非 RTX 会自动禁用该选项。

建议 8GB 以上内存;4K 超分建议 6GB 以上显存,显存不足时自动降线程重试。

常见问题

点了「开始处理」没反应,或提示「请先选择有效的输入视频」?
为什么提示临时目录里有旧文件?
处理到某个阶段卡住不动?
开了「CPU 处理」,为什么超分还在用 GPU?
HDR 选项是灰的,点不动?
输出文件名是 _SDR 而不是 _HDR?
日志太多看不过来?
处理中关闭窗口会怎样?
更多细节留给您自行探索!