Communitygithub.com

MickaelAlecsander/edicao-de-cortes

Esta habilidade produz cortes verticais (1080×1920) completos para Instagram Reels e TikTok, do início ao fim, sem usar nenhuma API. Inclui pesquisa e download de fontes sem bloqueio, ranqueamento de falas, roteiro, corte preciso sem cortar palavras, verificação de fala, áudio e imagem quadro a quadro, animação da metade superior em papel recortado no HyperFrames e renderização final.

edicao-de-cortes 是什么?

Esta habilidade do agente de IA oferece um fluxo de trabalho completo e offline para criar cortes verticais (1080×1920) para Instagram Reels e TikTok, totalmente sem APIs. Ela integra pesquisa e download de fontes (yt-dlp com limites de taxa), transcrição local (Whisper large-v3 via faster-whisper ou whisper.cpp), alinhamento forçado de palavras (MMS_FA), edição de vídeo no HyperFrames, animação em papel recortado no HyperFrames, verificação de segurança de zona e renderização final. A habilidade suporta dois modos de saída: 'Reels de Vídeo Real' (perfis de marca, tela inteira) e 'Papel Recortado' (canais de opinião, metade superior animada). Regras de ouro incluem: sem APIs, aprovação antes de avançar, nunca cortar no meio de uma palavra, manutenção da pessoa central sem zoom ou pausa, legendas contínuas (1–3 palavras), área de segurança, telas cheias em intervalos específicos, melhor faixa de áudio (Opus do YouTube) sem recompressão excessiva saída em -14 LUFS, downloads espaçados para evitar bloqueio de IP, e nunca excluir permanentemente (os arquivos vão para `_lixeira/`). A instalação é feita com um comando único (`instalar.ps1`/`instalar.sh`) que prepara Python 3.11+, ffmpeg, Node 18+, npx, Chrome, whisper.cpp (opcional) e todos os pacotes Python necessários (faster-whisper, torch, torchaudio, numpy, scipy, soundfile, opencv, yt-dlp). O fluxo de trabalho consiste em 5 etapas: Tema (ranqueamento), Fonte (download), Roteiro (transcrição e script), Corte (medição, edição, legendas) e Animação (cenas, som, render, verificação). Os comandos são executados a partir da pasta do projeto `cortes/cNN-slug/` usando scripts da pasta `references/` da skill.

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add MickaelAlecsander/edicao-de-cortes

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Edição de cortes (sem API)

Esta skill reúne tudo o que o canal aprendeu editando cortes: pesquisa e download, ranqueamento, roteiro, corte, conferências e animação. Cada regra veio de um erro que já foi ao ar ou quase foi. Ela roda num ambiente sem API nenhuma:

  • Editar e renderizar: o HyperFrames (npx --yes [email protected] …).
  • Ler e ouvir o áudio: o Whisper local (whisper.cpp pelo HyperFrames, ou faster-whisper).
  • Medir o tempo de cada palavra: o alinhador forçado local (MMS_FA, torchaudio) e o envelope do áudio.

Dois modos: escolher antes de começar

ModoQuandoModelo
Reels de vídeo realPerfil institucional ou de marca (ex.: @amigosdobem): a pessoa ou a ação na tela inteira, manchete, nome e função, imagens de cobertura, logo e legenda. Pouca ou nenhuma animação.assets/modelo_reels/ (ver o LEIA-ME.md dele)
Papel recortadoCanal de cortes de opinião (o do Raul): a metade de cima animada em papel, o apresentador embaixo e telas cheias de animação.assets/modelo/ e references/animacao-hyperframes.md

Na dúvida, perguntar qual dos dois. Tudo o que vem antes da animação (tema, roteiro, corte sem comer palavra, conferências de fala e de áudio, legenda, área de segurança, finalização e entrega) vale igual para os dois. No reels de vídeo real, a Etapa 3 é o montar_reels.py no lugar das cenas, e as regras de personagem, papel e telas cheias de animação não se aplicam.

