Communitygithub.com

Kein-chronicle/ffmpeg-video-qa-gates

머신 검증 방식으로 렌더링된 비디오(쇼츠, 장편, 소셜 클립)를 눈으로 확인하는 대신 ffmpeg으로 점검합니다. 정지/스틸 구간, 무음, 음량 및 트루 피크, 재생 시간/크기/오디오 존재 여부, 자막 형식 및 읽기 속도, '평면적 오프닝' 시각 밀도 측정을 수행합니다. AI/자동화 파이프라인으로 비디오를 제작할 때, 객관적인 퍼블리시 게이트가 필요할 때, 또는 리뷰를 통과했지만 슬라이드쇼처럼 느껴지는 비디오가 있을 때 사용하세요. 종료 코드 3 = 측정 불가로, 통과를 의미하지 않습니다.

ffmpeg-video-qa-gates란 무엇인가요?

이 스킬은 비디오 제작 파이프라인에서 사람의 주관적인 판단을 배제하고, ffmpeg 기반의 정량적 측정을 통해 비디오의 품질 게이트를 자동화합니다. 개발자는 `qa_video.py`, `opening_density.py`, `subtitle_lint.py` 세 가지 스크립트를 사용하여 비디오 파일의 정지 구간 길이, 무음(데드 에어), 통합 음량(Integrated Loudness), 트루 피크(True Peak), 오프닝 시각적 밀도, 자막 형식 및 읽기 속도 등을 측정할 수 있습니다. 특히 10fps로 다운스케일된 복사본을 분석하여 미세한 배경 움직임이 실제 정지를 숨기는 문제를 해결하며, 종료 코드 3은 측정 불가 상태를 명확히 구분합니다. 이 스킬은 Claude Code, Cursor 등 명령줄 기반 AI 에이전트에서 바로 사용할 수 있으며, `cold-read-comprehension-review`, `llm-adaptation-fidelity-check` 같은 다른 품질 게이트와 함께 사용하여 종합적인 비디오 품질 보증 체인을 구성할 수 있습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add Kein-chronicle/ffmpeg-video-qa-gates

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

video-qa-gates

측정으로 판단하세요. 비디오를 보고 "괜찮아 보인다"고 말하는 것은 4초짜리 프리즈가 그대로 배송되는 길입니다.

스크립트측정 항목실패 조건
scripts/qa_video.py오디오 스트림 존재 여부; 크기; 재생 시간 (+-허용치 또는 최대); 가장 긴 거의 정지 구간 (10fps 복사본 기준, 느린 배경 드리프트가 정지를 숨기지 않도록 함); 무음 (-50dB, >=0.3초); 통합 음량 (기본 -14 LUFS +-1.5); 트루 피크 (<= -1dBFS)제한 초과 시
scripts/opening_density.py처음 몇 초 동안 '평평한' 8x8 그리드 셀(밝기 표준편차 < 5)의 비율, 중앙값 및 최대값오프닝이 대부분 빈 배경; 사용 가능한 프레임이 N개 미만 (= 측정 불가)
scripts/subtitle_lint.py큐당 줄 수, 줄당 문자 수, 최소 표시 시간, 초당 문자 수, 겹침위반 시; 파싱된 큐가 0개 = 측정 불가
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개 미만의 사용 가능한 프레임은 절대 통과로 표시되어서는 안 됩니다.
  • 프리즈 감지를 위해 10fps 다운스케일 복사본을 측정합니다. 회전하는 광선이나 배경의 글로우는 전체 정밀도에서 정지된 장면을 '살아 있는' 것처럼 보이게 만듭니다. 저렴한 복사본은 그 노이즈를 제거합니다. 제한은 --max-freeze (기본 4초)입니다. 클립 끝까지 이어지는 프리즈도 포함됩니다.
  • 플래시/블랙아웃 프레임은 밀도 측정에서 건너뜁니다. (평균 휘도 <8 또는 >247): 이는 장면에 대해 아무것도 말해주지 않습니다.
  • 자신의 좋은 예와 나쁜 예로부터 임계값을 교정하고 기록하세요. 좋다고 생각하는 몇 개의 오프닝과 평평하다고 생각하는 몇 개의 오프닝을 측정하고 그 사이에 제한을 설정하세요. 기본값은 출발점일 뿐입니다. 여러분의 숫자는 다를 것입니다.
  • 테스트 입력이 잘못될 수 있습니다. 게이트가 아닙니다. testsrc2 패턴은 큰 색상 블록이며 "비어 있음"으로 측정됩니다. 노이즈 비디오는 정직한 대조군이었습니다. 게이트와 테스트 입력이 일치하지 않을 때, 무엇이 잘못되었는지 찾아내세요.
  • 이는 "진짜 쇼츠처럼 느껴진다"의 대리 지표입니다. 통과한다고 해서 재미있거나 매력적이라는 보장은 없습니다. 사람의 불만 ("슬라이드 덱처럼 보여요", "자막이 화면 텍스트를 중복해요")은 새로운 측정 가능한 게이트가 되어야 합니다.

함께 사용하기 좋은 도구

추가할 만한 게이트 (여기서는 구현되지 않음)

화면 감사 (모든 화면 텍스트 상자: 겹침, 플랫폼 UI 안전 영역, 자막 밴드 침범); 화면 문자열 허용 목록 (위조 방지); 프레임 너비 대비 텍스트 크기 하한; 컷 리듬 (평균/최대 컷 길이); STT를 통한 자막-음성 문자 오류율 (<= 0.08); 렌더링된 DOM에서 이모지 금지; 자막/화면 텍스트 중복 비율. 이들은 렌더러의 DOM/타임라인이 필요하므로 일반화될 수 없습니다.

런타임 종속성: pip install -r requirements.txt로 requirements.txt를 설치하세요. Pillow는 최소 12.3.0 이상이어야 합니다. 위에 언급된 선택적 모델 종속성은 별도로 설치해야 합니다.

관련 스킬