Communitygithub.com

businessbaum/vedit

Este skill deve ser usado quando o usuário solicitar o arquivo de vídeo finalizado - "exportier das", "render das fertig", "mach das final", "renderte das Video", "mach den Endexport", "bau das Video zusammen", "mach es fertig für YouTube", "gib mir die MP4", "export the final", "render the final cut", "make the master", "export for TikTok", "give me the mp4". Abrange renderização de segmentos com cache, concatenação protegida, áudio em uma passagem, normalização de loudness e multiplexação única.

O que é vedit?

O skill `vedit` é uma ferramenta de exportação final para pipelines de edição de vídeo baseadas em segmentos, como as usadas no Claude Code, Cursor ou Codex. Ele automatiza a montagem do arquivo de vídeo final a partir de um projeto, garantindo qualidade e eficiência. O skill divide o processo em etapas: pré-verificação (QC), renderização de segmentos de vídeo com cache (evita re-renderizar segmentos inalterados), concatenação protegida (com validação de compatibilidade para evitar corrupção), processamento de áudio em uma passagem com normalização de loudness em duas passagens, e multiplexação única (mux) para gerar o arquivo final MP4 ou MKV. Suporta plataformas como YouTube, TikTok e outras, ajustando alvos de loudness, resolução e área segura de legendas. Seu design evita erros comuns, como gráficos de filtro na linha de comando (que podem causar falhas no Windows) e usa cache de segmentos para tornar exportações subsequentes quase instantâneas.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/businessbaum/vedit/tree/HEAD/.agents/skills/export-final

Perguntar na sua IA favorita

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

Documentação

export-final

Monta o arquivo final. Argumentos: slug $project, $platform substitui output.platform se o usuário quiser uma segunda entrega. Requisição completa em $ARGUMENTS. Um placeholder vazio $ significa que o skill foi acionado automaticamente em vez de ser invocado por barra: pegue o projeto de PIPELINE_STATE no contexto da sessão e informe qual foi selecionado. Os nomes dos verbos seguem o contrato de build; python engine/ve.py --help vence.

A arquitetura de renderização, que está definida

  • Vídeo: um MP4/MKV por segmento, em cache, com parâmetros de codificação idênticos, cada um começando em um quadro IDR, depois unidos com -f concat -safe 0 -c copy. Verificado sem perdas e quase instantâneo.
  • Áudio: uma passagem contínua sobre toda a linha do tempo em pcm_s24le. Nunca armazenado em cache por segmento.
  • Multiplexa uma vez, codificando AAC exatamente uma vez.

Não redesenhe isso no momento da exportação. Em particular, não "simplifique" em um único filter_complex sobre todos os segmentos: um gráfico de 150 segmentos tem cerca de 19 mil caracteres e cerca de 260 segmentos estouram a linha de comando do Windows, produzindo um processo que não pode ser iniciado em vez de um erro útil. Também descarta o cache por segmento, que é a razão pela qual uma segunda exportação leva segundos.

Gráficos de filtro sempre vão para um arquivo e são passados como -/filter_complex fc.txt. Incondicionalmente, não apenas quando ficam longos.

Etapa 1 - pré-verificação

Antes de codificar qualquer coisa:

  1. Execute qc-pass. Uma exportação em um projeto que falha no QC desperdiça a operação mais longa do pipeline.
  2. Confirme output.platform. Isso define o alvo de loudness, a resolução e a área segura de legendas. Se $platform diferir de output.platform, não mude o projeto silenciosamente - renderize um segundo caminho de saída e informe qual é qual.
  3. Reporte o plano: número de segmentos, total de quadros esperado, duração esperada, codec, e se legendas e gráficos estão sendo queimados nesta passagem.

Etapa 2 - renderizar segmentos

python engine/ve.py render $project

Armazenado em cache por segmento em .cache/seg/, chaveado pela chave forte da fonte, quadros in/out, filtros, codec e versões das ferramentas. Apenas segmentos alterados são re-renderizados. --only seg_0012 renderiza um para inspeção.

Padrões do codificador: h264_nvenc, cq 20, preset p6. NVENC nesta placa Ada está em paridade aproximada de VMAF com libx264 - atrás por 0,19 VMAF a 2 Mbps, à frente por 0,06 a 8 Mbps - enquanto executa 2 a 4 vezes mais rápido. É o padrão certo para prévias e defensável para finais. Mude para libx264 apenas se o usuário pedir máxima qualidade por bit e estiver disposto a esperar.

Ambos os codificadores foram reproduzíveis byte a byte, execução após execução, nesta máquina, o que torna o armazenamento em cache de segmentos baseado em conteúdo seguro.

Etapa 3 - concatenar, mas proteger primeiro

concat_compatible() é executado antes de toda concatenação com -c copy, sem exceção. Em uma disparidade de parâmetros, o demuxer concat entrega um arquivo corrompido com exit 0 - sem aviso, sem erro, um arquivo que roda por dez segundos e depois desmorona. A verificação de QC (c) é esta verificação.

Ela compara resolução, formato de pixel, codec, perfil, nível, base de tempo, taxa de amostragem e layout de canal em todos os segmentos. Uma disparidade significa que um segmento foi renderizado com parâmetros diferentes - geralmente uma entrada de cache obsoleta de antes de uma configuração do codificador ser alterada. Re-renderize os infratores em vez de forçar a concatenação.

Etapa 4 - áudio e loudness

python engine/ve.py render $project

