O que ai-video faz?
Um vídeo é um arquivo video.json: as frases que a voz diz e, para cada ideia forte, uma cena escolhida de um catálogo de 16 tipos.
O script scripts/make.mjs faz todo o resto. Nunca escreva HTML, CSS ou código de animação manualmente. A única exceção é o momento único que merece um visual personalizado (tipo html).
ideia ─► roteiro (frases) ─► video.json ─► make.mjs ─► contato (revisão) ─► --rendu ─► MP4 + capa + texto de postagem
As chaves do JSON estão em francês (
phrases,texte,scene,voix,marque…), assim como os tipos de cena (titre,chiffre,liste…). Escreva-as exatamente como mostrado nesta habilidade. O texto que a voz diz pode estar em qualquer idioma.
Antes do primeiro vídeo (uma vez)
sh <habilidade>/scripts/install.sh # verifica node ≥ 18, ffmpeg, python3; instala edge-tts em <habilidade>/.venv
<habilidade> é a pasta deste arquivo. A primeira execução baixa HyperFrames (via npx), GSAP e os logotipos. Depois disso, tudo fica em cache.
O fluxo de trabalho
- O tópico, em uma frase. Se o usuário não fornecer nenhum, sugira 3 e deixe-o escolher.
- O roteiro. Leia
references/writing.md: ganchos que funcionam, estrutura, duração.- Mire em 9 a 14 frases e 110 a 170 palavras.
- Conte cerca de 2,7 palavras por segundo, mais 0,35 s entre frases: 130 palavras perfazem cerca de 50 s.
- O arquivo. Escreva
videos/<id>.jsonno projeto do usuário. O formato está abaixo, e o catálogo completo está emreferences/scenes.md. Coloque os arquivos de mídia emvideos/medias/. - Construir.
node <habilidade>/scripts/make.mjs videos/<id>.jsongera a voz, a página, a verificação e a contato, sem renderizar (cerca de 1 min). - Revisar. Abra apenas uma imagem:
videos/rendus/<id>-planche.jpg.- Ela mostra o quadro 1, depois cada cena no seu final (depois que todos os seus elementos chegaram), depois o cartão de encerramento.
- Corrija o JSON e execute o comando novamente. A voz fica em cache: apenas as frases alteradas são refeitas.
- Renderizar. Adicione
--rendu. Leva cerca de 1 min para 45 s de vídeo. Você obtém:videos/rendus/<id>.mp4;-couverture.jpg, a capa, que é o quadro 1;<id>.txt, com o título, legenda, hashtags e comentário fixado.
- Publicar. Leia
references/publishing.mdpara horários de postagem por país do público, cadência de postagem e legendas. Nunca publique nada sem a autorização explícita do usuário.
Economizando tokens: as regras que importam
Esta habilidade é barata porque o modelo escreve 60 a 120 linhas de JSON por vídeo, em vez de 250 a 400 linhas de HTML e código de animação. Em um teste cego, um agente novo produziu um vídeo de 60 s finalizado com cerca de 65.000 tokens, incluindo a leitura desta habilidade. Para manter isso:
-
Não abra
make.mjs,lib/*.mjs,style.cssou oindex.htmlgerado. O catálogo de cenas é suficiente. Abra o código apenas se um comando falhar e sua mensagem não for suficiente. -
Leia uma referência apenas para sua etapa:
Etapa Referência escrita writing.mdescolha de cena scenes.mdvoz, filmagem ou capturas de tela modes.mdpublicação publishing.mdNunca releia uma referência já lida na conversa.
-
Uma contato, não capturas de tela. Para verificar um vídeo, olhe
<id>-planche.jpguma vez. Nunca pegue um quadro por segundo e nunca inspecione o MP4 quadro a quadro. -
Confie na verificação. O comando executa a verificação HyperFrames (texto transbordando, texto oculto, erros de tempo de execução) e a resume em algumas linhas.
- "aucun débordement, aucune erreur" significa que está limpo.
- Uma linha ✗ sempre deve ser corrigida.
- Uma linha ⚠ vale a pena ser lida: corrija se afetar o texto.
-
Lotes levam um comando. Escreva os N arquivos primeiro. Depois execute
node make.mjs videos/a.json videos/b.json … --renduem segundo plano e aguarde a conclusão sem observar sua saída. -
Edite no lugar. Para corrigir algo, altere apenas a frase ou cena com problema no JSON. Nunca reescreva o arquivo inteiro.
-
Sem caça a ativos. Logotipos (
logo:bitcoin,logo:metamask…) e 45 ícones (icone:cle…) já estão embutidos. Procure na web por uma imagem apenas se o usuário pedir uma.
O formato video.json
{
"id": "wallet-key",
"titre": "Your crypto is not in your wallet",
"langue": "en",
"voix": { "nom": "en-US-AndrewMultilingualNeural", "debit": "+4%" },
"marque": { "nom": "BDan", "visuel": "icone:etincelle" },
"prononcer": { "USDT": "U S D T" },
"phrases": [
{ "texte": "Your crypto is not in your *wallet*.",
"scene": { "type": "titre", "lignes": ["Your crypto", "is not in", "your *wallet*"], "visuel": "icone:portefeuille" } },
{ "texte": "The key fits in *twelve words*.",
"scene": { "type": "chiffre", "valeur": "12", "apres": "words", "au": "twelve", "couleur": "accent" } },
{ "texte": "It's called the recovery phrase." }
],
"fin": { "texte": "I'm BDan.", "sous": "Let's talk new tech.", "audio": "medias/signature.wav" },
"publication": { "titre": "…", "legende": "…", "hashtags": ["crypto"], "commentaire": "…" }
}
-
phrases[].texte: o que a voz diz, palavra por palavra.*palavra*marca a palavra forte: aparece em itálico colorido, pulsa quando falada e a câmera aproxima-se dela.- Use no máximo uma por frase.
-
scene: inicia uma nova cena.- Uma frase sem cena estende a anterior, o que dá tempo para ler.
- No modo filmado, uma frase sem cena mostra o rosto; lá,
"scene": "suite"estende a cena.
-
au("em"): o elemento aparece naquela palavra da frase, por exemplo"au": "Ledger".- Sem
au, os elementos se distribuem sozinhos: um por frase quando há tantos elementos quanto frases, caso contrário em intervalos uniformes.
- Sem
-
Visuais, onde quer que uma cena os aceite:
"logo:binance","icone:cadenas","emoji:🔑", ou um caminho como"medias/screenshot.png"(arquivos.svgsão incorporados). -
voix: a voz.nomé o nome da voz,debité a velocidade.fichieraponta para sua própria gravação. -
langue:"fr"por padrão. Defina"en"para inglês, junto com uma voz em inglês. -
marque: a pequena pílula de marca no canto inferior esquerdo.nomé o nome da marca,visuelseu logotipo. -
prononcer: formas faladas. Elas mudam como a voz diz uma palavra, nunca o texto mostrado na tela. -
fin: o cartão de encerramento, com o logotipomarque,texteesous(um subtítulo).audioreproduz uma despedida gravada no cartão.- Sem
audio, o cartão permanece 2 s, em silêncio.
-
titre: o nome do vídeo nos arquivos. O título do YouTube vai empublication. -
Opcionais:
Chave Efeito musiqueum arquivo de música, com volume reduzido sob a voz couleurscores, por exemplo {"accent": "#2f6bff", "accent2": "#5fa3ff"}sons: falsesem whooshes nas transições blancsilêncio entre frases, 0,35 s por padrão pausesilêncio extra após uma frase sousTitres: falsesem legendas -
A frase 1 sempre tem uma cena. O quadro 1 é a capa que as pessoas veem nos feeds, então use um
titrecurto e de gancho.
As 16 cenas (parâmetros e exemplos em references/scenes.md):
| Para mostrar… | tipo |
|---|---|
| o gancho, uma linha impactante | titre |
| um número (preço, recorde, porcentagem) | chiffre |
| 2 a 6 pontos, ferramentas ou dicas | liste |
| um método em 2 a 5 etapas | etapes |
| A versus B, antes / depois, mito / fato | duel |
| marcas, moedas, aplicativos | logos |
| uma captura de tela ou gravação de tela de aplicativo | telephone |
| um site, uma página | navigateur |
| uma foto, como cartão ou tela cheia | image |
| uma conversa (IA, suporte, golpe) | chat |
| um perigo, um golpe, boas notícias | alerte |
| uma tendência, uma comparação em números | graphique |
| um comando, uma instalação | terminal |
| uma citação de alguém | citation |
| um conceito e sua explicação | carte |
| o momento único que merece um visual inventado | html |
Varie as cenas.
- Dê a cada ideia forte sua própria cena: 6 a 10 cenas por vídeo.
- Nunca use o mesmo tipo duas vezes seguidas e mude a ordem dos tipos de um vídeo para o próximo.
- Um estilo fixo não deve se tornar um modelo. Se três vídeos seguidos compartilham a mesma sequência de cenas, os espectadores desistem.
Os três modos (detalhes em references/modes.md)
- Gerado: o JSON é tudo que você precisa.
- A voz é edge-tts: gratuita, sem chave, muitos idiomas.
- Defina
voix.nompara mudar a voz ou o sotaque.
- Imagens: suas capturas de tela e fotos vão para
telephone,navigateurouimage, a partir devideos/medias/.- Uma voz gravada ou clonada vai em
"voix": { "fichier": "medias/voice.wav" }. - Ela é transcrita localmente (whisper) e sincronizada com suas frases.
- Uma voz gravada ou clonada vai em
- Filmado: defina
"rush": "medias/clip.mp4". O áudio do clipe é a voz.- Frases sem cena mostram o rosto, com legendas na parte inferior.
- Uma cena cobre a tela pela duração de sua ideia.
- Escreva as frases a partir da transcrição: a habilidade as sincroniza palavra por palavra.
Antes de renderizar: a lista de verificação
- A frase 1 declara o tópico claramente, e seu título é lido em menos de um segundo.
- Toda palavra técnica é explicada na mesma frase ou na seguinte.
- Há no máximo uma palavra forte por frase e 6 a 10 cenas de tipos variados.
- Números vêm de uma fonte real e verificada. Uma cena
chiffrecarregasourcequando o número vem de outra pessoa. - O contato é revisado, a verificação está limpa e nenhum aviso "mot introuvable" (palavra não encontrada) é deixado.
- O final dá uma razão para ficar (o que vem a seguir, uma frase para lembrar), não uma pergunta vaga.
- Marcas são mostradas para falar sobre elas, nunca para sugerir uma parceria.
- Conversas inventadas carregam
"mention": "Exemple fictif", ou "Example" em inglês.
Quando algo quebra
| Mensagem | O que fazer |
|---|---|
voix : … edge_tts | execute sh <habilidade>/scripts/install.sh |
mot « x » introuvable | um au deve repetir uma palavra de sua frase de cena, como escrita |
logo « x » introuvable | forneça um arquivo ("medias/x.svg"), ou tente o nome da marca sem espaços |
| texto transborda | encurte o texto, ou mude para uma cena mais larga (carte ou liste em vez de duel); não mexa no CSS |
| uma palavra é mal pronunciada | adicione-a a prononcer, por exemplo {"Ledger": "Ledjer"} |