同一帧的效果对比
#对比
720P → 4K:同一帧的细节差多少
把鼠标移到任意一张图上,两张图会以光标所在位置为中心同步放大——左右对照的永远是画面里的同一处细节。 移开鼠标即复位。
#流水线
Easy4K 不把参数丢给用户自己拼命令,而是把六个阶段串成固定链路:每一步的产物落在临时目录, 上一步完成才进入下一步,中途失败会留下可复用的中间结果。
#主界面
选择视频后自动探测分辨率、帧率、时长与总帧数,勾选要执行的流程,选好超分与补帧模型, 输出分辨率与目标帧率实时算给你看。
#实时反馈
处理过程不是黑盒:阶段进度、最新产出帧、子进程的完整输出、CPU/GPU 占用都在同一个页面里滚动更新。
#对比
把鼠标移到任意一张图上,两张图会以光标所在位置为中心同步放大——左右对照的永远是画面里的同一处细节。 移开鼠标即复位。
#Real-ESRGAN
模型列表来自 realesrgan-ncnn-vulkan 的 models 目录,按当前倍率过滤: x2 / x3 对应 realesr-animevideov3-x2|-x3,x4 还提供 realesrgan-x4plus 与其动漫版。
realesr-animevideov3-x{倍率}, 避免出现"选了模型却不可用"。 -u UHD 模式 / Offical 的 FP16), 与安全帧率可同时启用。 #RIFE
NCNN 引擎直接调用 rife-ncnn-vulkan,Offical 引擎用便携版 Python 加载官方 pkl 模型; 两者共用同一个补帧倍率与线程滑块。
rife-v4 及以后支持 -n 目标帧数,命中 v2 / v3 老模型时会自动锁定倍率为 x2。 VK_ERROR_DEVICE_LOST 或显存溢出:开启安全帧率则立即停止保护显卡, 未开启则降级为单线程 -j 1:1:1 重试一次。 #性能
线程滑块直接映射到工具的 -j 1:N:N,超过 1:8:8 会提示设备丢失风险;CPU 处理模式下三项 GPU 相关开关会一并关闭。
#Real-ESRGAN
模型放在 realesrgan-ncnn/models 下,启动与切倍率时按 *.param 扫描过滤, 所以下拉框里只会出现当前倍率真正能用的组合。
#rife-ncnn-vulkan
纯 Vulkan 推理,不依赖 CUDA 运行时,开箱即用。模型目录下带 flownet.param 的子目录都会被识别。
#PyTorch
用官方 pkl 模型做 PyTorch 推理,带 flownet.pkl 的 official_* 与 rpr_* 目录会被识别;随包一份便携版 Python,无需本机另外装环境。
#性能
外部工具会把 CPU 与显卡吃满,所以"不卡"靠的不是少用资源,而是把资源分配和界面更新彻底分开: 重量级工作全在子进程与后台线程里,UI 线程只负责渲染和绑定。
#指标
这些都是代码里写死的常量与阈值,不是宣传口径。
#实测
超分与补帧都在显卡上跑:拆帧可开硬件解码,合并优先走硬件编码,HDR 交给 NVEncC 的 Tensor Core。 软件自己会把 CPU 与 GPU 使用率实时采样、画成环形指示器放在进行中页;下面左边是它显示的样子, 右边是同一时刻任务管理器 GPU 页的实测占用。


#自动化
能自动判断的都让它自己判断:该先验证的先验证,该跳过的跳过,该退让的退让,跑完自己把产物交出来。 你只需要决定"要做什么",不用盯着"现在到哪一步、要不要重来"。
#流程
选择视频
├─ 自动探测分辨率 / 帧率 / 时长 / 总帧数
├─ 临时目录指纹校验 ── 不符 → 引导更换或清理
├─ 处理前测试:1 秒测试视频 × 当前勾选流程
│ └─ 没跑通 → 直接取消正式处理,不浪费几个小时
└─ 正式处理:拆帧 → 超分 → 补帧 → 合并 → HDR → 音频
├─ 每阶段:帧数够就跳过,残留就清理后重跑
├─ 出错时:自动降级 / 回退 / 重试
└─ 完成后:自动命名输出 + 生成 HTML 报告#分层
没有引入依赖注入容器,启动时在 App.OnLaunched 里手工装配服务链并交给 MainViewModel,界面通过静态入口 App.Services 取用状态中枢。
#Views
XAML 窗口与页面负责交互:主界面收集参数,进行中页展示进度、预览与日志,欢迎向导负责首次运行配置。
#ViewModels
MainViewModel 维护勾选联动、模型过滤、输出预览与启动前校验,并驱动 ProcessingOrchestrator 执行流水线。
#Services
进程执行、命令拼装、显卡与环境探测、工具路径解析、配置持久化、报告生成都被拆成可单独测试的小服务。
#进度采集
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,外部工具与模型随包分发,目标机器不需要装运行库。
#键盘
常用的操作都留了快捷键,处理中也能直接停。
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 额外需要 NVIDIA RTX 20/30/40/50 系列与 NVEncC ≥ 9.32,非 RTX 会自动禁用该选项。
建议 8GB 以上内存;4K 超分建议 6GB 以上显存,显存不足时自动降线程重试。