CommunityProgramación y desarrollogithub.com

jiajunzeng789/cantonese-subtitle-skill

Genera subtítulos SRT en chino simplificado escrito, con una sola línea por fragmento, sin puntuación, adaptados a formato vertical u horizontal, a partir de audio/video de automóviles en cantonés, utilizando reconocimiento local con dos modelos y calibración lingüística, conservando símbolos necesarios en números y nombres propios, y sincronizando con la línea de tiempo original.

¿Qué es cantonese-subtitle-skill?

Este skill está diseñado para generar subtítulos en chino simplificado escrito a partir de contenido de audio o video en cantonés, específicamente orientado a contextos automotrices. Utiliza un proceso de reconocimiento local con dos modelos (Whisper large-v3 y Qwen3-ASR-1.7B) y una etapa de calibración lingüística para corregir nombres propios y términos técnicos. El resultado final son archivos SRT con una sola línea por fragmento, sin puntuación (excepto símbolos esenciales como decimales, porcentajes o guiones en nombres), y adaptados al formato de pantalla (horizontal o vertical). El skill es útil para desarrolladores y usuarios de asistentes de IA que necesitan subtitular material audiovisual en cantonés sin depender de servicios en la nube, manteniendo la privacidad de los datos y garantizando una alta precisión mediante la comparación de dos modelos. Además, soporta la edición colaborativa, la detección automática de formato de pantalla, la división semántica de oraciones largas y la gestión de múltiples hablantes, todo ello con un riguroso control de calidad y generación de registros de revisión.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jiajunzeng789/cantonese-subtitle-skill/tree/HEAD/skills/auto-cantonese-subtitles

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

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

Documentación

Subtítulos en cantonés escrito, una línea por fragmento, para automóviles

Límites de ejecución

  • El reconocimiento de voz y el procesamiento de medios se realizan localmente, sin subir audio/video a APIs de reconocimiento. Durante la preparación se pueden descargar modelos y dependencias públicos; en modo fuera de línea no se descargan automáticamente ni se usan servicios en la nube.
  • La calibración textual la realiza el asistente actual. Si el asistente utiliza un modelo en línea, el texto transcrito se enviará a ese modelo en línea; no se debe describir como una cadena completamente fuera de línea. Si el usuario solicita que el texto también sea fuera de línea, se usará un modelo de texto local; si no está disponible, se explicará la limitación real.
  • Entrega final en UTF-8 .srt, con exactamente una línea de texto por entrada, con la línea de tiempo del medio original correspondiente, sin sustituir por un texto plano.
  • Por defecto, sin puntuación, pero se conservan los símbolos necesarios para números, unidades y nombres formales, por ejemplo: 1.8米, 30%, -5℃, 0—100km/h, CX-5. No interpretar "sin puntuación" como eliminar todos los caracteres no chinos.
  • La entrada, los resultados de reconocimiento originales, los registros de calibración y los subtítulos finales se guardan por separado, sin sobrescribir los archivos originales.