Regras de ouro (valem em toda etapa)

  1. Sem API. Nada de chave da OpenAI ou de qualquer serviço pago. O Whisper local dá o TEXTO. O tempo fino vem do alinhador MMS_FA e da pausa real no envelope (scripts/pausas.py). O Whisper não é prova de tempo: no C29, o large-v3 pôs palavras até 1,4 s fora do lugar, e cada erro virou uma ponta errada.
  2. Aprovação antes de avançar. Roteiro aprovado → edição → animação → prévia. Nada é agendado ou publicado sem o "pode agendar" do dono do canal. Quando ele pedir "faz até o final", as aprovações do meio se juntam numa só: a da prévia.
  3. Nunca cortar no meio de uma palavra. A ponta é sempre um vale de energia abaixo de −40 dB, antes da palavra SEGUINTE. Toda emenda é ouvida de novo depois de montada (scripts/ouvir_emendas.py).
  4. O Raul inteiro, centrado, sem zoom e nunca travado. A imagem é sempre a do mesmo instante do áudio; em podcast, ela fica em quem está no raciocínio, e quem fala se marca em todo corte com 2 pessoas. Cabeça nunca cortada. Na tela dividida da fonte, o painel dele preenche a janela de baixo; nada de laterais desfocadas. Não pode haver quadro parado com fala. Foto ou gráfico em tela inteira na fonte vai para debaixo de uma TELA CHEIA da animação.
  5. A legenda fica do começo ao fim, de 1 a 3 palavras, com palavrão censurado (F**A).
  6. Área de segurança sempre. Nada embaixo da busca do TikTok, nada saindo pelas laterais, nada embaixo dos botões ou do texto do post. scripts/zona_segura.mjs precisa dar ✓ antes de todo render.
  7. Tela cheia: 3 vezes de 5 s ou mais em vídeo de até 2 min, 4 vezes acima de 2 min. A 1ª vem logo após o gancho.
  8. A melhor faixa de áudio (o Opus do YouTube), um mínimo de recompressão e a saída em −14 LUFS. O efeito sonoro fica sempre por baixo da fala.
  9. Download espaçado. Um pedido por vez, nunca em rajada, com folga entre eles (scripts/baixar.py já faz isso). Um IP marcado com 429 só volta com tempo. O cliente web_safari,mweb serve só para LISTAR vídeos e ler os dados deles (título, idioma, canal). Com ele a legenda some ("has no subtitles" em todo vídeo) e a resolução vem falsa (360p), então legenda e mídia vão no cliente padrão.
  10. Nunca apagar de vez. O que sai vai para _lixeira/, e quem esvazia é o dono do canal. Nunca digitar senha nem token: o login é sempre a própria pessoa quem faz.

Instalação (uma vez por máquina)

O jeito mais fácil: o comando de um passo do README (instalar.ps1 no Windows, instalar.sh no Mac) instala os programas que faltam, baixa a skill e roda o scripts/instalar.py.

O Python dos scripts: se existir o arquivo .python na pasta da skill, todo python dos comandos desta skill é o caminho escrito nele (ex.: ~/.venv-cortes/bin/python). O instalador cria esse ambiente quando o Python do sistema recusa o pip (PEP 668: o do Homebrew no Mac, o do Debian/Ubuntu).

python scripts/instalar.py (com o Python 3.11+) prepara a máquina numa rodada só. No fim, ele diz "✓ pronto para editar" ou lista o que faltou. Ele faz cinco coisas:

  1. Confere o Python, o ffmpeg e o ffprobe, o Node 18+ com o npx e o Chrome. O que não sai por pip ou npm, ele diz como instalar no seu sistema.
  2. Faz o pip install só do que falta (faster-whisper, torch e torchaudio de CPU, numpy, scipy, soundfile, opencv, yt-dlp). O que já está instalado não é atualizado nem rebaixado.
  3. Faz o npm install playwright-core em scripts/, que é de onde o zona_segura.mjs e o erros_js.mjs o importam.
  4. Baixa o Whisper large-v3 (~3 GB) e o MMS_FA (~1,2 GB) e aquece o npx --yes [email protected] e o Chrome do render.
  5. Faz o autoteste: o --help de 3 scripts, o node --check dos .mjs e o assets/modelo/ montado numa pasta temporária.

Ele tem três opções:

  • --so-conferir: só confere e não instala nada.

  • --sem-modelos: pula os modelos.

  • --modelo-whisper medium: para máquina fraca. Depois, passe --modelo medium ao transcrever_local.py.

  • Whisper do HyperFrames (opcional): npx --yes [email protected] transcribe <arquivo> -e whisper -m large-v3 -l pt --json. Ele precisa do whisper-cpp, e o npx --yes [email protected] doctor diz se ele está instalado.

  • O que precisa de internet (o resto roda offline):

    • baixar as fontes (yt-dlp);
    • na 1ª vez, os modelos (o Whisper large-v3 e o MMS_FA) e o Chrome do render; o instalador já baixa os três;
    • o GSAP do CDN, em todo render;
    • as fontes do Google Fonts, na 1ª montagem (depois ficam guardadas em ~/.cache/hyperframes/fonts).
  • Testar a máquina a qualquer hora: python scripts/instalar.py --so-conferir.

