Communitygithub.com

QQTangBa/cangshu-koubo-motion-edit

Pipeline de edição de vídeos de narração em chinês para formato 3:4 (1080×1440) com animações, alternando entre trechos com o apresentador e gráficos animados.

O que é cangshu-koubo-motion-edit?

Este skill implementa um pipeline completo de edição de vídeos de narração (口播) em chinês, transformando gravações já finalizadas em vídeos verticais 3:4 (1080×1440) com animações gráficas sofisticadas. Ele opera sobre o skill base `cangshu-koubo-wudongxiao`, adicionando funcionalidades de corte 3:4, segmentos gráficos, B-roll, trilha sonora e efeitos sonoros. O processo inclui: transcrição com mlx-whisper, remoção de erros de fala e pausas longas (utilizando o script do skill base), recorte 3:4 com detecção facial, remoção de fundo via Vision framework do macOS, e geração de um `plan.json` com timestamps palavra-por-palavra. A renderização usa Remotion 4.0.520 para produzir os segmentos de apresentador com cartões de dados em vidro fosco, palavras grandes subindo letra por letra, navegação de progresso no topo, e segmentos gráficos escritos manualmente (um único protagonista navegando por uma cadeia lógica, com animações de estado e movimentos de câmera 3D suaves). Os efeitos sonoros são aplicados apenas em transições-chave, e uma etapa de QA verifica problemas de clipping, sobreposição e volume do áudio. O skill também gerencia a audição de BGM, a estilização de legendas (palavras-chave ampliadas e destacadas em amarelo), a criação de capas no formato 3:4, e fornece orientações sobre como gravar vídeos de narração neste formato. Ele é projetado exclusivamente para macOS (Apple Silicon) e requer que o vídeo de entrada já esteja gravado e finalizado.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/QQTangBa/cangshu-koubo-video-skills/tree/HEAD/skills/cangshu-koubo-motion-edit

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Pipeline de Edição com Animações para Vídeos de Narração (Formato 3:4)

Quando o apresentador fala, o visual reage. Os segmentos gráficos são "um protagonista navegando por uma cadeia" — não viradas de página.

Este skill é construído sobre o base cangshu-koubo-wudongxiao: cortes de erros de fala, pausas, pontos de corte, fontes de legenda e palavras sensíveis usam seus scripts e regras. Este skill adiciona apenas o corte 3:4, segmentos gráficos, B-roll, BGM e efeitos sonoros. Ambos os skills devem estar instalados no mesmo diretório skills.

Mapa de Arquivos

ArquivoQuando ler
references/style-bible.mdLeia antes de escrever o plan: ritmo, camadas nos trechos com apresentador, transições para/e dos gráficos, animações, câmera, estilo visual, efeitos sonoros
references/scene-guide.mdConsulte ao escrever segmentos gráficos (cenas escritas à mão): coordenadas e câmera, ferramentas kit / lux / toon, temas de estilo, lista de clipping, dicas de áudio, exemplos analisados
references/plan-schema.mdConsulte ao escrever plan.json para verificar os campos
references/metaphor-bank.mdPara cada argumento em um segmento gráfico, siga primeiro o fluxo de brainstorming
references/demo-patterns.mdEscolha padrões de demonstração: Seção 2 (banco de padrões), Seção 4 (capturar atenção)
references/layout-34.mdSeção 2 zona segura (leia antes de escrever o plan); Seção 1 dicas de gravação (responda quando o usuário perguntar como gravar)
references/sfx-palette.jsonLista de efeitos sonoros: personagem → arquivo de áudio, corte, ganho
references/board-draft.mdConsulte apenas ao fazer rascunhos ou ajustar a linha do tempo
assets/example-plan.jsonExemplo completo. Os segmentos gráficos são custom/stock1.tsx, stock2.tsx (estilo cartão branco); exemplo de estilo cartoon é custom/toon_panel_example.tsx. As tags tag/pill e "rótulos voando para o segmento gráfico" são práticas antigas — não as copie

Ambiente

uv venv -p 3.12 <dir_temporário>/venv && VIRTUAL_ENV=<dir_temporário>/venv uv pip install mlx-whisper "opencv-python-headless<5" numpy scipy pillow

