- 创建批量任务时一次性定位视频:视频所在目录存在文件名含视频名的字幕文件 (.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% 行覆盖率)。
93 lines
3.5 KiB
HTML
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>
|