Edita, converte e inspeciona audio e video com FFmpeg. Trigger em: "segundos desse video", "cortar esse video", "juntar clipes", "clipes num video so", "queimar essa legenda", "legenda .srt no video", "normaliza esse audio", "-14 LUFS", "loudness", "remove os trechos de silencio", "detecta silencio", "muda esse video de 16:9 pra 9:16", "aspect ratio sem esticar", "borra o rosto", "borrar rosto no video", "sincroniza esse audio", "audio separado com o video", "extrai os metadados desse", "metadados desse arquivo de video", "exporta esse video no formato", "formato certo pro TikTok", "ffmpeg", "editar video local sem re-encodar".
89%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Esta skill executa uma edição, não decide uma. Corta, junta, mede, sincroniza, exporta e verifica arquivos de mídia — decisões estéticas (o que é "interessante" num highlight, se uma grade parece "cinematográfica", composição de thumbnail) ficam fora de escopo e voltam pro humano ou pra skill de criação correspondente.
Esta skill segue GLOBAL.md, policies/execution.md, policies/tool-safety.md, policies/verification-before-completion.md, policies/self-correcting-sensors.md e policies/anti-rationalization.md.
Fronteira mecânico vs. subjetivo — o princípio central desta skill: aplicar uma LUT nomeada, cortar em coordenadas exatas, medir loudness em LUFS são operações mecânicas, dentro de escopo. Decidir "essa cor combina com a marca", "esse trecho é o melhor momento do vídeo" ou "isso parece profissional" são julgamentos que pedem contexto humano — a skill relata a medição (waveform, LUFS, duração de cena) e devolve a decisão para quem pediu, nunca decide sozinha e apresenta como fato.
.srt) ou overlay de texto/gráfico num vídeoreferences/vocabulario-cinematografico.md dela--json com o resultado da operação: comando ffmpeg executado, streams afetados, métricas medidas (duração, LUFS, resolução)--dry-run disponível em toda operação que escreve arquivo: mostra o plano sem executarverify) quando a entrega precisa confirmar integridade antes de considerar prontaTabela de intenção → script → flags principais. Adaptar o comando à necessidade real, não copiar cegamente.
| Intenção do usuário | Script | Flags principais |
|---|---|---|
| "quanto dura esse vídeo / que formato é" | probe.py | (nenhuma — só leitura) |
| "corta de X a Y" / "extrai esse trecho" | cut.py | --start, --end, --segments |
| "junta esses clipes" | join.py | lista de arquivos, ordem |
| "detecta onde tem silêncio" / "remove silêncio" | silence.py | limiar de dB, duração mínima |
| "detecta corte de cena" | scenes.py | limiar de diferença de frame |
| "muda pra formato 9:16 / 1:1 / 16:9" | fit.py | --aspect, --fit pad|crop|blur |
| "queima legenda desse .srt" | caption.py | --srt, --text, --animate |
| "põe esse logo/texto por cima" | overlay.py / graphics.py | posição, opacidade, timing |
| "aplica essa LUT / corrige HDR pra SDR" | color.py / look.py | --lut, perfil de cor |
| "borra esse rosto / essa placa" | redact.py | região (coordenadas ou tracking) |
| "normaliza o áudio pra -14 LUFS" | loudness.py | -I <LUFS>, --tp <true peak> |
| "sincroniza esse áudio com o vídeo" | sync.py | offset ou detecção automática |
| "sincroniza essas câmeras" | multicam.py | --switch energy|manual |
| "exporta pro formato do Reels/TikTok/podcast" | export.py / render.py | --template, --preset |
| "verifica se esse arquivo tá íntegro" | verify.py / check.py | (nenhuma — só leitura) |
| "gera uma versão leve pra revisar rápido" | proxy.py | resolução alvo |
| "extrai só o áudio" | audio.py | formato de saída |
| "acelera/desacelera o vídeo" | speedramp.py | fator de velocidade, curva |
| "congela um frame" | freeze.py | timestamp, duração |
| "endireita o horizonte" | straighten.py | ângulo ou detecção automática |
| "estabiliza a câmera tremida" | stabilize.py | (parâmetros de suavização) |
| "roda em lote pra vários arquivos" | batch.py | script alvo + lista de arquivos |
Para 3+ operações encadeadas, preferir um arquivo de projeto consumido por render.py a encadear scripts manualmente — reduz reencode intermediário e erro de ordem.
Catálogo completo dos 42 scripts (incluindo os não cobertos pela tabela acima — denoise.py, stabilize.py, deinterlace.py, grid.py, broll.py, entre outros) em references/catalogo-scripts.md.
Quando a operação envolve múltiplos passos, a ordem importa e não é arbitrária:
color/look (HDR→SDR, LUT) → cut → join → silence → fit → caption/overlay → sync → audio → loudness → exportRazão prática: mudanças de frame (color, cut, fit) precisam acontecer antes de legenda/overlay, porque texto posicionado antes de um crop/pad fica com tamanho ou posição errados depois. Sincronização de áudio acontece depois de qualquer corte que altere a duração do vídeo. Loudness é o penúltimo passo, export roda por último.
Antes de qualquer operação que reescreve o arquivo, checar se o resultado pode ser obtido sem reencode:
cut.py faz isso por padrão; usar --accurate só quando o corte precisa ser frame-exato e cair fora de um keyframe)loudness.py faz stream-copy do vídeo por padrão, normalizando só o áudioReencodar sem necessidade é o erro mais caro desta skill — cada reencode desnecessário degrada qualidade e multiplica tempo de processamento. Quando o reencode for inevitável (ex.: mudança de resolução, aplicação de LUT), usar CRF 18 em passos intermediários; o export.py final aplica o preset de entrega.
--json, não a linha de resumoToda ferramenta de escrita aceita --dry-run (mostra o plano sem executar) e --json/--json-brief (saída estruturada com comando ffmpeg executado, streams afetados, métricas). Confiar no --json, nunca num número resumido em texto solto — se a operação precisa reportar duração, LUFS medido, ou resolução final, ler o campo estruturado, não parafrasear de memória.
python scripts/loudness.py video.mp4 -I -14 --tp -1 --json
# → {"status": "ok", "measured_lufs_before": -22.3, "measured_lufs_after": -14.0, "command": "ffmpeg -i ..."}Depois de qualquer cadeia de operações, rodar verify.py/check.py no arquivo final antes de considerar a tarefa concluída — confirma que o container não está corrompido, que os streams de áudio e vídeo existem e têm duração compatível, e que o arquivo abre. Isso é o gate de policies/verification-before-completion.md aplicado a mídia: "rodei o comando" não é "confirmei que o resultado está correto".
| Plataforma | Loudness alvo | Aspect ratio comum | Nota |
|---|---|---|---|
| Instagram/TikTok Reels | -14 LUFS | 9:16 | true peak -1 dBTP |
| YouTube (geral) | -14 LUFS | 16:9 | aceita HDR |
| Podcast (voz) | -16 LUFS | — (áudio) | mono ou stereo conforme distro |
| Broadcast (referência EBU R128) | -23 LUFS | 16:9 | usar quando o destino for TV/streaming formal |
Confirmar o alvo do preset com o usuário quando a plataforma de destino não foi dita — não assumir Reels como padrão universal.
ffmpeg cru repete trabalho que o script já resolve e tem mais chance de erro de sintaxe.probe.py/verify.py antes de qualquer edição em arquivo desconhecido — confirmar codec, resolução, framerate e integridade antes de assumir que a operação vai funcionar como esperado.batch.py) só depois de validar em 1 arquivo — rodar a operação em lote sem confirmar o resultado no primeiro arquivo multiplica o erro por N arquivos.--json está disponível para medir de verdadebatch.py em N arquivos sem ter confirmado o resultado em 1 primeiroverify.py/check.py de fato--json da operação confirma as métricas relevantes (duração, LUFS, resolução) batendo com o pedidoverify.py/check.py rodado no arquivo final sem erroSeguir policies/handoffs.md.
Skill adaptada de kajisho5/ffmpeg-skill (MIT) — os 42 scripts Python (stdlib + subprocess sobre ffmpeg/ffprobe), a tabela de intenção→script→flags, a ordem de encadeamento prescrita, a estratégia lossless-first, e a fronteira mecânico-vs-subjetivo foram traduzidos e adaptados ao formato deste kit. O mecanismo real de schema para agentes de planejamento no upstream é o comando contract --json (fonte de verdade junto com doctor --json) — não usar outro nome para ele.
felvieira/claude-skills-fv
449fb53
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.