OpenCV deve ser < 5 (5.x não tem detector facial). Daqui em diante, $SK = diretório deste skill, $B = diretório scripts/ do skill base (cangshu-koubo-wudongxiao/scripts no mesmo nível que este skill), $PY = python do venv acima.

  • Só funciona em macOS (Apple Silicon): transcrição com mlx-whisper (modelo lê do cache local primeiro, se não existir baixa mlx-community/whisper-large-v3-turbo automaticamente), remoção de fundo com Vision nativo (precisa do swiftc do Xcode Command Line Tools). Também precisa de ffmpeg e Node 18+.
  • Renderização com Remotion 4.0.520: new_project.sh executa npm install (se KOUBO_REMOTION_CACHE estiver definido, procura dependências da mesma versão naquele diretório para reutilizar). Remotion tem sua própria licença: gratuito para indivíduos e pequenas equipes; empresas acima de um certo porte precisam de licença comercial. Alerte o usuário uma vez antes de começar.
  • A biblioteca de efeitos sonoros não acompanha o skill. Na primeira execução, obtenha consentimento do usuário (fonte: 30 da mixkit.co + dois pacotes de kenney.nl, ~3.3 MB), depois baixe com python3 $SK/scripts/fetch_sfx_library.py <dir>. Use com build_sfx.py --library <dir> ou defina a variável de ambiente KOUBO_SFX_LIB. Se o usuário não quiser baixar, use meta.autoSfx: false no plan e não escreva cues, gerando uma versão sem efeitos sonoros.
  • BGM, banco de imagens, imagens de produtos e sprites de personagens são fornecidos pelo usuário — não procure na internet.

Fluxo

1. Receber Entrada, Criar Projeto

  • Vídeo original (obrigatório); script final da narração ou arquivo SRT exportado do CapCut/outro software (se houver); texto da marca (meta.brand, nome de usuário ou marca; se não houver, não ative a parede de texto da marca); materiais de fundo (fonte dos cartões de dados); BGM, imagens e fotos de produtos com licença.
  • Pergunte se este vídeo pertence a uma série com práticas fixas (estilo visual, abertura, BGM): se sim, siga-as e não pergunte novamente.
  • bash $SK/scripts/new_project.sh <projeto>. Pergunte onde o projeto deve ser criado.

2. Cortar Erros, Sincronizar Legendas (usando o base), Gerar Material 3:4, Remover Fundo, Efeitos Sonoros

Cortar erros de fala e repetições, cortar pausas, corrigir pontos de corte, fontes de legenda e palavras sensíveis, sincronizar legendas — use os scripts e regras do skill base (references/cut-rules.md, captions.md). Tudo é feito dentro de <projeto>/base/. Não duplicamos essas regras aqui.

