Communitygithub.com

subtitle-focus|字幕美化与重点烧录

Revisa, bloquea, resalta, quema, revisa por fotogramas y entrega subtítulos SRT de forma local.

¿Qué es subtitle-focus|字幕美化与重点烧录?

Subtitle Focus es una habilidad de agente de IA para flujos de trabajo profesionales de subtitulado. Toma un archivo SRT exportado con marcas de tiempo, aplica corrección ortotipográfica usando glosarios personales y de proyecto, bloquea el texto para evitar cambios accidentales, planifica resaltados semánticos en amarillo sobre frases significativas, calibra el estilo visual a partir de una captura de referencia opcional, renderiza el vídeo completo con los subtítulos quemados, extrae fotogramas de revisión que cubren cada corrección y resalte, y genera un manifiesto de entrega con sumas de verificación. Está diseñado para entornos donde el SRT ya ha sido revisado por humanos y se necesita un control de calidad exhaustivo: no utiliza ASR, OCR ni transcripción automática. Funciona en cinco compuertas secuenciales que requieren confirmación explícita del usuario en cada paso, garantizando trazabilidad y evitando suposiciones automáticas. Soporta plataformas como Claude Code, Cursor y Codex, y se basa en un script Python local con referencias a esquemas JSON y guías de estilo.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add manwithshit/subtitle-focus

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Subtitle Focus|字幕美化与重点烧录

Convierte un SRT revisado y con marcas de tiempo en resaltados semánticos amarillos, una muestra corta aprobada y una quema completa trazable del vídeo. Cuando el usuario proporciona una captura de referencia, además calibra el estilo de los subtítulos para ese proyecto. El agente decide el significado de las palabras a partir del contexto del SRT, los glosarios cargados, las pruebas del proyecto y las correcciones del usuario; el script incluido posee banderas deterministas, reemplazo exacto, bloqueo de fuentes, maquetación mixta CJK/Latín, renderizado, fotogramas de revisión y sumas de verificación. El SRT de origen y el vídeo son de solo lectura.

Requiere un SRT exportado. Una entrada de solo vídeo o una transcripción MD línea por línea sin marcas de tiempo no tiene una línea de tiempo aceptada en esta habilidad. Detente y pide al usuario que exporte un SRT; no invoques Uso de Vídeo, 剪口播, Whisper local, ASR ni OCR.

Trabaja en cinco compuertas. Detente en cada compuerta de confirmación.

SRT 校对锁定 → 高亮确认 → 样片确认 → 全片抽帧 → 交付登记

Compuerta 1 — Bloqueo y corrección del SRT

  1. Ejecuta doctor antes del primer uso en una máquina.
  2. Exige un SRT con marcas de tiempo. Rechaza entrada de solo MD/transcripción y solicitudes de transcripción solo con vídeo.
  3. Pide dos opciones explícitas al inicio del proyecto: usar un glosario personal o saltarlo explícitamente; usar un glosario del proyecto o saltarlo explícitamente. No preguntes durante la instalación y no comiences la corrección formal hasta que ambas opciones estén registradas por las banderas de proofread.
  4. Ejecuta proofread. El glosario base se carga automáticamente. Lee text-lock-schema.md para conocer las opciones explícitas, la estratificación, el comportamiento de privacidad y el esquema. La política de revisión de fuentes públicas está documentada en glossary-sources.md.
  5. Inspecciona cada señal usando los vecinos del SRT, la procedencia del glosario cargado, el vocabulario del proyecto, los nombres de productos, los archivos del proyecto y las correcciones del usuario. Solo aplica reglas de ortografía, capitalización, números, unidades, pronombres o espaciado cuando exista una regla real del usuario/proyecto o una entrada enumerada en el glosario. No inventes una política de normalización general.
  6. Redacta corrections.json. Las coincidencias del glosario son sugerencias, nunca ediciones automáticas. Nunca reescribas en silencio.
  7. Ejecuta correct; muestra al usuario la tabla de antes/después por señal. La salida debe preservar los saltos de línea no mencionados y los espacios repetidos en el texto del SRT.
  8. Tras la aprobación explícita del texto, ejecuta lock --confirmed.

DETENTE. No planifiques resaltados a partir de un SRT desbloqueado. Cualquier cambio de byte en el SRT invalida su bloqueo, el plan de subtítulos, la muestra y el renderizado completo. Regéneralos.

Compuerta 2 — Resaltado de texto

  1. Ejecuta plan --lock ... con --max-chars 16 a menos que el usuario indique lo contrario.
  2. Redacta highlight.json usando highlight-schema.md.
  3. Ejecuta apply y review. Ajusta las elecciones hasta que el informe de cadencia pase, luego ejecuta validate.
  4. Envía al usuario el manuscrito completo de subtítulos en orden de línea de tiempo, con cada resalte propuesto marcado directamente en la oración usando negrita de Markdown. No envíes una lista separada de palabras clave o una tabla de resaltes primero. Pide al usuario que confirme las ubicaciones en negrita o que nombre las oraciones que necesitan redireccionamiento.

