Communitygithub.com

chengfeng-videocut-skills

Exporta um vídeo de narração editado em um único arquivo MP4, combinando clipes de diário, zoom, legendas e camadas HTML de uma só vez. Use 'exportar', 'gerar arquivo final', 'renderizar' ou 'queimar legendas'. Não use para gerar candidatos de exclusão de palavras, escrever legendas ou animações de tela.

O que é chengfeng-videocut-skills?

Esta skill é o último estágio do pipeline, onde toda a edição e anotações feitas nas fases anteriores são finalmente 'queimadas' em um único arquivo de vídeo MP4. Ela é essencial porque, enquanto as fases de preview mostram o resultado em tempo real sem salvar, a exportação gera o arquivo final que será distribuído. A skill suporta exportação com parâmetros como escala (scale), taxa de quadros (fps), e a opção de manter arquivos intermediários para depuração (--keep-work). Ela depende de ter o Google Chrome instalado para renderizar legendas e animações, e do FFmpeg versão 6 ou superior. O processo é dividido em duas etapas principais: primeiro, um dry-run que mostra o plano (duração, quadros, etc.) e avisa sobre quaisquer legendas ou camadas que foram cortadas; segundo, a execução real que monta, sobrepõe e compõe o vídeo final. A skill também gerencia a substituição da fonte de vídeo por uma versão de maior resolução, desde que a áudio seja idêntica. A validação final é rigorosa, exigindo verificação visual de quadros e audição humana, e não aceita capturas de tela do preview como substitutas. Ela é projetada para ser somente leitura, não alterando arquivos de projeto, e falhará se tentar corrigir problemas de fases anteriores.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Agentchengfeng/chengfeng-videocut-skills/tree/HEAD/plugins/chengfeng-videocut/skills/chengfeng-export

Perguntar na sua IA favorita

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

Documentação

Exportar (Arquivo Final)

Esta é a última etapa da cadeia e o único lugar em todo o produto onde os pixels são realmente renderizados.

Antes disso, tudo são anotações: o diário registra "quais palavras falar", as legendas registram "o que escrever na tela", as cenas registram "qual camada sobrepor", e a prévia combina esses três em tempo real para o usuário ver, sem salvar em disco. A exportação queima tudo em um único arquivo.

Requer   edit-list.json (obrigatório), subtitles.json, visuals.json + modules/
Produz   arquivo_final.mp4

Pré-requisitos: A máquina deve ter o Google Chrome (para renderizar legendas e animações como imagens). O FFmpeg / FFprobe instalado com a versão desktop já está no diretório gerenciado do Produto; instalações apenas via CLI ainda exigem ffmpeg ≥ 6 no sistema. Se o Chrome estiver faltando, um erro claro será exibido — não tente contornar: sem ele, não há camada de legenda ou animação.

Primeiro, leia e execute a seção "Nível de Conclusão" do Contrato de Fase do Skill de Negócio. A exportação não entra na máquina de estado de edição: ela não modifica nenhum arquivo de projeto, não faz gravação CAS, não avança estágio; a saída é um novo arquivo, e executá-la novamente o substitui. Portanto, não precisa de cartão de confirmação.

0. Pronto

Execute primeiro a Verificação de Prontidão do skill de verificação de atualizações — se os skills estão atualizados, se o Runtime é compatível; a raiz do plugin também é localizada ali (todos os comandos <raiz_do_plugin> abaixo devem ser substituídos pelo caminho literal). Só continue se o resultado for "pronto"; se for "necessária nova sessão" ou "parar", siga as instruções de ação (incluindo a proibição de "proibir interface substituta caseira"), e o Skill de Negócio não possui lógica de ambiente própria.

Se o resultado de prontidão for runtime.kind=desktop-managed, reutilize diretamente o CLI estável, as ferramentas de mídia e o serviço launchd/windows-task já instalados pelo App desktop; não analise caminhos do Electron, não instale novamente FFmpeg/Bun ou inicie um segundo Runtime.

Comandos