$PY $B/prepare_source.py <vídeo original> <projeto>/base/source.mov    # Passo 0: organizar em source.mov; se o usuário já aplicou maquiagem/redução de ruído, use a versão com três parâmetros (veja passo 0 do skill base)
$PY $B/transcribe.py <projeto>/base/source.mov <projeto>/base/raw_transcript.json
#    Siga cut-rules.md do skill base para escrever <projeto>/base/edl.json (source escreva source.mov; se não houver abertura fixa de série, use "intro": false na raiz)
$PY $B/cut_takes.py <projeto>/base
$PY $B/find_ng.py <projeto>/base                        # Transcrição nível-frase para encontrar repetições, obrigatório
$PY $B/edl.py rebuild <projeto>/base --remove <início-fim>...  # Remover erros de fala, cortar pausas >0.4s, ajustar pontos de corte, remover fragmentos
$PY $B/cut_takes.py <projeto>/base && $PY $B/find_ng.py <projeto>/base
$PY $B/transcribe.py <projeto>/base/cut.mp4 <projeto>/base/cut_transcript.json --prompt "A seguir, narração em mandarim. Eu sou <nome do apresentador>, o conteúdo é sobre <área>."
python3 $SK/scripts/srt_captions.py <legenda.srt> <projeto>/base/fonte_legenda.txt      # Se o usuário forneceu SRT: use as palavras de lá para o rascunho
python3 $SK/scripts/captions.py <projeto>/base/cut_transcript.json <projeto>/base/fonte_legenda.txt   # Se não forneceu legenda: use a transcrição para o rascunho
#    Siga captions.md do skill base para modificar fonte_legenda: erros, nomes próprios, [palavras-chave], palavras sensíveis
$PY $B/captions.py <projeto>/base
$PY $SK/scripts/from_base.py <projeto>/base <projeto>/public  # Corrigir pontos de corte + cortar para 3:4 + gravar com fusão de fluxo óptico em 8 quadros, escrever words.json, cuts.json, copiar captions.json
bash $SK/scripts/matte.sh <projeto>/public/footage34.mp4 <projeto>/public/person.webm
python3 $SK/scripts/build_sfx.py <projeto>/public --library <dir_biblioteca_efeitos>
  • A partir daqui, todo o tempo usa a linha do tempo de public/words.json (quando não há mudança de velocidade, é igual a base/cut.mp4). Padrão: sem mudança de velocidade; só use from_base.py --speed 1.1 se o usuário pedir (usando a mesma abordagem do skill base: abertura da série em velocidade original, depois velocidade geral alterada, voz sem distorção, legendas e tempos de palavras convertidos). Siga as regras do skill base para estabilização de abertura e silenciamento de voz: não faça ativamente, pergunte primeiro.
  • Se o from_base.py imprimir "centro Y do rosto" desviando de 0.3–0.55, verifique o corte; use --face-y para especificar. Se o vídeo original já for 3:4, redimensione inteiramente sem cortar.
  • Para remoção de fundo, extraia um quadro e sobreponha em fundo cinza escuro para verificar cabelos e ombros. Se a remoção não for boa, anote e, ao escrever o plan, remova o campo meta.person (não use string vazia); o template fará o downgrade automaticamente.
  • build_sfx.py usa references/sfx-palette.json para construir efeitos sonoros a partir da biblioteca — não busque novos materiais (princípios de seleção de áudio na seção 10 do style-bible).
  • Legendas: coloque captions.json no captions do plan, use meta.captionStyle: "pop" (palavras-chave ampliadas 1.32x em amarelo brilhante, letras sobem com um leve salto, desaparecem em um quadro).
  • Os valores padrão de nitidez para material (crf 10 + leve nitidez), remoção de fundo (crf 18) e renderização (quadros PNG + crf 12) já estão nos scripts e templates — não os reduza (ficaria borrado).
  • BGM sem definição: faça primeiro uma audição (se o usuário pedir recomendação ou se não houver convenção de série): escolha 6–9 faixas de estilos diferentes da biblioteca fornecida pelo usuário (se precisar de créditos, lembre o usuário). Para cada uma, encontre um ponto já no ritmo e combine com os primeiros 8 segundos do material cortado para reprodução contínua. Aguarde a escolha do usuário:
    $PY $SK/scripts/bgm_audition.py <projeto>/public/footage34.mp4 <projeto>/audicaoBGM --track "nome=caminho@segundo_inicio" --track "nome=caminho@segundo_inicio"
    
    O nível da audição fica ~11dB abaixo da voz (a 20dB abaixo, quase inaudível). Após a escolha, crie um hard link ou copie a faixa para <projeto>/public/ (meta.bgm.src só reconhece nomes de arquivo em public); o vídeo final fica ~12.5dB abaixo da voz: use --rel -12.5 apenas para essa faixa e execute novamente. meta.bgm.volume = 10^(ganho_impresso/20), meta.bgm.from = segundo_inicio. Se a faixa for mais curta que o vídeo, ela se repetirá; avise na entrega. Se o usuário não tiver BGM, não adicione.

3. Organizar Segmentos, Suplementar Informações

  • Siga as seções 2 e 4 do style-bible para dividir: explicar mecanismo, dar exemplos, fornecer dados, fazer comparações → vão para gráficos; expressar opinião, concluir, fazer transições → voltam para apresentador. Segmentos gráficos ≤ 16s; escreva chapters (vídeos curtos: 3 segmentos).
  • A carga de informação depende de dados verificados: para argumentos-chave nas falas, se possível pesquise online por números com origem rastreável para cartões de dados; se não tiver certeza, não use. Na tela, use referências genéricas; links reais vão nas instruções de entrega. Estimativas pessoais na narração devem ser rotuladas como "julgamento pessoal". Dados suplementares devem ser listados e confirmados com o usuário.

