首次提交

This commit is contained in:
2026-09-28 16:09:31 +08:00
commit 4a6839319a
71 changed files with 12144 additions and 0 deletions

74
tools/导出成功xlsx.py Normal file
View File

@@ -0,0 +1,74 @@
# -*- coding: utf-8 -*-
"""
把 数据/ 下所有 jsonl 的【成功】记录去重汇总成一个 xlsx。
列: 视频地址 | 字幕地址 | 时长(秒) | 时长(分:秒)
用法: python3 tools/导出成功xlsx.py [--dir 数据] [--out 成功字幕汇总.xlsx]
"""
import argparse
import glob
import json
import os
from openpyxl import Workbook
def fmt_dur(sec):
try:
s = int(round(float(sec)))
except (TypeError, ValueError):
return ""
if s <= 0:
return ""
h, rem = divmod(s, 3600)
m, ss = divmod(rem, 60)
return f"{h}:{m:02d}:{ss:02d}" if h else f"{m}:{ss:02d}"
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--dir", default="数据")
ap.add_argument("--out", default="成功字幕汇总.xlsx")
args = ap.parse_args()
files = glob.glob(os.path.join(args.dir, "*.jsonl"))
print(f"读取 {len(files)} 个 jsonl ...")
latest = {}
for fp in files:
for line in open(fp, encoding="utf-8"):
line = line.strip()
if not line:
continue
try:
r = json.loads(line)
except Exception:
continue
v = r.get("video_cos_path")
if v:
latest[v] = r
rows = [r for r in latest.values() if r.get("status") == "success"]
# 按视频地址排序, 输出稳定
rows.sort(key=lambda r: r.get("video_cos_path", ""))
print(f"去重视频 {len(latest)} | 成功 {len(rows)} → 写 xlsx")
wb = Workbook(write_only=True) # 流式写, 省内存(几十万行也扛得住)
ws = wb.create_sheet("成功字幕")
ws.append(["视频地址", "字幕地址", "时长(秒)", "时长(分:秒)"])
n = 0
for r in rows:
dur = r.get("duration")
try:
dsec = round(float(dur), 1) if dur is not None else ""
except (TypeError, ValueError):
dsec = ""
ws.append([r.get("video_cos_path", ""),
r.get("srt_cos_path", ""),
dsec,
fmt_dur(dur)])
n += 1
wb.save(args.out)
print(f"完成: {n} 行 → {args.out} ({os.path.getsize(args.out)//1024//1024} MB)")
if __name__ == "__main__":
main()