node "<raiz_do_plugin>/scripts/ensure-running.cjs" --json
node "<raiz_do_plugin>/scripts/videocut-cli.cjs" export <projeto> --dry-run --json          # Veja o plano primeiro, sem codificar
node "<raiz_do_plugin>/scripts/videocut-cli.cjs" export <projeto> --json                    # Gera o arquivo final (padrão: 2x, taxa de quadros da fonte)
node "<raiz_do_plugin>/scripts/videocut-cli.cjs" export <projeto> --out /caminho/arquivo_final.mp4 --json
node "<raiz_do_plugin>/scripts/videocut-cli.cjs" export <projeto> --scale 1 --json          # Apenas tamanho original
node "<raiz_do_plugin>/scripts/videocut-cli.cjs" export <projeto> --keep-work --json        # Mantém arquivos intermediários e PNGs quadro a quadro para depuração

Se o ensure-running falhar por identidade incorreta, conflito de porta ou serviço não saudável, pare imediatamente; não é permitido usar foreground temporário para substituir e continuar a exportação.

Duas etapas, não pule a primeira

① --dry-run relata o plano     Duração, quadros, número de telas de legenda, número de camadas de cena, segmentos com zoom, tamanho de saída.
                              Leia para o usuário. Se os números estiverem errados, o problema está nas etapas anteriores — dez minutos de codificação não vão corrigi-lo.
② Execução real               assemble → overlay → compose → verify (quatro estágios de progresso)

Os warnings (avisos) de --dry-run devem ser transmitidos exatamente como estão. Eles relatam apenas uma coisa: certas telas de legenda ou camadas de cena tiveram suas palavras cortadas, então não aparecerão no arquivo final. Isso é uma decisão das etapas anteriores, não algo que a exportação deva engolir.

Nitidez: O vídeo fonte é o teto; veja a fonte antes de ampliar

Antes de exportar, verifique a resolução da fonte (o campo source de --dry-run já mostra):

Largura da fonte ≥2560 (gravação nativa Retina)  → --scale 1, a saída é em pixels nativos, este é o melhor caso
Largura da fonte <1920 (ex.: 960×720)            → Pare primeiro: pergunte ao usuário se existe uma exportação de alta definição da mesma gravação.
                                                  Ferramentas de gravação de tela geralmente podem reexportar a mesma gravação em 3x a resolução.
                                                  Trocar a fonte é mais eficaz do que qualquer pós-processamento (veja próxima seção). Se realmente não houver → --scale 2

Por que --scale 2 ajuda em fontes de baixa resolução: ampliar o vídeo base não o torna mais nítido, mas legendas e animações são redimensionadas com base no tamanho de saída — é isso que o público realmente lê; quando a plataforma comprime novamente, imagens maiores recebem mais taxa de bits.

Não ajuste --fps para "mais nitidez". A taxa de quadros segue a fonte; alterá-la fará com que a amostragem da animação e a gravação de tela fiquem dessincronizadas.

Troca de fonte: Quando o usuário fornece uma versão de alta definição da mesma gravação

Isso não faz parte do fluxo de exportação — a exportação em si é sempre somente leitura. A troca de fonte é uma operação de material independente, feita após o consentimento explícito do usuário; depois disso, volte à exportação normal.

Primeiro, determine se é a mesma gravação (as duas primeiras condições já são suficientes):

ffprobe -v error -show_entries format=duration -of csv=p=0 <dois_arquivos>   # Duração exata em milissegundos igual
ffmpeg -v error -i <arquivo> -map 0:a:0 -c copy -f md5 -                  # Fluxo de áudio idêntico byte a byte
# Em seguida, extraia dois ou três quadros e compare visualmente o conteúdo

Áudio idêntico byte a byte = linha do tempo idêntica: cada palavra do roteiro, diário, legenda e camada de cena está vinculada ao ID da palavra, nenhuma precisa ser alterada. É exatamente isso que "vincular por palavra, não por segundo" significa na prática, ao trocar a fonte.

Quatro etapas para trocar a fonte (executado uma vez em 2026-07-29; a etapa ③ foi perdida na época, e a prévia de edição imediatamente reportou "falha na geração" — a impressão digital não está em um único lugar, use grep para encontrar todas as ocorrências da impressão digital antiga antes de agir):

① Trocar arquivo      input/source.mp4 e uploads/source.mp4 são um par de hard links —
                      delete ambos, copie o novo arquivo para input/, e recrie o hard link de volta para uploads/
                      (macOS: ln; Windows: New-Item -ItemType HardLink)
