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
| Arquivo | Quando ler |
|---|---|
references/style-bible.md | Leia 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.md | Consulte 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.md | Consulte ao escrever plan.json para verificar os campos |
references/metaphor-bank.md | Para cada argumento em um segmento gráfico, siga primeiro o fluxo de brainstorming |
references/demo-patterns.md | Escolha padrões de demonstração: Seção 2 (banco de padrões), Seção 4 (capturar atenção) |
references/layout-34.md | Seçã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.json | Lista de efeitos sonoros: personagem → arquivo de áudio, corte, ganho |
references/board-draft.md | Consulte apenas ao fazer rascunhos ou ajustar a linha do tempo |
assets/example-plan.json | Exemplo 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-turboautomaticamente), 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.shexecutanpm install(seKOUBO_REMOTION_CACHEestiver 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 combuild_sfx.py --library <dir>ou defina a variável de ambienteKOUBO_SFX_LIB. Se o usuário não quiser baixar, usemeta.autoSfx: falseno 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 abase/cut.mp4). Padrão: sem mudança de velocidade; só usefrom_base.py --speed 1.1se 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.pyimprimir "centro Y do rosto" desviando de 0.3–0.55, verifique o corte; use--face-ypara 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.pyusareferences/sfx-palette.jsonpara 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.jsonnocaptionsdo plan, usemeta.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:
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$PY $SK/scripts/bgm_audition.py <projeto>/public/footage34.mp4 <projeto>/audicaoBGM --track "nome=caminho@segundo_inicio" --track "nome=caminho@segundo_inicio"<projeto>/public/(meta.bgm.srcsó reconhece nomes de arquivo empublic); o vídeo final fica ~12.5dB abaixo da voz: use--rel -12.5apenas 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) outoon.tsx(escrever cenas, usarmeta.stylepara 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
wallusa a cor da parede de fundo real: antes de usá-lo, extraia um quadro depublic/footage34.mp4, meça a cor da parede de fundo, e modifique a cor base dewallna tabela de temas detoon.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 demeta.brand. - Personagem: padrão é
Kiddesenhado no código detoon.tsx. Só ativemeta.qkid: truese o usuário tiver seu próprio sprite (PNG transparente): coloque a imagem empublic/ipq/, registre o tamanho emsrc/scenes/custom/ipq.json(formato explicado emscripts/split_sheet.py). A transformação apresentador ↔ personagem (host: "morph") também precisa do sprite; se não tiver, não use —plan_check.pybloqueará. - Para séries com segmentação fixa ("Bem-vindo à edição N do XX"), use a abertura fixa
custom/intro.tsx: escrevameta.seriescom 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 decustom/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.mdno 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+orbitAtdá 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,newspara 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, escrevameta.stylee continue com os outros segmentos. - Siga a definição de estilo da etapa 3.5: cartão branco elegante usa
lux.tsx; o resto usatoon.tsx(Stageenvolve a cena, cores só deT.*, texto e linhas diretamente no fundo usamT.onBg/T.onBgSoft); adicioneTiltapenas 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;
cuessó 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 comometa.cutsconforme 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_*.jpgquadro 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 ovoldessa 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)
- 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.
- 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).
- 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).
- 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ê).
- Inclinação 3D (Tilt) só para salvar telas planas; não adicione a todo cartão.
- 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.
- 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.
- 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).
- Para sincronizar mudanças no template com o projeto, use apenas
bash $SK/scripts/sync_template.sh <projeto>: ele não toca noplan.jsondo projeto,sfx-palette.json, na tabela de registro de cenas escritas à mãoscenes/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.tse os arquivos de ferramentas emcustom/(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.shrecusa se o projeto já existir. Para enviar alterações do template de volta, usesync_back.sh <projeto> <arquivos relativos a src>…para copiar de volta para o template. - Depois de identificar um problema, corrija-o e rerrenderize para mostrar o resultado; não apenas relate o plano de ação.
- 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 usaT.inkSoft(texto branco em fundo branco fica invisível). - 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, eset -- $xnão quebra corretamente por espaços. - 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 stillpode expirar; para quadros estáticos de verificação, use semprestills.sh(exclui imagens antigas primeiro, reporta erro se a renderização falhar). Caso contrário, a imagem antiga pode ser confundida com a nova. - 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 "拆景").
- 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.
- 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.
- 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.
- Áudio e vídeo não devem ser separados: todo o material e cortes usam o mesmo
source.move a mesma tabela de edição. O template deve misturar BGM e efeitos sonoros; o áudio só pode ser sobreposto.render_final.pymede 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.