3.5 Estilo Visual, Abertura (definir direção primeiro)

  • Duas abordagens de estilo: lux.tsx (cartão branco elegante, paleta fixa, não participa do tema) ou toon.tsx (escrever cenas, usar meta.style para alternar entre 9 temas — style-bible seção 7). Se houver convenção de série, siga-a; caso contrário, use toon para escrever. Depois de escrever o primeiro segmento gráfico na etapa 5, gere um rolo de estilo para o usuário escolher. Quando o usuário quiser mudar de estilo, troque apenas elementos e animações; não mexa na cor de fundo ou na parede de texto.
  • O tema wall usa a cor da parede de fundo real: antes de usá-lo, extraia um quadro de public/footage34.mp4, meça a cor da parede de fundo, e modifique a cor base de wall na tabela de temas de toon.tsx. Isso evita que o fundo mude de cor ao fazer a transição para o gráfico.
  • Para ativar a parede de texto da marca atrás dos segmentos gráficos (linhas de texto da marca rolando alternadamente para os lados), escreva meta.wall: true (tema dark ativa por padrão; só funciona em cenas toon). O texto vem de meta.brand.
  • Personagem: padrão é Kid desenhado no código de toon.tsx. Só ative meta.qkid: true se o usuário tiver seu próprio sprite (PNG transparente): coloque a imagem em public/ipq/, registre o tamanho em src/scenes/custom/ipq.json (formato explicado em scripts/split_sheet.py). A transformação apresentador ↔ personagem (host: "morph") também precisa do sprite; se não tiver, não use — plan_check.py bloqueará.
  • Para séries com segmentação fixa ("Bem-vindo à edição N do XX"), use a abertura fixa custom/intro.tsx: escreva meta.series com nome da coluna, número da edição e título. No plan, coloque um segmento B de ~3.2s naquela fala. O método de registro está nos comentários de custom/index.ts.

4. Para Cada Segmento Gráfico, Primeiro Pense no que Ele Vai Apresentar

  • Siga a seção 1 do metaphor-bank: para cada argumento, escreva um candidato em cada um dos quatro níveis ("direto / metáfora / exagerado / absurdo"), pontue e escolha um. Pelo menos metade de um vídeo deve chegar a exagerado ou absurdo (premissa: compreensão em 1 segundo). Salve a tabela como brainstorm_criativo.md no projeto.
  • Defina "protagonista + cadeia + tabela de animações" (style-bible seção 5): o mesmo protagonista se transforma ao longo da cadeia; pelo menos 3 cadeias de animação de estado; pelo menos 1 referência cruzada entre segmentos ou mundos; cartões de dados surgem ao lado do protagonista como anotações, e se recolhem quando a fala termina.

5. Escrever Cenas à Mão

