From 59355909f2de9236af8168a26c70bcf6caa3b285 Mon Sep 17 00:00:00 2001 From: Elvis Claros Castro Date: Sat, 26 Sep 2026 20:21:47 -0300 Subject: Import video pipeline as it was --- scripts/verify_final.py | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 scripts/verify_final.py (limited to 'scripts/verify_final.py') diff --git a/scripts/verify_final.py b/scripts/verify_final.py new file mode 100644 index 0000000..7be410b --- /dev/null +++ b/scripts/verify_final.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +"""QA sobre el MP4 terminado: extrae el audio ya mezclado con la musica, +lo corta segun el timeline y lo transcribe. Prueba que se entiende la voz +por encima de la cama, no solo que el WAV suelto estaba bien.""" +import json, os, subprocess, sys +from difflib import SequenceMatcher + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, os.path.join(ROOT, "scripts")) +from narration import SCRIPTS +from verify import norm +from gen_audio import transcribe + +LIMITE = 0.88 + + +def main(names): + peor = [] + for name in names: + mp4 = os.path.join(ROOT, "out", f"{name}.mp4") + tl = json.load(open(os.path.join(ROOT, "out", f"{name}_timeline.json"))) + segs = json.load(open(os.path.join(ROOT, "audio", name, "segments.json")))["segments"] + work = os.path.join(ROOT, "tmp", name + "_fin") + os.makedirs(work, exist_ok=True) + entero = os.path.join(work, "todo.wav") + subprocess.run(["ffmpeg", "-v", "error", "-y", "-i", mp4, "-vn", + "-ac", "1", "-ar", "16000", entero], check=True) + + trozos = [] + for bt in tl["beats"]: + p = os.path.join(work, f"{bt['i']:02d}.wav") + subprocess.run(["ffmpeg", "-v", "error", "-y", "-ss", f"{bt['start']:.3f}", + "-t", f"{segs[bt['i']]['dur'] + 0.25:.3f}", "-i", entero, + "-c", "copy", p], check=True) + trozos.append(p) + tr = transcribe(trozos, work) + + print(f"\n=== {name} (mezcla final) ===") + for bt, p in zip(tl["beats"], trozos): + i = bt["i"] + got = tr[p] + r = SequenceMatcher(None, norm(segs[i]["tts"]), norm(got)).ratio() + if r < LIMITE: + peor.append((name, i, r)) + print(f" {i:02d} {'OK ' if r >= LIMITE else 'REV'} {r:.2f} | {got}") + print("\n>> a revisar:", peor if peor else "nada") + + +if __name__ == "__main__": + main(sys.argv[1:] or list(SCRIPTS)) -- cgit v1.2.3