auto-save 2026-05-14 10:59 (~6)

This commit is contained in:
2026-05-14 10:59:27 +08:00
parent 8bd52f676a
commit 3aceb221ac
6 changed files with 89 additions and 49 deletions

View File

@@ -97,7 +97,8 @@ def llm() -> OpenAI:
return _llm_client
# Pipeline 状态:
# created → downloading → downloaded等用户点解析→ splitting → frames_extracted
# created → downloading → downloaded等用户点解析/提取音频
# → splitting → frames_extracted
# → transcribing → transcribed | failed
JobStatus = Literal[
"created", "downloading", "downloaded",
@@ -1563,7 +1564,17 @@ async def pipeline_transcribe(job_id: str) -> None:
wav = d / "audio.wav"
try:
if not wav.exists():
raise RuntimeError("audio.wav 不存在")
mp4 = d / "source.mp4"
if not mp4.exists():
raise RuntimeError("source.mp4 不存在,视频导入完成后再提取音频")
update(job, status="transcribing", message="ffmpeg 提取音频轨…", progress=max(job.progress, 45), error="")
run([
"ffmpeg", "-y", "-i", str(mp4),
"-vn", "-ac", "1", "-ar", "16000", "-c:a", "pcm_s16le",
str(wav),
])
if not wav.exists():
raise RuntimeError("音频提取完成但找不到 audio.wav")
if not LLM_API_KEY:
# 无 key 模式mock 数据
@@ -2004,9 +2015,12 @@ async def trigger_transcribe(job_id: str, bg: BackgroundTasks) -> Job:
job = JOBS.get(job_id)
if not job:
raise HTTPException(404, "job not found")
if job.status not in {"frames_extracted", "transcribed", "failed"}:
raise HTTPException(409, f"status must be frames_extracted/transcribed/failed, got {job.status}")
update(job, status="transcribing", progress=max(job.progress, 72), error="", message="准备音频转写…")
mp4 = job_dir(job_id) / "source.mp4"
if job.status in {"created", "downloading"} or not mp4.exists():
raise HTTPException(409, f"video not ready, got {job.status}")
if job.status in {"splitting", "transcribing"} or job.audio_script.status == "rewriting":
raise HTTPException(409, f"job is busy, got {job.status}")
update(job, status="transcribing", progress=max(job.progress, 45), error="", message="准备提取音频…")
bg.add_task(pipeline_transcribe, job_id)
return job