Files
cat-shark d1557eca46 feat: 批量处理重做——视频旁已有字幕即跳过、产物对齐 CN 命名并清理过程文件
- 创建批量任务时一次性定位视频:视频所在目录存在文件名含视频名的字幕文件
  (.srt/.ass/.ssa/.vtt)直接记 SKIPPED,不触发流水线;运行时只消费已定位
  的明细,不再重新扫描文件夹。
- 视频完成后把最终产物放到视频旁,命名对齐媒体库约定:中文字幕存为
  <视频名>.CN.srt、双目字幕存为 <视频名>.CN_dual_eye.ass;其余扩展名产物
  保留原文件名。
- 收尾删除 run 记录与过程工作空间;工作空间改到应用私有目录
  storage/batch/<job_id>/<bv_id>/,与用户媒体库隔离,防止媒体库把切片数据
  当视频入库。
- 批量 API 产物清单/下载改为解析视频旁字幕文件,旧版 batch.done.json 语义
  别名保持兼容;删除任务时清理私有工作空间。
- 前端说明与创建提示同步;测试按新语义重写并补覆盖(278 passed,100% 行覆盖率)。
2026-09-03 08:22:42 +08:00

93 lines
3.5 KiB
HTML

<!doctype html>
<!-- VRSub 批量处理页:输入文件夹路径批量处理全部视频,不上传副本。 -->
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>VRSub - 批量处理</title>
<link rel="stylesheet" href="/assets/styles.css?v=3" />
</head>
<body>
<header class="topbar">
<a class="brand" href="/">VRSub</a>
<nav>
<a href="/">发起任务</a>
<a href="/tasks.html">任务管理</a>
<a href="/batch.html">批量处理</a>
<a href="/admin.html">管理后台</a>
<a href="/workflow.html">工作流</a>
</nav>
</header>
<main class="container">
<h1>批量处理</h1>
<p class="muted">
直接读取所选文件夹下的全部视频(<b>不上传副本</b>),逐个执行所选流水线;
视频旁(视频所在目录)已存在文件名含视频名的字幕文件的会自动跳过;
处理完成的中文字幕(.srt)与双目字幕(.ass)会放到视频旁,处理过程文件
自动清理;暂停后重新开始时,从未完成的视频继续。
</p>
<!-- 创建批量任务:文件夹路径 + 工作流选择 + 是否递归。 -->
<section class="panel">
<h2>创建批量任务</h2>
<div class="form-row">
<label for="batchFolder">视频文件夹路径</label>
<div class="path-picker">
<input id="batchFolder" type="text" readonly placeholder="点击右侧按钮选择文件夹" />
<button id="batchBrowse" type="button">选择文件夹…</button>
</div>
</div>
<div class="form-row">
<label for="batchWorkflow">处理流水线</label>
<select id="batchWorkflow"></select>
<label class="inline"><input id="batchRecursive" type="checkbox" checked /> 包含子文件夹</label>
</div>
<div class="form-row">
<button id="batchStart" class="primary">开始批量处理</button>
<span id="batchCreateHint" class="muted"></span>
</div>
</section>
<!-- 目录树选择器:点击"选择文件夹"按钮弹出,懒加载浏览本地目录。 -->
<div id="dirPicker" class="dir-picker hidden">
<div class="dir-picker-panel">
<div class="dir-picker-head">
<b>选择视频文件夹</b>
<button id="dirPickerClose" type="button" class="plain"></button>
</div>
<div id="dirTree" class="dir-tree"></div>
<div class="dir-picker-foot">
<span id="dirPickerSelected" class="muted"></span>
<button id="dirPickerUse" type="button" disabled>使用此文件夹</button>
</div>
</div>
</div>
<!-- 批量任务列表:状态、进度与暂停/继续操作,可展开查看每视频明细。 -->
<section class="panel">
<div class="table-wrap">
<table>
<thead>
<tr>
<th>任务 ID</th>
<th>文件夹</th>
<th>工作流</th>
<th>状态</th>
<th>进度</th>
<th>当前视频</th>
<th>创建时间</th>
<th>操作</th>
</tr>
</thead>
<tbody id="batchJobList"></tbody>
</table>
</div>
</section>
</main>
<script src="/assets/app.js?v=3"></script>
<script src="/assets/batch.js?v=1"></script>
</body>
</html>