Entorno y retroalimentación de tareas

  • Primero mostrar la lista, luego ejecutar. Usar las convenciones de estado de references/task-progress.md, marcar con ✓ cada paso verificado; actualizar inmediatamente al entrar en un paso, completarlo, fallar o esperar al usuario. En tareas largas, cuando haya oportunidad de ejecución, informar aproximadamente cada 60 segundos el paso actual, el tiempo transcurrido y el progreso reciente, sin inventar porcentajes ni prometer notificaciones en segundo plano que el software no soporte.
  • Preparación de script unificado y autocomprobación. En la primera preparación o si hay fallos de entorno, seguir primero references/runtime-setup.md ejecutando scripts/setup_runtime.py, sin improvisar comandos de instalación ni cambiar versiones de dependencias arbitrariamente. El script primero verifica en modo solo lectura los registros locales, el entorno conocido y el intérprete especificado por el usuario; si es válido, lo reutiliza; de lo contrario, crea un entorno dedicado paso a paso; los registros de instalación y el progreso se guardan en disco. Verificar por separado la decodificación de audio, la carga de modelos y la inferencia con muestras cortas. Para fallos de dependencias, ver más en references/environment-recovery.md. No modificar el Python del sistema, no codificar rutas de la computadora del desarrollador.
  • Red nacional: verificar primero las fuentes de descarga. Si es necesario instalar dependencias, priorizar verificar la accesibilidad de mirrors HTTPS confiables nacionales y la versión requerida, luego especificarlos temporalmente para el comando actual; no modificar la configuración global de pip. Los avisos deben mostrar el nombre real del paquete, la fuente y el progreso de descarga disponible, no se puede decir solo "PyTorch es grande, espere", ni calcular el tamaño de todas las dependencias como si fuera solo PyTorch. Ver más en las instrucciones de recuperación de entorno.
  • Primero evidencia, luego reparar fallos. Conservar el error completo y el código de salida, diferenciar entre problemas de red, construcción/versión, permisos y bloqueos de seguridad confirmados. El simple hecho de que pip falle, o que haya archivos en directorios temporales o que se muestre "eliminar archivo", no es suficiente para determinar un bloqueo de seguridad; no exigir por defecto desactivar protecciones, permitir archivos desconocidos o reiniciar. Si se requiere acción del usuario, explicar la base específica, la operación objetivo, el impacto y la forma de recuperación.
  • Los fallos se pueden retomar. Preparar paso a paso las herramientas básicas, Whisper y Qwen, guardando registros. Para el mismo error, después de una corrección fundamentada, reintentar automáticamente como máximo una vez; si aún falla, detener ese paso, informar el punto de interrupción y continuar con el trabajo que no dependa de él. Cuando el usuario diga "continuar", primero verificar los registros y las tareas en ejecución, reanudar desde el punto de interrupción aún válido, sin reiniciar instalaciones o descargas.