Estrutura do projeto

<projeto>/
  _fontes/            vídeos e áudios baixados (o <id>_opus.mkv é a fonte do corte)
  _pesquisa/          legendas, transcrições (<id>_palavras.json), radar e notas
  _lixeira/           o que sai (fontes depois de publicadas etc.)
  cortes/cNN-slug/    um corte: ROTEIRO.md, cortes_gerar.py, cortes.json, pos_cortar.py, _cenas.js, montar.py,
                      gera_som.py, som.json, capa/, post.json, assets/ (raul.mp4, raul.wav, tempos.json, dados.js),
                      renders/ (etapa3_bruto.mp4, etapa3.mp4, cNN_previa.mp4, cNN_capa.jpg)
  LOG_CORTES.md       uma entrada por corte (id da fonte, o que foi ao ar, o que o dono decidiu) e as "Lições acumuladas";
                      sem ele, o ranking_shorts.py não tira nenhum id já usado
  REGUA.md            as correções do dono à régua (ler antes de dar nota); RADAR.md é gerado pelo nota_viral.py

O fluxo de um corte

Ler a referência da etapa ANTES de começá-la. Cada uma tem as regras completas e o porquê de cada uma.

EtapaO que fazerReferênciaScripts
0 · TemaAchar candidatos, ranquear falas e shorts, dar a nota da régua, escolher pelo placarreferences/ranqueamento.mdnota_viral.py, ranking_shorts.py, analise_shorts.py, acha_frase.py
1 · FonteListar, ler a legenda, baixar a melhor faixa sem tomar bloqueioreferences/pesquisa-e-download.mdbaixar.py, vtt2txt.py
1 · RoteiroTranscrever o trecho, montar o raciocínio completo, entregar para ✋references/roteiro.mdtranscrever_local.py
2 · CorteMedir as pontas, achar as trocas de câmera, cortar, realinhar, legendarreferences/corte-e-fala.mdpausas.py, trocas.py, cortar.py, alinhar.py, legendas.py, borrar_regiao.py, reenquadrar.py
2 · ConferirOuvir as emendas, olhar quadro a quadroreferences/conferencias.mdouvir_emendas.py, conferir_fins.py, folha_contato.py, travada.py
3 · AnimaçãoRoteiro da animação, cenas, telas cheias, área de segurançareferences/animacao-hyperframes.mdassets/modelo/, roteirista.py, marca.py, zona_segura.mjs, erros_js.mjs
3 · Reels de vídeo realManchete, nome e função, coberturas, logo, cores da marca (no lugar da animação)assets/modelo_reels/LEIA-ME.mdmontar_reels.py, zona_segura.mjs, erros_js.mjs
3 · SomDeixas na palavra da cena, sonoplastia por baixo da falareferences/audio.mdsonoplastia.py (+ assets/foley/)
4 · RenderRender, mux, finalizar, conferir o pronto e mandar a préviareferences/conferencias.mdfinalizar.py, folha_contato.py

Comandos, na ordem (da pasta cortes/cNN-slug/; $S = pasta scripts/ desta skill)

Começar copiando assets/modelo/ para cortes/cNN-slug/ (ver assets/modelo/LEIA-ME.md): ele traz o cortes_gerar.py, o pos_cortar.py, o montar.py, o gera_som.py, a capa e o post.json para preencher. Se a skill não estiver em ~/.claude/skills/edicao-de-cortes, definir EDICAO_CORTES=<pasta da skill>.

