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
- Ejecuta
doctorantes del primer uso en una máquina. - Exige un SRT con marcas de tiempo. Rechaza entrada de solo MD/transcripción y solicitudes de transcripción solo con vídeo.
- 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. - 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. - 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.
- Redacta
corrections.json. Las coincidencias del glosario son sugerencias, nunca ediciones automáticas. Nunca reescribas en silencio. - 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. - 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
- Ejecuta
plan --lock ...con--max-chars 16a menos que el usuario indique lo contrario. - Redacta
highlight.jsonusando highlight-schema.md. - Ejecuta
applyyreview. Ajusta las elecciones hasta que el informe de cadencia pase, luego ejecutavalidate. - 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
- Copia default-style.json o deriva una versión con
style. - Mantén el valor predeterminado de
center_y_ratioen0.82cuando no haya una demostración de referencia. - 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-ratioo--font-size-max. La salida registra el SHA de la imagen de referencia y sus dimensiones. Consulta style-calibration.md. - Renderiza un clip de 10 a 15 segundos comenzando en el primer resalte.
- 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. - Inspecciona línea base, solapamiento, recorte, área segura tipo teléfono, evitación de avatar y alineación con la demostración de referencia.
- 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 afont_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
- Ejecuta
rendersin--startni--duration. - Ejecuta
validate --video ...contra el SRT bloqueado y la duración final del vídeo. - Ejecuta
framescontra el vídeo renderizado final con--already-burned, pasando--correctionssiempre que existan correcciones. Debe incluir cada señal corregida, cada segmento resaltado y fotogramas de entrada/medio/salida. - Inspecciona
contact-sheet.jpgmá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
| Excusa | Realidad |
|---|---|
| "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. |