Flujo de trabajo

  1. Determinar el formato de la película. Para video, usar scripts/subtitle_profile.py para detectar las dimensiones de visualización, considerando rotación y relación de aspecto de píxeles, ignorando imágenes adjuntas como las de portadas de MP3. La dimensión de edición final tiene prioridad sobre el video fuente. Si el usuario especifica vertical, no se puede aplicar la preconfiguración horizontal basada en el archivo fuente horizontal. El audio no tiene formato: usar la configuración de la película final que el usuario ya haya proporcionado; si se desconoce, preguntar si es horizontal o vertical, o si el usuario lo necesita, generar un conjunto para cada formato, sin llamar "detección automática" a una suposición. Ver más en references/subtitle-layout.md.
  2. Reconocimiento local y verificación cruzada. Verificar la integridad del modelo, usar Whisper large-v3 y Qwen3-ASR-1.7B, conservando el texto original y los datos de tiempo. La salida de Qwen se usa para calibración cruzada; la sincronización temporal se referencia con Whisper y el audio original; solo si se necesita alineación adicional y se verifica, se carga el ForcedAligner opcional, sin considerarlo una descarga obligatoria para la ejecución básica. Comparar con el mismo material y las mismas palabras de fondo. Ejecutar muestras cortas secuencialmente; para más de 180 segundos, usar scripts/transcribe_long.py para manejar ventanas superpuestas, nombres de archivo únicos, compensaciones de tiempo y reutilización de resultados ya completados, sin escribir bucles shell improvisados. El script solo elimina de forma conservadora fragmentos duplicados que coincidan tanto en tiempo como en texto; el resto de las uniones entran en revisión; se debe combinar el audio original y los dos modelos para la deduplicación semántica, sin concatenar directamente el texto de las ventanas como versión final. Instrucciones de ejecución en references/local-testing.md. La primera comparación usa resultados sin prompt como línea base. Los segmentos omitidos, duplicados o con contenido sospechoso deben verificarse de nuevo con fragmentos cortos del audio original, sin confiar en un solo modelo para determinar la corrección.
  3. Primero calibrar, luego dividir. El asistente actual compara los textos originales de los dos modelos, el contexto adyacente y la terminología local, según references/editorial-rules.md para corregir nombres propios y candidatos homófonos, y generar un borrador de trabajo en chino simplificado escrito con puntuación conservada. Conservar condiciones, negaciones, números, suposiciones y posturas. La inferencia lingüística solo genera candidatos, no equivale a escuchar o verificación externa.
  4. Dividir en unidades semánticas de una línea según el formato de pantalla. Ya no se requiere que una oración completa ocupe una sola entrada de subtítulo. Se permite reescribir oraciones largas en oraciones cortas continuas y naturales, cada una expresando una idea clara. No se puede cortar por un número fijo de caracteres, no se pueden separar marcas, modelos, nombres, términos fijos, números y unidades, no se pueden generar palabras de enlace aisladas o estructuras sujeto-predicado/verbo-objeto a medias. Intentar caer dentro de la longitud sugerida para el formato de pantalla; las respuestas cortas no se rellenan con contenido adicional para cumplir. No eliminar condiciones, números o cambiar opiniones para acortar. Si se supera el límite de longitud, reescribir o dividir la oración, sin saltos de línea ni truncamiento.
  5. Tratar las intervenciones de múltiples hablantes por separado. No juntar preguntas y respuestas de diferentes personas en una sola oración o línea, ni usar dos líneas de diálogo en la misma pantalla para evitar subtítulos cortos. Las respuestas cortas usan el intervalo de voz real; se puede extender ligeramente la visualización en los silencios, pero sin sobrepasar la siguiente intervención. Sin separación de hablantes, no inventar identidades basadas en el texto; las intervenciones poco claras o superpuestas entran en revisión, sin garantizar que se haya resuelto la superposición de voces.
  6. Emparejar cada unidad semántica con su tiempo. Usar los puntos de inicio/fin del fragmento/palabra original correspondiente, conservando el mapeo de origen y el desplazamiento del medio. Las nuevas oraciones cortas deben volver a localizarse en el audio; no dividir el tiempo de una oración larga antigua de forma equitativa según el número de caracteres. Solo se puede usar la transcripción original en cantonés para la alineación forzada, no se puede alinear la pronunciación cantonesa con el texto reescrito en mandarín. Si la alineación falla, reescuchar/realinear, sin falsificar tiempos precisos.
  7. Finalmente, limpiar la puntuación y exportar. Una vez determinadas la división y el tiempo, el exportador limpia la puntuación, fusiona espacios sobrantes y convierte a simplificado, protegiendo los símbolos necesarios; después de la limpieza, verificar de nuevo la línea única, el ancho, la velocidad, las superposiciones y los desbordamientos. El JSON de subtítulos incluye media_duration, subtitle_profile, cues, y opcionalmente protected_terms; el esquema y la invocación se detallan en la descripción del formato de pantalla. scripts/export_srt.py rechazará la exportación si encuentra saltos de línea, ancho excesivo o restos evidentes de cantonés; se debe corregir la semántica/tiempo y reintentar, sin saltarse la verificación.
  8. Previsualización y aceptación. Al configurar la fuente, el tamaño y la zona segura de la película final, priorizar la medición del ancho de la fuente; si se usa solo la estimación del ancho de caracteres chinos, indicar claramente su limitación. SRT no puede transportar de forma fiable el formato de pantalla o el estilo; el software de edición aún puede ajustar automáticamente los saltos de línea; se debe emparejar con la misma preconfiguración de subtítulos y previsualizar en el formato de pantalla final. Solo cuando se haya escuchado/reproducido realmente se reporta como verificado sincronizado; solo una verificación estructural no puede considerarse precisa o sincronizada correctamente.

Entrega

  • <nombre_material>_horizontal.srt / <nombre_material>_vertical.srt; si hay dudas sobre nombres propios, contenido, turnos o tiempo, se usa .review.srt para identificar el borrador en revisión.
  • La lista de dudas se registra de forma independiente con la ubicación temporal, el reconocimiento original, los candidatos, la base y la razón de la duda; no incluir explicaciones en el cuerpo del subtítulo publicado.
  • Registrar sincrónicamente la fuente de la preconfiguración de la película final: detección real, especificación del usuario o solo opción de formato; no equiparar el tamaño del video original con el tamaño de la película final.
  • En las pruebas, conservar los resultados originales de cada modelo y el registro de calibración combinado, distinguiendo entre problemas de reconocimiento, reescritura, división de oraciones y línea de tiempo. No presentar el borrador de calibración combinado como la precisión independiente de un solo modelo, ni dar precisiones que no cuenten con un borrador de referencia humano.

Skills relacionados