Em seguida, loudnorm em duas passagens para o alvo da plataforma a partir de output.loudnorm (YouTube: I -14, TP -1.5, LRA 11; outras plataformas diferem e estão em presets/formats/).

A passagem 2 deve carregar um -ar 48000 explícito. Sem ele, a saída é silenciosamente 192 kHz - a taxa interna do loudnorm vaza para a saída, o arquivo é quatro vezes maior que o esperado, e alguns players o reamostram mal. Esta é a flag mais esquecida em toda a cadeia.

Duas passagens, não uma passagem única: loudnorm de passagem única é uma estimativa dinâmica e erra o alvo por um decibel ou mais em material com abertura silenciosa, o que é todo vídeo de cabeça falante com fundo.

Etapa 5 - multiplexar uma vez

As etapas 2 a 5 são todas ve render $project: ele renderiza ou reutiliza os segmentos em cache, concatena, renderiza o áudio em uma passagem, aplica loudnorm e multiplexa AAC 320k exatamente uma vez em projects/$project/out/final.mp4 de acordo com output.path.

Não recodifique o vídeo na multiplexação. Se algo precisar mudar na imagem, isso muda no nível do segmento e o cache cuida do resto.

Após a multiplexação, ve render compõe as sobreposições renderizadas e então queima o ASS se captions.burn_in - nessa ordem, para que as legendas fiquem acima dos gráficos. Ambas recodificam o master, e é por isso que ve gfx e ve captions são coisas que você executa antes de ve render, não depois. Executá-las depois deixa o master uma versão atrasada e nada avisa.

ve export é uma etapa separada, posterior: executa QC completo, recusa em caso de falha a menos que você passe --force, então carimba uma cópia de entrega datada e escreve um .manifest.json ao lado dela.

Etapa 6 - verificar a entrega, então entregar

Execute as verificações obrigatórias no arquivo de saída real, não no plano:

  • A contagem de quadros é igual à soma de (out_frame - in_frame) sobre segmentos habilitados. QC (a).
  • A contagem de amostras de áudio é igual a frames / fps * 48000. QC (b).
  • Loudness integrada ebur128 dentro de 0,5 LU do alvo da plataforma, pico verdadeiro abaixo do limite. QC (f).
  • Contêiner, resolução, taxa de quadros e duração correspondem a output.
  • Verifique três quadros: primeiro, um limite de segmento no meio, último. Um quadro preto em um limite significa que um segmento foi renderizado curto.

Em seguida, reporte: caminho de saída, tamanho do arquivo, duração, LUFS medido e pico verdadeiro, contagem de quadros, contagem de segmentos e quantos segmentos vieram do cache. Defina stage como "export".

Segundas entregas

Um corte vertical não é um recorte do arquivo final. É um output.platform diferente, o que significa um alvo de loudness diferente, um preset de legenda diferente e uma área segura diferente, e geralmente uma passagem de história diferente. Diga isso em vez de redimensionar o master 16:9.

Modos de falha

SintomaCausaCorreção
A saída roda e depois quebra, ffmpeg saiu com 0Disparidade de parâmetros na concatenaçãoconcat_compatible() antes de toda concatenação; re-renderize infratores
Master está a 192 kHzPassagem 2 do loudnorm sem -ar 48000Adicione e reexecute a passagem 2
Processo de codificação falha ao iniciarGráfico de filtro na linha de comandoSempre escreva fc.txt e passe -/filter_complex
Loudness um decibel fora do alvoloudnorm de passagem únicaDuas passagens
Exportação é mais lenta a cada vezCache invalidado por uma configuração de codificador alteradaEsperado; confirme que a mudança de configuração foi intencional
Quadro preto em um corteSegmento renderizado curtoRe-renderize aquele segmento; verifique QC (a)
Voz mais baixa no final do que na préviaamix sem normalize=0Corrija no gráfico de áudio, re-renderize o áudio

Individual skills in this repo

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

businessbaum/vedit

This skill should be used when the user asks for subtitles or on-screen text of what is being said - "brenn die Untertitel ein", "mach Untertitel", "Untertitel drauf", "leg Untertitel drüber", "brenn die Subs ein", "mach die Captions", "Wort für Wort Untertitel", "Karaoke-Untertitel", "korrigier den Untertitel-Text", "burn in the captions", "add subtitles", "burn the subs", "word-by-word captions", "fix a caption typo". Covers ASS generation, the pixel-width grouping rule for German, the font table, and burn-in through libass.

businessbaum/vedit

This skill should be used when the user asks for mechanical tightening of material that is already selected - "mach den Rohschnitt", "bau den Rohschnitt", "schneid die Ähms raus", "nimm die Füllwörter raus", "entferne die Pausen", "kürz die Pausen", "schneid die Versprecher raus", "mach den Radioschnitt", "straff das", "build the rough cut", "cut the fillers", "remove the ums", "tighten the pauses", "trim the dead air", "cut the retakes", "radio edit". Turns kept story blocks into enabled segments in project.json. Does not decide what the video is about - that is cut-story.

businessbaum/vedit

This skill should be used when the user asks to decide what the video is actually about before any mechanical cutting - "bau die Story", "was soll ins Video", "was kann raus", "welche Themen bleiben", "kürz das auf 6 Minuten", "mach daraus ein kurzes Video", "wo ist der Hook", "sortier die Themen", "worum geht es hier eigentlich", "build the story", "decide what stays", "structure this", "cut this down to N minutes", "find the hook", "reorder the topics". This is the CONTENT-selection pass that writes the "story" block in project.json; it runs after transcribe and before cut-rough.

Habilidades Relacionadas