Siga o scene-guide para escrever src/scenes/custom/<nome>.tsx e registre-as. Pontos-chave:

  • A câmera só se move nas junções entre falas; em pouso, o tempo médio é ≥2s (nunca menos de 1.4s) e completamente parado; cada movimento dura 0.6–0.9s, principalmente zoom in/out; Camera3D + orbitAt dá perspectiva 3D a toda a tela.
  • Se o estilo visual não estiver definido: primeiro escreva o segmento gráfico (toon), organize esta parte no plan, execute $PY $SK/scripts/style_reel.py <projeto> <segundo_inicio> <segundo_fim> --themes dark,white,chalk,news para gerar um rolo de estilos para o usuário escolher. Se o usuário quiser "mais alguns", use outros temas (blue, neon, water, toon, wall) e gere novamente. Troque apenas o estilo visual; não mude ações ou texto. Após a escolha, escreva meta.style e continue com os outros segmentos.
  • Siga a definição de estilo da etapa 3.5: cartão branco elegante usa lux.tsx; o resto usa toon.tsx (Stage envolve a cena, cores só de T.*, texto e linhas diretamente no fundo usam T.onBg / T.onBgSoft); adicione Tilt apenas em telas planas.
  • Use objetos desenhados em código (vetores planos de custom/objs.tsx; se faltar, adicione ali). Não use ícones realistas.
  • Sincronização: verbos com erro ≤0.1s, substantivos com 0.3–1s de antecedência, números com 0.4s de antecedência.
  • O primeiro elemento aparece após contentStart(seg) (nada durante a animação de transição); qualquer elemento deve ter um novo elemento ou mudança dentro de 5–7 segundos (style-bible seção 5 sobre carga de informação).
  • Só divida uma cena de B-roll em vários blocos se a informação não couber em uma tela; mova a câmera entre os blocos (meia tela, cada tela preenchida — style-bible seção 6 "múltiplas telas em um segmento"); se couber em uma tela, não divida.
  • Se a fala mencionar algo concreto (uma pintura, um slide, um mini-app, um rascunho), pode inserir imagens reais: apenas imagens com licença fornecidas pelo usuário, colocadas em public/real/; imagens geradas por IA devem ter a marca d'água "Gerado por IA"; use apenas imagens, não vídeos reais da internet (style-bible seção 7). Se o usuário não fornecer imagens, desenhe com código.
  • Ao posicionar, siga a seção 5 do scene-guide para evitar clipping e violação de borda; cues só para animações-chave.

6. Escrever plan.json

Siga o plan-schema para escrever segments, captions, chapters e camadas dos trechos com apresentador. Nos trechos com apresentador, números vão no cartão de dados no canto superior esquerdo (metric), conclusões em texto grande na frente, palavras-chave lado a lado em texto sobre a cabeça (sideWords), fechamento de um argumento em post-it (sticker); palavras-chave curtas (2–3 caracteres) ocasionalmente em texto grande atrás da cabeça (topWord, look: "steel"), listas de pontos ocasionalmente em caixa de informação no canto superior esquerdo (infoBox); se ambos aparecerem no início, o texto grande voa para se tornar o canto do infoBox. As transições para/e dos gráficos seguem a seção 9 do style-bible: escreva enter / host / exit: "拆景" (split set) com corpo cortado no canto, "淡出" (fade out) com círculo — não misture; use "拆景" apenas se o fundo tiver objetos distintos em ambos os lados; caso contrário, use "淡出". Se o início ou fim de um B-roll for um personagem e houver sprite, pode-se adicionar transformação (host: "morph" + hostPath). Se não escrever exit, a transição será corte seco. Trechos com apresentador não devem ser mais curtos que ~2.2s. Não use cápsulas de texto pequeno no canto superior esquerdo/direito (tag, pill) — parecem IA; também não use anotações, post-its, barras de notícias, texto decorativo ou dicas de animação sem texto.

$PY $SK/scripts/fit_bigtext.py <projeto>
python3 $SK/scripts/plan_check.py <projeto>/src/plan.json

Se houver segmentos "拆景", gere o material correspondente (a partir do quadro de transição, separe em três camadas: fundo vazio / objeto esquerdo / objeto direito): $PY $SK/scripts/split_plates.py <projeto>. Se mudar os limites do segmento, execute novamente. Se a separação estiver errada, ajuste os limiares no script para o seu fundo; se não conseguir, mude para "淡出". fit_bigtext.py calcula oclusão para letras grandes atrás da cabeça (≤35%), não encosta na barra de progresso; se não couber, mova para a frente da pessoa. plan_check.py limpa os "deve corrigir" e trata um por um os "sugere corrigir", explicando o motivo.

7. Revisão de Texto na Tela

python3 $SK/scripts/screen_text.py <projeto>/src/plan.json --with-captions

O texto de cenas escritas à mão também é extraído; o texto em imagens reais inseridas não é extraído — verifique manualmente cada uma. Se houver um skill de verificação de conformidade/palavras sensíveis instalado no projeto, delegue a ele (especificando a plataforma alvo e se é promoção comercial; relate cartões de texto e legendas em linhas separadas). Caso contrário, percorra manualmente a lista de palavras sensíveis do skill base (captions.md) e palavras proibidas comuns da plataforma alvo, e submeta o texto extraído ao usuário para verificação. Se houver riscos, corrija primeiro, depois reextraia e reaverifique. Se apenas a posição for alterada e o texto não, reextraia e compare linha por linha com a rodada anterior; se idêntico, mantenha a conclusão.

