Jasna 完整指南:从首次启动到批量修复,一篇走完 GUI 视频修复全流程
【免费下载链接】jasnaVideo restoration tool项目地址: https://gitcode.com/GitHub_Trending/ja/jasna
Jasna 是一款开源视频修复工具,GUI 版把批量队列、预设管理、实时预览播放器与模型激活整合进同一套窗口。本文带你走完五个环节:安装位置与首次启动检查、把视频加进队列并拿到成片、用预设减少重复配置、边修边看的播放器缓冲机制,以及日常维护与支持者模型激活,全程附关键默认值与异常处置,不必再反复翻官方文档。
Jasna 装在哪里最不容易出问题:首次启动向导的检查项与硬性要求
安装位置有硬性要求:本地盘、纯 ASCII 路径,强烈建议 SSD
界面上你只会看到首次启动向导逐项打勾,但有几个前提是硬性约束,装错位置后面每一步都会受影响:
- 必须装在本地磁盘:Windows 侧要求 NTFS,Linux 侧支持 ext4、Btrfs、XFS,网络挂载路径不支持。
- 安装路径必须纯 ASCII:目录里出现中文、日文或带重音的字母都会让检查失败。对应实现在
jasna/os_utils.py的check_ascii_install_path,它对安装目录做一次 ASCII 编码,一旦编码失败即判负,结果直接显示在向导里。 - 强烈建议 SSD:机械盘不是不能跑,而是启动和加载模型都会明显变慢——
jasna/gui/app.py的_warn_if_installed_on_hard_disk会调用jasna/os_utils.py的install_on_hard_disk实测磁盘类型:Windows 通过驱动查询是否有寻道开销,Linux 读取/sys下块设备的 rotational 标志(对 Btrfs 匿名设备也做了兼容)。判定为 HDD 时,日志面板落一条hard_disk_warning警告,而不是弹窗拦截。
向导到底在查哪几项:必查项失败会挡住进入主界面
向导窗口打开后逐项显示进度。基础检查项共 6 项,外加两个条件项:Windows 下追加共享内存策略项,使用 AMD 卡时追加 AMF 运行时项。
| 检查项 | 验证内容 | 失败后的后果 |
|---|---|---|
| 安装路径 | 是否为纯 ASCII 本地盘路径 | 阻塞,按钮变「退出」 |
| ffprobe | 能否调起 ffprobe,且 FFmpeg 主版本须为 8 | 阻塞 |
| GPU | 是否检测到受支持显卡、计算能力是否达标 | 阻塞 |
| CUDA / ROCm | 运行时是否可用,顺带报告版本与计算能力 | 阻塞 |
| 驱动 | GPU 驱动版本是否合规 | 阻塞 |
| 共享内存(仅 Windows) | NVIDIA 回退策略是否为「Prefer No Sysmem」 | 仅警告,不阻塞启动 |
共享内存项被列入jasna/gui/system_checks.py的WARNING_ONLY_CHECKS,所以它失败只是警告。
检查 30 秒跑不完会怎样:未完成的项按失败计
检查跑在后台线程(jasna/gui/wizard.py的_start_checks_in_background),UI 每 100ms 轮询一次结果;如果 30 秒内线程还没跑完(常见于驱动查询卡住或 torch 冷导入很慢),向导就停止等待、直接展示已有结果,没跑完的项一律按失败计而不是通过,判定逻辑见jasna/gui/system_checks.py的evaluate_check_results。底部按钮只有在必查项失败时才会变成「退出」;只剩警告时照样可以进入主界面。向导只在该版本首次启动时强制弹出,通过版本由jasna/gui/models.py的set_system_check_passed_version记录,决定某版本是否需要重新走检查流程。
补充资料:docs/zh/gui.md
从加视频到拿到成片:Jasna 队列操作、输出命名与冲突策略
往队列里加视频有几种入口,处理顺序怎么定
主操作区就是队列面板(jasna/gui/queue_panel.py),日常动作有四个入口:「添加文件」按钮加视频或图片(_on_add_files);旁边的文件夹图标整目录导入(_on_add_folder);直接把文件拖到队列区域上(基于TkinterDnD的_on_file_drop,拖目录会递归导入);队列项之间可拖拽换序。处理顺序固定为从上到下。超过 20 个条目时自动分页(常量_PAGE_SIZE = 20),用底部箭头翻页,翻到第几页都按完整顺序执行;注意拖拽换序只能在当前页内完成。每一行条目上有四个入口(jasna/gui/job_list_item.py的JobListItem):剪刀图标打开区间编辑器;播放图标把该视频送入视频播放器并停在暂停状态;三点菜单(或右键)可打开所在文件夹、复制路径、打开已修复的输出、把已完成/失败/跳过的条目重新放回队尾;叉号整行移除。跑起来之后,每行实时显示进度百分比、FPS 与预计剩余时间(update_job_status把progress、fps、eta_seconds刷到对应行)。两个全局按钮:▶ 开始会处理队列里的全部条目,包含之前已完成或失败的——所以中途改了配置,直接再按一次即可,不用重新导入文件;■ 停止会结束本轮任务,正在处理的条目退回等待状态(jasna/gui/processor.py的_mark_stopped),写到一半的输出文件会保留在磁盘上,下次遇到它时按「文件冲突」策略处理。「清除已完成」移除完成项,「清空」移除全部条目。
开始按钮为什么是灰的:按这个顺序点亮它
界面上按钮旁会带一句原因提示。逻辑集中在jasna/gui/app.py的_update_start_button_state:队列非空、没有模型正在下载、没有修复预览占用 GPU,三者同时满足才点亮;缺哪一条,提示文案就指向哪一条(无文件 / 模型下载中 / 预览恢复中)。
输出文件撞名怎么办:三种冲突策略各自的行为
输出设置区位于队列面板上方,三个控件各管一件事:「与输入相同」把每个结果保存在原文件旁边;输出位置直接输入文件夹路径,或点文件夹按钮浏览选定——选定即自动关闭「与输入相同」,之后想恢复再点一次该开关;命名模板里{original}代表输入文件名(不含扩展名)。替换发生在jasna/media/media_files.py的folder_output_path,即output_pattern.replace("{original}", input_path.stem);出厂默认模板是{original}_restored.mp4(jasna/gui/models.py的DEFAULT_OUTPUT_PATTERN),输入my_video.mp4就得到my_video_restored.mp4。撞名不是等文件写出来才暴露:输出路径或模板一变,相关队列条目会立刻被高亮(_refresh_conflicts重新计算后调用set_conflict)。真正落到已有同名文件上时,行为由「基本处理」分区的file_conflict下拉框(jasna/gui/settings_sections/basic.py)决定:
| 策略 | 遇到同名已有文件时的行为 | 默认 | 界面提示 |
|---|---|---|---|
| auto_rename | 新文件改名保存,两者都保留 | 是 | 无 |
| overwrite | 直接替换已有文件 | 否 | 选中时额外显示警告图标与提示 |
| skip | 不输出该文件,条目标为已跳过 | 否 | 无 |
预设与按视频覆盖:Jasna 如何减少重复配置
怎么把当前设置一键存成预设,重启后还停留在上次方案
设置面板顶部工具条(jasna/gui/settings_panel.py的_build_preset_bar)可以把当前全部设置存成一个名字。比如给「1080p 快速」和「4K 最佳质量」各建一个,处理不同素材前一键切换。底层是jasna/gui/models.py的PresetManager:create_preset/update_preset/delete_preset负责增删改;get_last_selected/set_last_selected记录上一次使用的预设——「Jasna 重启后还停留在你上次的预设」就是靠它;旧版本保存的预设数据经过_migrate_preset_dict自动迁移,无需手工转换;手动改动任意设置后面板会亮起「已修改」标记(_mark_modified),防止你以为当前仍是某个出厂方案;出厂预设与用户预设分开存放,对出厂预设的删除操作会被拒绝。
同一队列里为什么有的视频用不同的检测阈值
全局配置归预设管,但有一类例外按视频单独存:在区间编辑器里设置的检测模型与检测阈值只属于当前这个视频。队列项通过JobItem.try_set_video_options(jasna/gui/models.py)单独记账,其余视频保持各自参数。一个队列里完全可以混放「高阈值粗检」和「低阈值精检」的素材,互不干扰。
图片怎么逐张对比后再保存,只留满意的结果
静态图片走「交互式处理图片」入口(分区定义在jasna/gui/settings_sections/image_restoration.py,窗口实现为jasna/gui/interactive_image_restore.py),打开后是一个左右对比视图:逐张浏览(_previous_image/_next_image_clicked);换种子立即重看(_change_seed);在原图、遮罩、结果三种视图间切换(_mask生成遮罩层,_set_view切换模式);只对满意的结果点保存(_save_current)。它比「每次重跑整个任务」快,是因为渲染放在后台 worker 线程按单帧执行(_worker_loop/_render),换种子只是在同一张已准备好的帧上再做一次前向推理。
补充资料:docs/zh/advanced_processing.md
边修边看:Jasna 实时预览播放器的缓冲机制与打开限制
点页眉的「视频播放器」(jasna/gui/app.py的_open_video_player),可以边修复边观看,全程不产生输出文件。操作三步:1. 选检测模型与检测阈值,需要的话再叠加二次修复——RTX Super Res 或 UNet 4x(jasna/gui/video_player.py的available_player_secondary_restorations给出可选集合);2. 点「选择视频」;3. 按播放。
播放器为什么有时打不开:互斥是硬约束
队列处理或修复预览任一在跑,播放器就打不开——_open_video_player入口处检查_preview_gpu_busy与processor.is_running(),任一为真直接返回;同时_update_video_player_button_state把页眉按钮置灰,避免你点半天没反应还猜不出原因。
「就绪秒数」反复归零,是 GPU 修不过实时速度
实时性的保证在jasna/gui/raw_player.py的带时间戳帧缓冲里:后台修复最多领先播放 3 秒(BUFFER_SECONDS = 3.0);预滚满 1.5 秒才真正开声(PREROLL_SECONDS = 1.5)。修复线程把帧写进环形缓冲,播放端按时间戳弹出到期帧(pop_due);缓冲溢出时新帧顶掉旧帧(_would_overflow_locked)。所以「就绪秒数」反复归零,对应的正是 GPU 修复速度追不上播放速度,音频会停住等更多画面就绪,而不是程序出错。
改参数后从当前位置重播,方向键各跳 30 秒
修改模型、阈值或二次修复后,管线会重建并从当前位置重新播放(_request_pipeline_reload)。空格播放/暂停(_space_pressed);左/右方向键各跳 30 秒(_SEEK_STEP_SECONDS = 30.0);全屏状态下把鼠标移到底部边缘,控制栏自动浮现。状态栏持续显示「已提前修复好的秒数」。播放器固定使用 BasicVSR++,不走 LTX 管线。
补充资料:docs/zh/streaming.md
日常维护:重跑系统检查、切换语言、日志与系统状态
刚更新完驱动,怎么重跑系统检查
除每个版本首次启动必跑之外,页眉随时可以重跑(jasna/gui/app.py的_show_system_check),典型场景是刚更新完驱动。结果按版本记录(set_system_check_passed_version),决定某版本是否需要重新走检查流程。
切换语言后为什么还要重启一次
首次启动跟随系统语言,页眉可切换。切换瞬间已构建控件的文字会立即刷新(_on_language_changed触发_refresh_ui_text),但完整生效需要重启 Jasna。内置语言包为zh、en、ja、ko、th五套,位于jasna/gui/locales/。
日志环形缓冲只留最后 5000 行,反馈前先导出
底部工具条的日志按钮展开 LogPanel(jasna/gui/log_panel.py),实时滚动,支持 debug / info / warning / error 四级过滤。导出只包含最后 5000 行——上限常量_MAX_LOG_ENTRIES = 5000,底层环形缓冲deque(maxlen=5000)自动丢弃最旧条目,export_log_entries_txt(jasna/gui/log_export.py)写成.txt。反馈问题请附上这份文件。
处理期间底部工具条在显示什么:GPU、显存、内存与 CPU
数据源是jasna/gui/system_stats.py的read_system_stats(NVIDIA 解析nvidia-smi的 CSV 输出,AMD 走 sysfs),由jasna/gui/app.py的轮询线程每 1.5 秒采样一次并 post 回 UI 线程。
补充资料:docs/zh/tuning.md
支持者模型激活:Jasna 在线与离线激活步骤、名额规则与边界情况
UNet 4x、SD 1.5、LTX 属于支持者模型,使用前需要激活。页眉「激活 Jasna」打开对话框(jasna/gui/components.py);所有会阻塞的操作都放在后台线程(jasna/gui/activation_worker.py),界面不会卡死。
在线激活与离线手动激活:两条路径怎么走
在线激活是最快路径:输入许可证码,点「在线激活」(start_online_activation)。此过程只上传许可证码和机器密钥两项,激活完成后 Jasna 离线使用,不再联系服务器。离线机器的手动激活分三步:1. 复制机器密钥(start_machine_key;由本机硬件生成,调用machine_key(cloud_workspace=False));2. 在任意联网设备打开激活页面(或点「打开激活页面」),填入机器密钥与许可证码,也可以把这两个值直接发给出售方;3. 把拿到的激活密钥粘回 Jasna,点「激活」(start_activation)。
名额规则:一个许可证码覆盖 3 台电脑或云工作区
- 同一台机器重复激活不占用新名额,释放名额只能由所有者操作。
- 更换主板(Windows)或重装 Linux 视为新电脑,占用一个名额;重装 Windows、更换显卡/硬盘/内存不占名额,重新激活即可。
- 激活密钥只包含你许可证码对应的模型,不会多送。
密钥被拒时怎么排查:机器密钥、完整度与旧版签署
- 先核对机器密钥,再完整重抄一遍激活密钥;为旧版 Jasna 生成的密钥需向出售方申请新密钥。
- 以
JW1-开头的身份密钥属于云端 CLI 用途,直接粘进 GUI 会抛出license_cloud_cli_only错误(start_activation内的显式检查),提醒你在正确入口使用。 - 许可证码仅官方渠道出售。中文界面下,激活对话框与首次启动向导页脚会出现「闲鱼」按钮(
XianyuButton,由shows_xianyu_seller按当前语言决定),点击展示卖家二维码,用闲鱼 App 扫码直达卖家主页;界面顶部的「闲鱼」按钮同样弹出该二维码。
补充资料:docs/zh/models.md
速查
| 项目 | 默认值 / 阈值 | 出处(文件 · 符号) |
|---|---|---|
| 队列分页 | 每页 20 项 | jasna/gui/queue_panel.py·_PAGE_SIZE |
| 输出命名模板 | {original}_restored.mp4 | jasna/gui/models.py·DEFAULT_OUTPUT_PATTERN |
| 文件冲突策略 | auto_rename(自动重命名) | jasna/gui/models.py·AppSettings.file_conflict |
| 播放器预缓冲 | 3.0 秒 | jasna/gui/raw_player.py·BUFFER_SECONDS |
| 播放器预滚开声 | 1.5 秒 | jasna/gui/raw_player.py·PREROLL_SECONDS |
| 方向键跳转步长 | 30 秒 | jasna/gui/video_player.py·_SEEK_STEP_SECONDS |
| 日志保留 / 导出行数 | 5000 行 | jasna/gui/log_panel.py·_MAX_LOG_ENTRIES |
| 启动向导等待上限 | 30 秒 | jasna/gui/wizard.py·_CHECKS_TIMEOUT_SECONDS |
| FFmpeg 主版本要求 | 8 | jasna/gui/system_checks.py·check_ffprobe |
| 系统状态采样周期 | 1.5 秒 | jasna/gui/app.py·_start_system_stats_poller |
故障自查清单
- 启动向导某项不过:依次核对纯 ASCII 路径、FFmpeg 8 本体、驱动版本与 GPU 计算能力;共享内存项失败只是警告,不用处理。
- 开始按钮灰着:按「队列为空 → 模型下载中 → 预览占着 GPU」的顺序排查,按钮旁的提示文案会直接告诉你原因。
- 输出文件名不符合预期:先看命名模板里
{original}的替换结果,再看自动重命名是否被动触发过。 - 播放器「就绪秒数」反复归零:当前配置下 GPU 修不过实时速度,降分辨率或减轻修复配置再试。
- 日志里找不到早先的报错:环形缓冲只留最后 5000 行,出问题先点导出再排查。
- 激活密钥被拒:机器密钥是否抄错、激活密钥是否完整、是否为旧版本 Jasna 所签;
JW1-开头的密钥不能进 GUI。
【免费下载链接】jasnaVideo restoration tool项目地址: https://gitcode.com/GitHub_Trending/ja/jasna
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考