python $S/pausas.py <fonte> --palavras <palavras.json> <t:antes:depois> ... --perfil   # cada ponta, antes de escrever
python $S/trocas.py <fonte> --de <s> --ate <s>   # trocas de câmera e de layout no trecho
python cortes_gerar.py                       # escreve o cortes.json (blocos, janelas, recortes, trocas)
python $S/cortar.py .                        # monta assets/raul.mp4, raul.wav e tempos.json (barra ponta em fala)
python pos_cortar.py                         # TEXTO do roteiro realinhado pelo MMS_FA (palavra a palavra)
python $S/legendas.py .                      # assets/dados.js: a legenda em blocos de 1 a 3 palavras
python $S/ouvir_emendas.py .                 # cada emenda no Whisper local + envelope
python $S/conferir_fins.py .                 # as pontas de cada bloco
python $S/folha_contato.py assets/raul.mp4 --cada 2   # o Raul inteiro e a pessoa certa em cada quadro
# (✋2, se o dono pedir: ver o fim de references/corte-e-fala.md) · aqui, pedir o esforço extra antes de animar
python $S/roteirista.py batidas .            # batidas.md: frases, âncoras T() com o n certo, alusões a pessoas
python montar.py                             # index.html (animação + Raul + legenda + marca)
python gera_som.py && python $S/sonoplastia.py .   # trilha de efeitos; no fim confere JS e área de segurança
npx --yes [email protected] render . --fps 24 -q standard -w 6 -o renders/etapa3_bruto.mp4
python $S/sonoplastia.py . --mux             # som sem perda na imagem do render
python $S/finalizar.py .                     # −14 LUFS, travada, prévia de 720p
python $S/folha_contato.py renders/etapa3.mp4 --cada 3   # olhar o vídeo pronto antes de mandar

Como entregar

  • Roteiro: no formato de references/roteiro.md: linha da história, blocos com o texto completo e a cena de cada um, telas cheias, capa, autocrítica com nota e, no fim, a lista do que fica de fora.
  • Prévia: a prévia de 720p e a capa, com o resumo do vídeo:
    • as telas cheias;
    • o que foi conferido (área de segurança, travada, loudness);
    • o que foi corrigido depois do 1º render;
    • a legenda do post. Depois, esperar o "pode agendar". O pedido explícito de deixar agendado ("quero pronto, tudo perfeito, agendado") já vale como o "pode agendar" daqueles vídeos.
  • Legenda do post (post.json): informação útil com o crédito ao apresentador ("Para o Raul Sena, …"), até ~430 caracteres (no TikTok, a de ~600 perdeu o começo no campo em 3 tentativas; as de 421 e 426 entraram), sem travessão nem aspa angular e com palavrão censurado. No fim, as hashtags: as 2 da marca, de 3 a 5 do tema do jeito que as pessoas buscam e de 1 a 2 gerais, sem acento nem espaço. O trecho do post.json é o começo da legenda: ele acha o post no Studio.
  • Três redes no mesmo horário: o "pode agendar" do TikTok vale para o Instagram e o Facebook no MESMO horário, sem pedir de novo. Depois do horário, conferir que o post saiu nas três (no C80 e no C83 o Instagram falhou por bloqueio da conta).
  • Folga no TikTok: conta nova passa todo post pela revisão ("Conteúdo sob análise", até 12 h). Agendar com 2 h ou mais de folga, nunca a menos de 20 min do horário.
  • Decisão visual (layout, estilo, capa): mandar as opções em IMAGEM para o dono escolher.
  • Depois de mexer em código ou ferramenta: o resumo vem completo: o que mudou, por quê, o que ficou de fora e o que falta fazer.

Instagram (Reels)

O mesmo vídeo serve para o Reels e para o TikTok. No Instagram:

  • Subir o arquivo renderizado (renders/etapa3.mp4), nunca um vídeo baixado do TikTok: o Instagram diminui o alcance de vídeo reciclado com marca d'água.
  • A legenda do post aceita até 2.200 caracteres, mas só a 1ª linha aparece antes do "mais": ela precisa ser o gancho. Hashtags: de 3 a 5 do tema, mais as da marca (o Instagram recomenda poucas e relevantes).
  • A capa aparece na grade do perfil no recorte 3:4 do centro: o rosto e a manchete inteiros dentro dele (a capa do modelo já é feita assim). No app, ela entra em "Editar capa" → "Adicionar da galeria".
  • A área de segurança do zona_segura.mjs (busca em cima, botões à direita, texto do post embaixo) vale para os dois. No 1º post, olhar um print do Reels publicado em cada tela cheia e, se a interface cobrir algo, ajustar os limites.
  • Duração: de 1 a 2 min (o Reels aceita até 3).
  • Os números da régua e da grade (horários, pesos, limites de views) foram medidos no TikTok deste canal: no Instagram, recomeçar o placar com os próprios dados.

Outro canal

A skill nasceu no canal de cortes do Raul Sena e os exemplos são dele. Para usar com outro apresentador ou outra marca, trocar:

  • A marca: CONTA e o avatar no

…

[truncated for translation]

相关技能