Narración segura del tutorial P6¶
Este pipeline agrega narración en español argentino y subtítulos al MP4 real del tutorial. El video, el plan, los audios temporales y las salidas permanecen fuera del repositorio. No instala paquetes ni copia el video fuente al checkout.
Requisitos externos¶
ffmpegyffprobecon encoderslibx264,aacymov_text.edge-ttsinstalado fuera del repo. La voz está fijada enes-AR-ElenaNeural.- Un MP4 ya anonimizado y un plan JSON o SRT con narración exclusivamente operativa.
El binario de Edge TTS se pasa con --edge-tts-bin o EDGE_TTS_BIN. Por ejemplo, puede estar dentro de un virtualenv temporal o de usuario; no debe estar dentro del checkout.
Plan JSON¶
Guardá este contenido en una ubicación externa, por ejemplo /private/tmp/eppa-tutorial-plan.json. Los tiempos están expresados en segundos y los cues no pueden superponerse.
{
"version": 1,
"language": "es-AR",
"voice": "es-AR-ElenaNeural",
"cues": [
{
"id": "inicio",
"start": 0.5,
"end": 4.5,
"text": "Iniciá sesión con la cuenta de demostración."
},
{
"id": "carga",
"start": 5.0,
"end": 9.5,
"text": "Abrí la vista anterior y cargá la imagen preparada."
},
{
"id": "zoom",
"start": 10.0,
"end": 15.5,
"text": "Acercá la imagen antes de ubicar cada marcador anatómico."
},
{
"id": "calibracion",
"start": 16.0,
"end": 22.0,
"text": "Marcá los dos extremos de la referencia horizontal de diez centímetros."
}
]
}
También se acepta SRT UTF-8. En ese formato cada intervalo se usa como ventana de narración y subtítulo.
El validador rechaza rutas locales, correos, teléfonos, credenciales, identificadores de caso y datos clínicos evidentes. No incluyas nombres, números de paciente, diagnósticos ni resultados. Los textos deben explicar acciones genéricas de la interfaz.
Preflight sin generar archivos¶
python3 fronts/eppa/scripts/PATIENT-6-TUTORIAL-NARRATION.py \
--input-mp4 /ruta/externa/tutorial-sin-narrar.mp4 \
--plan /ruta/externa/tutorial-plan.json \
--output-dir /ruta/externa/tutorial-final \
--edge-tts-bin /ruta/externa/bin/edge-tts \
--preflight-only
El preflight valida privacidad estructural, existencia y ubicación de entradas, codecs disponibles, duración del video, límites de cues y versiones de herramientas. Su salida no contiene paths ni texto narrado. Las sondas de herramientas fallan a los 30 segundos y cada síntesis tiene un límite de 180 segundos para no dejar el proceso colgado.
Generación¶
Ejecutá el mismo comando sin --preflight-only:
python3 fronts/eppa/scripts/PATIENT-6-TUTORIAL-NARRATION.py \
--input-mp4 /ruta/externa/tutorial-sin-narrar.mp4 \
--plan /ruta/externa/tutorial-plan.json \
--output-dir /ruta/externa/tutorial-final \
--edge-tts-bin /ruta/externa/bin/edge-tts
Genera, de forma atómica:
eppa-tutorial-narrated.mp4: H.264, AAC y subtítulosmov_textembebidos.eppa-tutorial.es-AR.srt: subtítulos UTF-8 externos.eppa-tutorial.metadata.json: hashes SHA-256, bytes, duración, codecs, versiones y alineación por cue. No incluye rutas, nombres de archivos fuente ni el texto de narración.
Si el audio original existe, se conserva al 12 % bajo la voz. Se puede ajustar entre cero y uno con --source-volume. Un cue que exceda su ventana se acelera como máximo 1,30x; si necesita más, el proceso falla para evitar cortar o volver ininteligible la locución. Usá --overwrite únicamente para reemplazar las tres salidas conocidas.
Gate focal offline¶
python3 fronts/eppa/scripts/PATIENT-6-TUTORIAL-NARRATION-TEST.py
python3 -m py_compile \
fronts/eppa/scripts/PATIENT-6-TUTORIAL-NARRATION.py \
fronts/eppa/scripts/PATIENT-6-TUTORIAL-NARRATION-TEST.py
git diff --check -- \
fronts/eppa/scripts/PATIENT-6-TUTORIAL-NARRATION.py \
fronts/eppa/scripts/PATIENT-6-TUTORIAL-NARRATION-TEST.py \
fronts/eppa/docs/testing/PATIENT-6-TUTORIAL-NARRATION.md
La prueba final debe ejecutarse con el MP4 externo real y el binario Edge TTS disponible. El pipeline no sustituye la revisión visual y auditiva del video terminado.