8. Pré-visualização

cd <projeto> && npx tsc --noEmit -p . && npm run preview
bash $SK/scripts/stills.sh <projeto> <nome> <segundo> <segundo>

stills.sh gera quadros estáticos em meia resolução, lado a lado. Verifique cada vez que a câmera pousar e onde os elementos se encontram. Mostre a meia resolução ao usuário, ajuste as cenas e o plan com base no feedback. Se o usuário quiser comparar várias abordagens: use Morph-<dissolve|iris|flip|poof> para transformação e Top-<steel|extrude|…> para texto grande atrás da cabeça, renderizando o mesmo segmento.

  • Verificação de carga de informação: meça as mudanças visuais segmento por segmento (ignorando a barra de legendas e a barra de progresso). Se houver um intervalo >4s sem novos eventos, adicione algo.
  • Se, após escrever o plan, você perceber um erro de fala (a mesma frase dita duas vezes): não mude o tempo no plan. Use python3 $SK/scripts/cut_slips.py <projeto> <início-fim>… para cortar o material, escreva os campos como meta.cuts conforme impresso (plan-schema seção 1), depois retranscreva os segundos próximos ao corte para confirmar que sobrou apenas uma instância. Se o tema for escuro, verifique segmento por segmento: "texto escuro em fundo escuro" e "texto branco em cartão branco".

9. Vídeo Final + QA

python3 $SK/scripts/render_final.py <projeto> --ver v1 --py $PY

Um comando para tudo: renderizar → medir o atraso de áudio introduzido pela renderização e compensá-lo (evitando clipping) → medir a sincronização labial (qa/sinc_labial.txt, mediana áudio-vídeo >20ms requer correção) → verificação final do áudio do vídeo → renderizar trilhas de áudio de efeitos sonoros, medir volume uma por uma → gerar mosaicos de storyboard (segmentos gráficos e pontos de transição: 5 quadros/segundo; trechos com apresentador: 2 quadros/segundo). Resumir em out/<ver>/qa/qa.txt. Em seguida:

  • Examine qa/sb_*.jpg quadro a quadro em busca de quatro tipos de erro: elementos acima da linha vermelha (área da barra de progresso), cortados pela borda do quadro, dois elementos se atravessando, duas camadas de texto sobrepostas. Para suspeitos, extraia uma imagem maior: $PY $SK/scripts/storyboard.py <vídeo_final> --at 25.1,25.25,25.4 --w 405 --hud --out <imagem>.jpg.
  • Zere os "requer correção": se os efeitos sonoros estiverem muito altos ou baixos, ajuste meta.sfxVolume; se um específico estiver desregulado, ajuste o vol dessa cue; se houver sobreposição, remova um. Diferenças dentro de 0.3 dB são erro de medição — explique e não ajuste.
  • Após correções, execute novamente com um novo número de versão. Se apenas o áudio foi alterado (sfxVolume, vol de cues, volume do BGM), não rerrenderize o vídeo: use bash $SK/scripts/remix_audio.sh <projeto> v1 v2 --py $PY (apenas rerrenderize o áudio, mescle com o vídeo original e faça QA novamente). Se qualquer quadro visual foi alterado, rerrenderize o vídeo inteiro.

10. Entrega

Forneça o caminho do vídeo final, duração, proporção de cada mundo, número de efeitos sonoros e faixa de volume de cada um, volume geral do vídeo (tudo em qa.txt), além da conclusão da revisão de texto na tela e se é necessária verificação manual. Forneça o caminho da versão de alta qualidade diretamente; não comprima para versão mobile. Para capa 3:4: coloque a captura de tela em public/, escreva meta.cover com duas linhas de texto, execute npx remotion still src/index.ts Cover out/capa/capa_3por4.png --frame=0. O texto da capa também passa pela revisão da etapa 7. Se o usuário quiser trocar os efeitos sonoros, liste os materiais candidatos para ele ouvir; com base na escolha, modifique a lista de origem $SK/references/sfx-palette.json (válido para todos os projetos futuros) e execute build_sfx.py novamente. Se for apenas para este vídeo, copie a lista de origem para o projeto e modifique-a; use build_sfx.py <projeto>/public --palette <aquela>. O src/sfx-palette.json no projeto é um artefato gerado — não edite manualmente.

