Communitygithub.com

Kein-chronicle/ffmpeg-video-qa-gates

Vérification automatique des vidéos (courtes, longues, extraits sociaux) avec ffmpeg : plans figés, silences, volume, durée, sous-titres, et densité visuelle. Idéal pour les pipelines IA automatisés ou lorsqu'une vidéo « passe » la revue mais ressemble à un diaporama.

Qu'est-ce que ffmpeg-video-qa-gates ?

Cette compétence permet de juger automatiquement la qualité technique d'une vidéo produite (courte, longue ou extrait social) à l'aide de scripts Python utilisant ffmpeg. Elle remplace une inspection visuelle subjective par des mesures objectives : présence d'une piste audio, durée, taille d'image, détection de plans figés (même avec des fonds animés), silence audio prolongé, loudness intégré (LUFS) et true peak, conformité des sous-titres (format, vitesse de lecture, chevauchements), et une mesure de densité visuelle pour détecter les ouvertures « plates ». Chaque script retourne un code de sortie 0 (succès) ou 3 (impossible à mesurer) – jamais un faux positif. Les seuils sont configurables et doivent être calibrés sur vos propres exemples. La compétence est conçue pour être intégrée dans des pipelines CI ou des workflows d'édition automatisée, et peut être associée à d'autres vérifications de compréhension et de fidélité.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

video-qa-gates

Jugez par les mesures. Regarder une vidéo et dire « ça a l'air correct », c'est ainsi que des blocages de 4 secondes passent en production.

ScriptMesuresÉchoue quand
scripts/qa_video.pyprésence d'une piste audio ; taille ; durée (+-tolérance ou maximum) ; plus longue séquence quasi-statique (sur une copie à 10 ips pour que les fonds animés lents ne cachent pas un blocage) ; silence audio (-50 dB, >= 0,3 s) ; loudness intégré (-14 LUFS +-1,5 par défaut) ; true peak (<= -1 dBFS)toute limite dépassée
scripts/opening_density.pyfraction de cellules 8x8 « plates » (écart-type de luminance < 5) dans les premières secondes, médiane et maximuml'ouverture est principalement un fond vide ; moins de N images exploitables (= non mesuré)
scripts/subtitle_lint.pylignes par sous-titre, caractères par ligne, durée d'affichage minimale, caractères/seconde, chevauchementstoute violation ; zéro sous-titre analysé = non mesuré
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          # génère des clips synthétiques avec ffmpeg et vérifie que chaque défaut est détecté pour la bonne raison

Notes de conception (pourquoi la construction est ainsi)

  • Le code de sortie 3 signifie « impossible à mesurer ». L'absence de ffmpeg, un fichier illisible ou moins de N images exploitables ne doit jamais donner un résultat positif.
  • Mesurez une copie réduite à 10 ips pour les blocages. Des rayons lumineux tournants ou une lueur en arrière-plan donnent l'impression qu'une scène figée est « vivante » en pleine précision ; la copie bon marché supprime ce bruit. La limite est --max-freeze (4 s par défaut) ; un blocage qui dure jusqu'à la fin du clip compte aussi.
  • Les images flash/noir sont ignorées dans la mesure de densité (luminance moyenne <8 ou >247) : elles n'apportent rien sur la scène.
  • Calibrez les seuils à partir de vos propres exemples bons et mauvais, et enregistrez-les. Mesurez quelques ouvertures que vous considérez bonnes et quelques-unes que vous considérez plates, puis placez les limites entre elles. Les valeurs par défaut sont des points de départ ; vos chiffres seront différents.
  • L'entrée de test peut être erronée, pas la mesure. Un motif testsrc2 est constitué de gros blocs de couleur et mesuré comme « vide » ; une vidéo de bruit était le contrôle honnête. Quand une mesure et son entrée de test ne sont pas d'accord, trouvez ce qui est erroné.
  • Ce sont des proxy pour « donne l'impression d'un vrai court métrage ». Réussir ne garantit pas que c'est amusant ou attrayant ; une plainte humaine (« ressemble à un diaporama », « le sous-titre duplique le texte à l'écran ») doit devenir une nouvelle mesure quantifiable.

Associez-le avec

Mesures supplémentaires à ajouter (non implémentées ici)

Audit d'écran (chaque boîte de texte à l'écran : chevauchements, zones de sécurité de l'interface plateforme, intrusion de la bande de sous-titres) ; liste blanche de chaînes à l'écran (anti-falsification) ; taille de police minimale en % de la largeur du cadre ; rythme de coupe (longueur moyenne/maximale des plans) ; taux d'erreur caractère sous-titre/parole via STT (<= 0,08) ; interdiction des émojis dans le DOM rendu ; ratio de duplication sous-titre/texte à l'écran. Celles-ci nécessitent le DOM/timeline de votre rendu, donc elles ne peuvent pas être génériques.

Dépendance runtime : installez requirements.txt avec python3 -m pip install -r requirements.txt. Pillow doit être au moins en version 12.3.0 ; les dépendances optionnelles liées aux modèles sont listées séparément ci-dessus.

Skills associés