② Atualizar impressão digital    source.sha256 em project.json para a do novo arquivo
③ Verificar outro local    sourceSha256 em workbench.json também armazena a impressão digital do vídeo fonte,
                      e é exatamente este que o pipeline de prévia de edição valida — se faltar, a prévia se recusa a gerar
                      (Este é o comportamento correto do produto: se a impressão digital não corresponder, falhe, não finja com uma prévia antiga)
④ Reexportar        --scale 1 — a troca de fonte é para pixels nativos, não amplie novamente

Prática segura: use sua ferramenta de busca para encontrar todos os primeiros 8 caracteres da impressão digital antiga em todos os arquivos *.json no diretório do projeto; processe cada ocorrência (registros de cache como preview-edited/current.json serão recalculados automaticamente, não precisam ser alterados manualmente).

Se o áudio for diferente (regravado, editado, duração diferente), não é uma troca de fonte — é um novo projeto: o roteiro palavra por palavra precisa ser retranscrito, todas as anotações são invalidadas. Não force a situação.

Validação: Três itens; se um faltar, a exportação não está completa

① Comando retornou com sucesso         O produto verifica o tamanho, quadros, trilha de áudio do arquivo final e compara item por item com o plano.
                                       Se não corresponder, reporta readback_mismatch, o arquivo fica no disco como evidência,
                                       e a exportação não é considerada concluída.
② Extraia quadros e verifique pixels   Extraia quadros do arquivo final e veja com os olhos. Pelo menos cubra: um segmento com zoom,
                                       um segmento com animação em tela cheia, um segmento apenas com legendas, e a borda entre camadas.
③ Escuta humana                        Ninguém realmente ouviu; sempre registre como human listening UNVERIFIED

② Não use capturas de tela da prévia como substituto. Prévia e arquivo final são duas rotas de renderização; a validação deve verificar se elas correspondem — usar uma imagem da prévia como evidência do arquivo final é assumir a própria coisa que precisa ser verificada.

Para julgar se o zoom foi aplicado, procure marcos distintivos; a impressão geral engana (realmente aconteceu em 2026-07-29): após zoom de 1.6x, a tela parece ainda ser "uma página inteira"; em miniaturas, quase não difere da visão geral — uma vez, um quadro de zoom correto foi erroneamente julgado como "zoom perdido", perdendo meia hora e reexportando duas vezes. A maneira correta é procurar evidências que só o corte pode causar: elementos cortados pela metade (uma bolha de texto interrompida no meio), elementos de borda desaparecidos (barra lateral, barra de título). Compare com o quadro do mesmo momento da fonte para decidir num instante.

Para extrair quadros, use ffmpeg:

ffmpeg -v error -ss 8.84 -i arquivo_final.mp4 -frames:v 1 -y frame.png

Onde investigar problemas

--keep-work deixará três coisas no diretório .chengfeng-videocut/export/ do projeto, que separam diretamente "qual metade deu errado":