Regras Rigorosas (Cada Uma Já Causou Problemas)

  1. O texto na tela deve vir apenas das falas, do script da narração ou de informações fornecidas pelo usuário; não invente números, comentários ou fontes. Use a marca do usuário para marcas d'água.
  2. Segmentos gráficos com mais de 6 segundos devem ser escritos como cenas à mão; o quadro de rascunho (board) é apenas para rascunho (a formatação automática pode errar, parecendo slides do PowerPoint).
  3. Um segmento gráfico tem um protagonista e uma cadeia, com pelo menos 3 cadeias de animação de estado; não fique alternando entre objetos isolados (como virar slides do PowerPoint).
  4. A câmera para: tempo médio de pouso ≥2s, mínimo 1.4s, completamente parada. Nada de "zoom lento enquanto parado" (se cortar rápido demais, o espectador não vê).
  5. Inclinação 3D (Tilt) só para salvar telas planas; não adicione a todo cartão.
  6. Nos trechos com apresentador, o texto usa cartões de dados em vidro fosco, caixa de informação no canto superior esquerdo, texto grande subindo letra por letra, texto sobre a cabeça e post-its; não use cápsulas de texto pequeno nos cantos. Texto grande atrás da cabeça só ocasionalmente (baixo impacto, texto pode ser coberto pela pessoa). Cápsulas pequenas parecem IA.
  7. Evite clipping e violação de borda: o caminho inteiro dentro da zona segura, não atravesse a barra de progresso no topo, elementos não se cruzem, tubos/fluxos/luzes param na superfície de contato. Durante transformações, duas camadas de texto não se sobrepõem.
  8. Efeitos sonoros: poucos e suaves. Apenas em animações-chave. 0.3–0.7 por segundo de segmento gráfico, intervalo ≥0.5s entre dois. Cada um 1–6dB abaixo da mediana da voz. Use materiais de áudio reais e brilhantes. (Muitos ou altos demais poluem e parecem IA).
  9. Para sincronizar mudanças no template com o projeto, use apenas bash $SK/scripts/sync_template.sh <projeto>: ele não toca no plan.json do projeto, sfx-palette.json, na tabela de registro de cenas escritas à mão scenes/custom/index.ts, nem nos arquivos de cena do projeto (um rsync completo já sobrescreveu a lista de efeitos sonoros com vazia, resultando em duas versões do vídeo final sem nenhum efeito). No entanto, remotion.config.ts e os arquivos de ferramentas em custom/ (toon.tsx, lbkit.tsx, intro.tsx, qkid.tsx, ep.tsx, real.tsx) são substituídos a cada sincronização; escreva props específicas do projeto em outros arquivos. new_project.sh recusa se o projeto já existir. Para enviar alterações do template de volta, use sync_back.sh <projeto> <arquivos relativos a src>… para copiar de volta para o template.
  10. Depois de identificar um problema, corrija-o e rerrenderize para mostrar o resultado; não apenas relate o plano de ação.
  11. Texto na frente do apresentador em fundo claro deve ter contorno escuro (o template BigText, SideWords já tem duas camadas de sombra de texto + sombra suave — não remova). Em temas escuros, linhas e texto diretamente no fundo usam T.onBg; texto cinza em cartões usa T.inkSoft (texto branco em fundo branco fica invisível).
  12. Para concatenação de múltiplos áudios/vídeos (audição de BGM, rolo de estilos, reprodução contínua), sempre reamostre para 48kHz e use o filtro concat com re-encoding. Nunca use -c copy (misturar 44.1k/48k pode distorcer a voz). Use Python para escrever o comando de concatenação; no zsh, $i:a é interpretado como modificador de caminho, e set -- $x não quebra corretamente por espaços.
  13. O servidor de arquivos estáticos do Remotion não reconhece links simbólicos. Coloque materiais de outros projetos em public/ usando hard links (ln) ou cópia. Durante a renderização final, remotion still pode expirar; para quadros estáticos de verificação, use sempre stills.sh (exclui imagens antigas primeiro, reporta erro se a renderização falhar). Caso contrário, a imagem antiga pode ser confundida com a nova.
  14. A animação serve ao conteúdo: animações de transição não devem cobrir o conteúdo (voltar para o apresentador padrão é corte seco). Elementos não devem ser cobertos por remoção de fundo, círculos ou legendas. Não misture dois tipos de transição de entrada (não use círculo após "拆景").
  15. Carga de informação: qualquer elemento deve ter um novo elemento ou mudança dentro de 5–7 segundos, a menos que esteja fornecendo uma grande quantidade de informação. O personagem é coadjuvante; não projete animações em torno dele.
  16. Não mova a câmera por movê-la: se a informação couber em uma tela, não divida em blocos. Só divida dentro de um único segmento de B-roll, movendo meia tela e preenchendo cada tela. Virar páginas entre segmentos de B-roll diferentes não faz sentido.
  17. Em segmentos gráficos, use apenas imagens fornecidas pelo usuário para material real; não use vídeos reais da internet. A imagem deve ilustrar o que está sendo dito na fala. Imagens geradas por IA devem ter a marca d'água "Gerado por IA" (vídeos reais quebram a imersão e não combinam com o estilo). Fotos reais com licença fornecidas pelo usuário ainda vão para o segmento de mundo real (world S) e não são afetadas por esta regra.
  18. Áudio e vídeo não devem ser separados: todo o material e cortes usam o mesmo source.mov e a mesma tabela de edição. O template deve misturar BGM e efeitos sonoros; o áudio só pode ser sobreposto. render_final.py mede o atraso e o compensa. Não ajuste manualmente (a renderização pode atrasar o áudio em dezenas de milissegundos, causando dessincronia labial).

