Communitygithub.com

Kein-chronicle/ffmpeg-video-qa-gates

Verifica automaticamente vídeos renderizados (shorts, longas, clipes sociais) com ffmpeg em vez de inspeção visual - detecta trechos congelados, silêncio, loudness e pico verdadeiro, duração/tamanho/presença de áudio, formato de legenda e velocidade de leitura, e uma medida de densidade visual de "abertura plana". Use ao produzir vídeos com um pipeline automatizado de IA, quando precisar de portões de publicação objetivos, ou quando um vídeo "passa" na revisão mas parece um slideshow. Código de saída 3 = não foi possível medir, nunca é aprovação.

O que é ffmpeg-video-qa-gates?

Esta skill implementa um conjunto de ferramentas de análise de vídeo baseadas em ffmpeg para verificar objetivamente a qualidade de vídeos renderizados em pipelines de IA ou automatizados. Ela substitui a inspeção visual por medições precisas, detectando problemas como trechos congelados, silêncio prolongado, loudness inadequado, pico verdadeiro, violações de formato de legenda e abertura visualmente plana (slideshow). A skill é composta por três scripts principais: `qa_video.py` (verifica presença de áudio, tamanho, duração, congelamentos, silêncio, loudness integrado e pico verdadeiro), `opening_density.py` (mede a densidade visual dos primeiros segundos para detectar aberturas vazias) e `subtitle_lint.py` (valida formatação e legibilidade das legendas). Suporta qualquer plataforma que possa executar Python e ffmpeg, como Claude Code, Cursor ou Codex, e é ideal para fluxos de produção de vídeo onde a qualidade deve ser garantida por métricas, não por opinião. O design prioriza a confiabilidade: código de saída 3 indica falha de medição (nunca aprovação), e há considerações cuidadosas para evitar falsos positivos, como medir congelamentos em uma cópia com 10 fps para ignorar ruído de fundo.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add Kein-chronicle/ffmpeg-video-qa-gates

Perguntar na sua IA favorita

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

Documentação

video-qa-gates

Julgue por medição. Olhar para um vídeo e dizer "parece bem" é como 4 segundos de congelamento passam despercebidos.

ScriptMedeFalha quando
scripts/qa_video.pyfluxo de áudio presente; tamanho; duração (+-tol ou máxima); maior trecho quase parado (em cópia de 10 fps para que desvio de fundo lento não esconda uma parada); silêncio (-50 dB, >=0,3 s); loudness integrado (padrão -14 LUFS +-1,5); pico verdadeiro (<= -1 dBFS)qualquer limite excedido
scripts/opening_density.pyfração de células 8x8 "planas" (desvio padrão de brilho < 5) nos primeiros segundos, mediana e máximoabertura é principalmente fundo vazio; menos de N quadros utilizáveis (= não medido)
scripts/subtitle_lint.pylinhas por legenda, caracteres por linha, tempo mínimo de exibição, caracteres/segundo, sobreposiçõesqualquer violação; zero legendas analisadas = não medido
python3 scripts/qa_video.py out.mp4 --expect-size 1080x1920 --max-duration 30
python3 scripts/opening_density.py out.mp4 --seconds 3
python3 scripts/subtitle_lint.py out.vtt --max-chars 20
bash tests/run.sh          # constrói clipes sintéticos com ffmpeg e verifica se cada defeito é detectado pelo motivo correto

Notas de design (por que é construído dessa forma)

  • Saída 3 é "não foi possível medir". Falta do ffmpeg, arquivo ilegível ou <N quadros utilizáveis não devem virar verde.
  • Meça uma cópia reduzida a 10 fps para congelamentos. Raios de luz girando ou brilho no fundo podem fazer uma cena congelada parecer "viva" em precisão total; a cópia barata elimina esse ruído. O limite é --max-freeze (padrão 4 s); um congelamento que vai até o fim do clipe também conta.
  • Quadros de flash/preto são ignorados na densidade (luminância média <8 ou >247): eles não dizem nada sobre a cena.
  • Calibre os limites com seus próprios exemplos bons e ruins, e registre-os. Meça algumas aberturas que você considera boas e algumas que considera planas, e defina os limites entre elas. Os padrões são pontos de partida; seus números serão diferentes.
  • A entrada de teste pode estar errada, não o portão. Um padrão testsrc2 são grandes blocos de cor e é medido como "vazio"; um vídeo de ruído foi o controle honesto. Quando um portão e sua entrada de teste discordam, descubra qual está errado.
  • Estes são proxies para "parece um short real". Passar não garante que seja divertido ou atraente; a reclamação de um humano ("parece um slide deck", "a legenda duplica o texto na tela") deve se tornar um novo portão mensurável.

Combine com

Portões extras que valem a pena adicionar (não implementados aqui)

Auditoria de tela (todas as caixas de texto na tela: sobreposições, áreas seguras da interface da plataforma, intrusão da banda de legenda); lista de permissão de strings na tela (antifalsificação); piso de tamanho de texto como % da largura do quadro; ritmo de corte (comprimento médio/máximo de corte); taxa de erro de caracteres legenda-vs-fala via STT (< = 0,08); proibição de emoji no DOM renderizado; taxa de duplicação legenda/texto na tela. Estes precisam do DOM/linha do tempo do seu renderizador, então não podem ser genéricos.

Dependência de execução: instale requirements.txt com python3 -m pip install -r requirements.txt. Pillow deve ser pelo menos 12.3.0; dependências opcionais de modelo listadas acima são separadas.

Habilidades Relacionadas