Selección: solo palabras o frases completas con carga semántica. Trata cada segmento de subtítulo renderizado como una oración. Cada par adyacente debe contener al menos un segmento resaltado, por lo que una secuencia de oraciones sin resaltar puede tener como máximo una. Una señal cuyo texto completo esté encerrado entre paréntesis chinos o ASCII coincidentes es un aparte fuera de pantalla/PiP: mantenla sin formato y trátala como límite de cadencia. Los paréntesis en línea dentro de una oración normal no crean esta exención. La solicitud explícita del usuario de mantener una señal o segmento específico sin formato tiene prioridad sobre la cadencia, especialmente para contenido PiP/fuera de pantalla: regístralo como una entrada plain_overrides con el id objetivo y la razón confirmada por el usuario, mantenlo sin formato y trátalo como límite de cadencia incluso sin paréntesis. No inventes esta exención simplemente porque el contenido parezca secundario y no añadas un resalte de relleno cercano para compensar. Resaltar cada oración está permitido cuando mejora la continuidad. Una oración corta semánticamente atómica puede resaltarse por completo; una oración más larga normalmente debe mantener una frase primaria con carga significativa, o dos solo para un paralelismo o contraste genuinos. No dividas una palabra, nombre de producto o frase solo para reducir un porcentaje. No resaltes relleno, transiciones o palabras de baja información solo para satisfacer la cadencia. La cobertura nunca bloquea un plan. La revisión añade una advertencia de densidad no bloqueante cuando un segmento más largo está mayoritariamente resaltado o contiene demasiados rangos de resalte, y el usuario decide a partir del manuscrito completo en negrita. Si la cadencia no puede satisfacerse con un resalte significativo o una excepción explícita del usuario, informa los ids de segmento conflictivos para revisión del usuario. Nunca reescribas el SRT bloqueado durante el resaltado.

DETENTE. No renderices hasta que el usuario confirme el manuscrito completo en negrita.

Compuerta 3 — Muestra y estilo de referencia

  1. Copia default-style.json o deriva una versión con style.
  2. Mantén el valor predeterminado de center_y_ratio en 0.82 cuando no haya una demostración de referencia.
  3. Cuando el usuario proporcione una captura de referencia, inspecciónala y ejecuta style --reference-image ... con anulaciones explícitas como --center-y-ratio, --safe-width-ratio o --font-size-max. La salida registra el SHA de la imagen de referencia y sus dimensiones. Consulta style-calibration.md.
  4. Renderiza un clip de 10 a 15 segundos comenzando en el primer resalte.
  5. Ejecuta preview --video ... para resaltes CJK, Latín y mixtos, de modo que las imágenes fijas usen las dimensiones reales del vídeo de destino.
  6. Inspecciona línea base, solapamiento, recorte, área segura tipo teléfono, evitación de avatar y alineación con la demostración de referencia.
  7. Ejecuta validate --video ... --style ... para medir cada subtítulo con las dimensiones reales del vídeo y la fuente seleccionada. El renderizador puede reducir un subtítulo a font_size_min; un subtítulo que aún exceda el ancho de píxel seguro falla.

DETENTE. El renderizado completo está prohibido hasta que el usuario acepte la muestra. Los cambios de estilo crean style-vN.json; los cambios de texto vuelven a la Compuerta 1.

Compuerta 4 — Vídeo completo y extracción de fotogramas

  1. Ejecuta render sin --start ni --duration.
  2. Ejecuta validate --video ... contra el SRT bloqueado y la duración final del vídeo.
  3. Ejecuta frames contra el vídeo renderizado final con --already-burned, pasando --corrections siempre que existan correcciones. Debe incluir cada señal corregida, cada segmento resaltado y fotogramas de entrada/medio/salida.
  4. Inspecciona contact-sheet.jpg más cada fotograma a resolución completa. Las señales corregidas que falten en los fotogramas de revisión constituyen una falla de entrega.

Compuerta 5 — Entrega única

Ejecuta deliver usando el vídeo final, el SRT bloqueado, el plan resaltado, el estilo, las correcciones y el directorio de revisión. El comando escribe un manifiesto subtitle-focus-delivery con rutas, sumas de verificación, metadatos del vídeo, ids de señales cambiadas, ids de señales revisadas, procedencia de la demostración de referencia y archivos de traspaso.

Usa --handoff-dir para copiar el SRT final y generar una transcripción. Añade --copy-video solo cuando el usuario quiera copiar el vídeo. Añade --publish-copy cuando ya exista un documento de publicación terminado. Nunca inventes una copia de publicación.

Consulta delivery-schema.md.

Mapa de comandos

SCRIPT=skill/scripts/subtitle_focus.py