assembled.mkv     Apenas a edição, sem nada sobreposto. Se der errado = problema no diário ou nos clipes.
overlay/*.png     Apenas o que foi sobreposto, fundo transparente. Se der errado = problema no estilo da legenda ou no módulo.
spans/*.mp4       Segmentos após a composição. Se der errado = problema no zoom ou no alinhamento.

Tabela de referência:

Arquivo final sem legendas/animação       overlay PNG está totalmente transparente? O módulo não respondeu ao seek?
Animação parada no primeiro quadro        O módulo não implementou seek, ou a timeline GSAP não estava paused
Tela inteira branca                       Módulo faltando `:root { color-scheme: dark }`
Caixa de zoom desalinhada                 O viewBox do módulo e o zoom da camada não são o mesmo conjunto de números
Arquivo final mais curto que o plano      Algum span tem quadros insuficientes; veja o erro na fase compose
Borda entre camadas pisca com trecho original   As capturas de overlay estão desatualizadas (validação do marcador de quadro falhou). O produto depende da barra de marcadores de quadro no topo da página para provar a qual quadro cada captura pertence; se ocorrer novamente, primeiro confirme se o PNG de overlay tem a barra de marcadores no topo e se o compose cortou essa barra
Chrome não encontrado                     Instale o Google Chrome; não mude para outra rota de renderização

O que NÃO fazer

  • Não diga "exportação bem-sucedida" como sinônimo de "validação aprovada" — o comando retornar sucesso significa apenas que o produto conseguiu se alinhar, não que a imagem está correta.
  • Não use capturas de tela da prévia, DOM ou logs para substituir a extração de quadros do arquivo final.
  • Não registre "human listening PASS" se ninguém ouviu.
  • Não modifique arquivos de projeto (alterar legendas, excluir camadas, mexer no diário) para fazer a exportação funcionar. Exportação é somente leitura, não gravação.
  • Não tente compensar o trabalho das etapas anteriores na exportação: se faltarem legendas, vá escrevê-las; se faltarem cenas, vá criá-las; não improvise nada nesta etapa.

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

Agentchengfeng/chengfeng-videocut-skills

剪辑环境的唯一管理者:就绪检查(skills 是否最新 → Runtime 是否配套)、Skills 更新激活、Runtime 安装与体检。用户说检查更新、安装剪辑环境、装播放器、检查剪辑环境、剪辑环境就绪了吗、配置转录凭证时使用;业务 Skill(剪口播/字幕/画面/导出)第 0 步也引用本 Skill 的就绪检查。不用于剪辑、字幕、画面、导出本身或项目数据迁移。

Agentchengfeng/chengfeng-videocut-skills

剪辑中文口播原素材:逐词转录、词典修字出修字表、五轮扫描找口误与重复、汇总表与重复句子表、打开 Studio 让用户复核、复盘沉淀用户偏好与词典。只产出一份已复核的删词账本,不切媒体、不做字幕、不做分镜动画。用户说剪口播、处理口误、生成口播基础素材、继续剪口播,或确认卡回传 action=return_cut_review 时使用。不要用于执行物理剪切、导出剪后视频、单独安装、单独打开工作台或口播分镜成片。

Agentchengfeng/chengfeng-videocut-skills

整理、脱敏并上报 chengfeng-videocut 的 GitHub Bug。用户说上报 Bug、反馈剪口播问题、提交 GitHub Issue、这个问题告诉开发者,或要求继续提交已预览的 Bug 草稿时使用。不要用于功能建议、普通排错、代码提交或未获用户确认的自动上报。

Agentchengfeng/chengfeng-videocut-skills

给剪好的口播做字幕:直接用已有的逐词稿加账本算出剪后时间(不必导出、不必重新转录)、用词典和作者文稿改写听错的专名、按句子分屏、在 Studio 里逐屏复核。用户说做字幕、加字幕、改字幕、重新分屏、字幕不对时使用。不要用于删词剪辑、物理剪切、分镜动画或成片渲染。

Agentchengfeng/chengfeng-videocut-skills

操作 chengfeng-videocut 剪辑工作台的已有工程,通过 Runtime CLI 查工程与词句位置、添加或替换画面覆盖层、移除画面、删除明确指定的词句或片段、拆分裁剪移动已有片段、调整画布比例并回读核验。用户说插入片段、删掉这句、移除动画、换个画面、调整顺序或管理时间线时使用;先区分画面覆盖与主轨顺延插入,不负责自动判断口误、创作动画、制作字幕、导出或排查安装故障。

Agentchengfeng/chengfeng-videocut-skills

Create Ian Xiaohei-style HTML/SVG motion illustrations for Chinese articles, scripts, storyboard scenes, workflow explanations, concept metaphors, and short video visual aids. Use when the user asks for 小黑 SVG、漫画感 HTML、分层 SVG 动效、把小黑生图做成 HTML/SVG、可编辑矢量动效、口播流程动画、手绘漫画动效、正文配图动画, or wants a Xiaohei illustration style adapted into controllable HTML/SVG/GSAP output instead of raster image generation.

Agentchengfeng/chengfeng-videocut-skills

给剪好的口播配画面:在录屏上盖 HTML 层(圈重点标注 / 小黑整屏动画 / 推近),层绑字幕屏、由播放器逐帧驱动、直接在预览里看。用户说做分镜、配画面、加动画、圈重点、B-roll、做 storyboard 时使用。不要用于删词剪辑、字幕、物理剪切或成片渲染。

Habilidades Relacionadas