Subtitular el corte actual
Usa un proyecto guardado con pistas colocadas y un documento de transcripción en transcript.json. $PROJECT_ID y $REVISION se refieren al corte actual. Haz el borrador después de los ajustes de sincronización. Reemplaza $MARCADORES con valores reales; envía las llamadas cutbolt_* listadas sin comando, o usa cutbolt_run con comando/argumentos. Mantén el renderizado bloqueante en job.start.
{"command":"captions.draft","project":{"project_id":"$PROJECT_ID"},"transcripts":[{"file":"transcript.json"}]}
Revisa el texto de las pistas y la sincronización en el documento devuelto, luego consérvalo como $DOCUMENTO_SUBTITULOS. Corrige los errores de reconocimiento antes de renderizar. $FUENTE es un objeto de identidad/ruta de fuente (por ejemplo {"path":"font.ttf"}) o un nombre instalado sin ambigüedad de fonts.find. $TAMANO_FUENTE, $ALTURA_LINEA y $RECTANGULO_SUBTITULOS son valores de diseño en píxeles que se ajustan al proyecto. Elige suficiente espacio para las pistas reales. El desbordamiento se rechaza, por lo que el texto cortado no puede pasar desapercibido.
{"command":"job.start","request_id":"caption-render","run":"captions.render","arguments":{"document":"$DOCUMENTO_SUBTITULOS","project":{"project_id":"$PROJECT_ID"},"layouts":{"default":{"fonts":["$FUENTE"],"size":"$TAMANO_FUENTE","rect":"$RECTANGULO_SUBTITULOS","line_height":"$ALTURA_LINEA","letter_spacing":0,"wrap":"none","overflow":"reject"}},"output":"caption-edits.json","mode":"generated","track_id":"captions","asset_id":"caption"}}
$ID_TRABAJO es el ticket devuelto.
{"command":"job.wait","job_id":"$ID_TRABAJO","timeout_seconds":120}
Continúa solo cuando el estado sea completado. Conserva result.operations como $OPERACIONES_SUBTITULOS (una referencia a archivo) y result.expected_revision como $REVISION_SUBTITULOS. Aplica esa propuesta en la revisión registrada. El comando crea la pista de subtítulos si está ausente. Si ya contiene subtítulos superpuestos, elimina explícitamente los clips antiguos deseados y prepara de nuevo contra la nueva cabeza. No dupliques subtítulos ni sobrescribas gráficos no relacionados.
{"command":"session.apply","project_id":"$PROJECT_ID","expected_revision":"$REVISION_SUBTITULOS","request_id":"attach-captions","operations":"$OPERACIONES_SUBTITULOS"}
Conserva la nueva revisión. Exporta e inspecciona los subtítulos reales en tiempos representativos, incluyendo la primera y última pista. Un cambio de sincronización después de este paso necesita subtítulos regenerados. Los clips guardados conservan recetas de escena editables y se renderizan directamente con el metraje; no se compila una película de subtítulos intermedia. Conserva el documento de subtítulos para futuros cambios de texto/sincronización.
Para una fuente local suministrada, usa un objeto de ruta; las cadenas nombran familias de fuentes instaladas. Las fuentes instaladas faltantes o ambiguas necesitan una identidad utilizable de fonts.find. Para desbordamiento de texto, ajusta el diseño de la caja/fuente/pista y usa un nuevo nombre de archivo de salida. Para una revisión obsoleta, verifica si la sincronización de la línea de tiempo cambió antes de adjuntar. Reutiliza el ID de solicitud de una edición incierta e inspecciona session.receipt; job.wait devolviendo un ticket no es prueba de un renderizado completado.
Este flujo de trabajo funciona en Windows y Linux con FFmpeg/ffprobe externos. El reconocimiento de voz, cuando es necesario, requiere un runtime local configurado por separado y un modelo. La grabación y descodificación por hardware no tienen backend en Linux. El plugin no incluye motor, fuentes, modelos ni herramientas multimedia.