python3 "$SCRIPT" doctor
python3 "$SCRIPT" glossary-init --scope personal
python3 "$SCRIPT" proofread --srt /abs/in.srt --no-personal-glossary --no-project-glossary --output /abs/text-review.md
python3 "$SCRIPT" correct --srt /abs/in.srt --corrections /abs/corrections.json --output /abs/locked-text.srt --review /abs/corrections-review.md
python3 "$SCRIPT" lock --srt /abs/locked-text.srt --output /abs/srt-lock.json --confirmed
python3 "$SCRIPT" plan --srt /abs/locked-text.srt --lock /abs/srt-lock.json --output /abs/caption-plan.json
python3 "$SCRIPT" apply --plan /abs/caption-plan.json --highlights /abs/highlight.json --output /abs/caption-plan.highlighted.json
python3 "$SCRIPT" review --plan /abs/caption-plan.highlighted.json --output /abs/highlight-review.md
python3 "$SCRIPT" style --base skill/assets/default-style.json --reference-image /abs/demo.png --center-y-ratio 0.73 --output /abs/style-v1.json
python3 "$SCRIPT" validate --plan /abs/caption-plan.highlighted.json --video /abs/input.mp4 --style /abs/style-v1.json
python3 "$SCRIPT" preview --video /abs/input.mp4 --plan /abs/caption-plan.highlighted.json --style /abs/style-v1.json --cue 2 --output /abs/cue-2.png
python3 "$SCRIPT" render --video /abs/input.mp4 --plan /abs/caption-plan.highlighted.json --style /abs/style-v1.json --output /abs/edit/final-subtitled.mp4
python3 "$SCRIPT" frames --video /abs/edit/final-subtitled.mp4 --already-burned --plan /abs/caption-plan.highlighted.json --style /abs/style-v1.json --corrections /abs/corrections.json --output-dir /abs/edit/review-frames
python3 "$SCRIPT" deliver --video /abs/edit/final-subtitled.mp4 --srt /abs/locked-text.srt --plan /abs/caption-plan.highlighted.json --style /abs/style-v1.json --corrections /abs/corrections.json --review-dir /abs/edit/review-frames --output /abs/edit/delivery.json

Ejecuta python3 scripts/subtitle_focus.py <comando> --help para todas las banderas.

Contrato de dibujo

Las reglas visuales y de tipografía están en visual-spec.md. No añadas trucos de dibujo del lado del agente. Mantén una línea base compartida, agranda solo las secuencias resaltadas, mantén frases mixtas como C 组 juntas y dibuja las cadenas como secuencias completas.

No hagas

ExcusaRealidad
"El SRT solo cambió una palabra"Su hash cambió. Vuelve a bloquear y regenera todos los artefactos derivados.
"Los resaltados son obvios"La Compuerta 2 es una decisión del usuario. Espera.
"La altura predeterminada del 82% siempre es correcta"Mantén el 82% solo sin una demostración de referencia; de lo contrario, usa una anulación de estilo versionada.
"Unos pocos fotogramas al azar son suficientes"Cada señal corregida y cada segmento resaltado debe aparecer en los fotogramas de revisión.
"El nombre del archivo final nos dice lo que contiene"Solo el manifiesto de entrega es autoritativo.
"El vídeo o el MD son suficientes para recuperar el tiempo"Esta habilidad requiere un SRT exportado y no ejecuta ASR/OCR.
"Una coincidencia del glosario es ciertamente correcta"Es una sugerencia con fuente. Muéstrala y espera la aprobación del texto.
"No hay archivo de glosario significa que no se necesita decisión"La Compuerta 1 aún requiere opciones explícitas de salto personal y de proyecto.
"Las reglas generales de tipografía son obvias"Preserva el SRT. Añade solo reglas solicitadas por el usuario o enumeradas.
"Aplanar líneas del SRT es inofensivo"El plan de renderizado puede derivar una línea de visualización, pero el SRT bloqueado debe preservar el espacio en blanco no mencionado.
"Cuatro oraciones sin resaltar seguidas son aceptables"Cada par adyacente necesita al menos un segmento resaltado; la validación bloquea secuencias largas sin resaltar.
"Un aparte entre paréntesis necesita un resalte forzado para satisfacer la cadencia"Una señal completamente entre paréntesis se mantiene sin formato y separa las secuencias de cadencia; los paréntesis en línea siguen siendo parte de una señal normal.
"La cadencia es más estricta que la elección explícita de texto sin formato del usuario"La elección confirmada del usuario gana. Registra la señal o segmento objetivo en plain_overrides; nunca infieras una excepción en nombre del usuario.
"Una oración corta no puede resaltarse por completo"Puede resaltarse por completo cuando toda la oración es un punto significativo; la cobertura sigue siendo informativa.
"Quitar el límite del 30% significa que una oración larga puede volverse completamente amarilla"El resaltado largo y denso se muestra como una advertencia de revisión; mantén una frase primaria por defecto y deja que el usuario decida a partir del manuscrito completo.

Skills relacionados