Communitygithub.com

Kein-chronicle/ffmpeg-video-qa-gates

機械的にレンダリングされた動画(ショート、長尺、SNSクリップ)をffmpegで品質チェック。目視確認ではなく、フリーズ/静止画、無音、ラウドネス、トゥルーピーク、字幕フォーマットと読み速度、オープニングの視覚的密度などを測定します。AI/自動化パイプラインでの動画制作時や、客観的な公開基準が必要な場合、「レビューは通ったがスライドショーのように感じる」動画を弾くのに最適です。終了コード3は「測定不能」を意味し、合格にはなりません。

ffmpeg-video-qa-gates とは?

このスキルは、ffmpegをベースにした動画品質ゲート(検査)を提供します。自動生成された動画が、ショート動画、長尺動画、SNSクリップとして公開可能な品質基準を満たしているかを、人間の主観ではなく数値で客観的に判定します。主な測定項目は、動画内のフリーズ/静止状態の最長継続時間、無音区間、ラウドネス(統合ラウドネスとトゥルーピーク)、動画サイズ・長さ、字幕の1行あたりの文字数や表示速度です。特に、オープニングの「平坦さ」を視覚的な密度として測定する点が特徴で、従来の目視検査では見逃されがちなスライドショー的な動画を検出します。各検査スクリプトは終了コードで結果を返し、検査不能(動画ファイルが読めない、ffmpegがないなど)な場合は常に終了コード3となり、決して合格にはなりません。これにより、AIや自動化パイプラインに組み込んで、人間のチェック前に客観的なフィルターとして機能させることができます。

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

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

video-qa-gates

測定で判断する。「問題なさそう」と目視で言うことが、4秒のフリーズを見逃す原因です。

スクリプト測定内容失敗条件
scripts/qa_video.pyオーディオストリームの有無、サイズ、長さ(±許容値または最大値)、最長のほぼ静止状態(10 fpsにダウンスケールしたコピーで測定。背景のゆっくりした動きで静止が隠れないようにする)、無音(-50 dB、0.3秒以上)、統合ラウドネス(デフォルト -14 LUFS ±1.5)、トゥルーピーク(<= -1 dBFS)いずれかの制限を超過
scripts/opening_density.py先頭数秒間の「平坦な」8x8グリッドセルの割合(輝度の標準偏差 < 5)、中央値と最大値オープニングがほとんど空の背景で構成されている、使用可能なフレームがN未満(= 未測定)
scripts/subtitle_lint.pyキューあたりの行数、1行あたりの文字数、最小表示時間、1秒あたりの文字数、重なりいずれかの違反、ゼロキューのパース(= 未測定)
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          # ffmpegで合成クリップを作成し、すべての欠陥が正しい理由で検出されることを確認

設計ノート(なぜこのように構築されているか)

  • 終了コード3は「測定不能」を意味します。 ffmpegの欠如、読み取れないファイル、またはN未満の使用可能フレームは、決して合格にしてはいけません。
  • フリーズ検出には10 fpsにダウンスケールしたコピーを使用します。 回転する光線や背景のグローは、フリーズしたシーンをフル解像度では「生きている」ように見せます。低品質コピーはそのノイズを取り除きます。制限は --max-freeze(デフォルト 4 秒)です。クリップの最後まで続くフリーズもカウントします。
  • フラッシュ/ブラックアウトフレーム(平均輝度 <8 または >247)は密度計算でスキップされます。これらはシーンについて何も語りません。
  • 自分自身の良い例と悪い例から閾値を校正し、記録してください。 適切と考えるオープニングといくつか平坦なオープニングを測定し、その間に制限値を設定します。デフォルト値は出発点であり、あなたの数値は異なります。
  • テスト入力が間違っている可能性があり、ゲート自体が間違っているわけではありません。 testsrc2パターンは大きな色のブロックであり、「空」と測定されます。ノイズ動画は正直なコントロールです。ゲートとテスト入力が一致しない場合、どちらが間違っているかを見つけてください。
  • これらは**「本当のショート動画のように感じる」ためのプロキシ**です。合格しても楽しいとか魅力的であることを保証するものではありません。人間の苦情(「スライドデッキのように見える」「字幕が画面上のテキストを複製している」)は、新しい測定可能なゲートにすべきです。

組み合わせて使うと良いもの

追加すると良いゲート(未実装)

画面監査(すべての画面上テキストボックス:重なり、プラットフォームUIのセーフエリア、字幕帯の侵入);画面上文字列の許可リスト(偽造防止);テキストサイズの下限(フレーム幅に対する%);カットのリズム(平均/最大カット長);STTによる字幕と音声の文字誤り率(<= 0.08);レンダリングされたDOM内の絵文字禁止;字幕/画面上テキストの重複率。これらにはレンダラーのDOM/タイムラインが必要なため、汎用化できません。

ランタイム依存関係:python3 -m pip install -r requirements.txt で requirements.txt をインストールしてください。Pillowは少なくとも12.3.0が必要です。オプションのモデル依存関係は上記とは別です。

関連スキル