Modificar o Template

O template está em assets/remotion-template/src/: Film.tsx (troca de mundos, transições "拆景"/"淡出"/transformação, apresentador, áudio; sfxOnly só efeitos sonoros), timing.ts (tabela de tempos de transição, contentStart, conversão de tempo para cortes de erros de fala), morph.tsx + morphState.ts (transformação apresentador ↔ personagem, precisa de sprite), components/ (base componentes básicos, overlays camadas para trechos com apresentador, hud navegação de progresso, extra caixa de informação no canto superior esquerdo e texto grande atrás da cabeça), scenes/kit.tsx e lux.tsx (ferramentas para cenas escritas à mão e estilo cartão branco), scenes/custom/ (types.ts tipos, index.ts tabela de registro, exemplos stock1 e stock2; toon.tsx ferramentas de cartoon + 9 temas + parede de texto da marca; qkid.tsx sprite opcional de personagem (imagem em public/ipq/, tamanho em ipq.json, vazio por padrão); ep.tsx props de interface de produto; objs.tsx objetos vetoriais planos; real.tsx imagens reais e múltiplas telas em um segmento; lbkit.tsx props de cartoon; intro.tsx abertura de série; toon_panel_example.tsx exemplo); Root.tsx (Koubo34 para vídeo final com meta.style, Style-<tema> para rolo de estilos, Morph-<método> / Top-<estilo> para comparação de transformação e texto grande atrás da cabeça, Cover para capa); Cover.tsx; scenes/scenes.tsx (layout de cartão único); sfx.tsx (efeitos sonoros automáticos); scenes/board.tsx (rascunho); scenes/props.tsx (rascunho de props de cartoon; TablerIcon também usado no vídeo final). Fontes em theme.ts no F (padrão: PingFang, Avenir e outras fontes do sistema macOS; antes de uso comercial, troque por fontes licenciadas). Para adicionar campos, primeiro modifique plan.ts, depois adicione uma linha em plan-schema.md. Para enviar alterações de volta para o template, use bash $SK/scripts/sync_back.sh <projeto> <arquivos relativos a src>… para copiar de volta. Para sincronizar com um projeto existente, use sync_template.sh.

Habilidades Relacionadas