나의 AI는 YouTube 영상을 만듭니다. 하지만 21가지 자동 검사를 통과해야만 게시할 수 있습니다.
요약
AI 에이전트가 운영하는 YouTube 채널의 자동화 프로세스에서 품질을 보장하기 위한 21가지 자동 검사(Gate) 시스템을 소개합니다. 모션 에너지 측정, 음성 인식 기반 무음 구간 탐지, WER 기반 TTS 검증 등 실무적인 문제 해결 사례를 다룹니다.
핵심 포인트
- 비트 단위 비교 대신 모션 에너지를 측정하여 정지 화면을 감지함
- 배경 음악에 가려진 무음 구간을 찾기 위해 음성 인식(STT) 활용
- TTS 품질 관리를 위해 스크립트와 전사본 간의 WER(단어 오류율) 검증
- 실패 사례를 바탕으로 검사 로직을 지속적으로 고도화하는 것이 핵심
저는 AI 에이전트가 모든 것을 수행하는 YouTube 채널을 운영하고 있습니다. 에이전트는 스스로 분석 데이터를 통해 주제를 선정하고, 스크립트를 작성하며, 애니메이션을 렌더링하고, 자신의 TTS (Text-to-Speech)를 디렉팅하며, 업로드 일정까지 예약합니다. 흥미로운 점은 생성 그 자체가 아닙니다. 바로 '게이트(Gate)'입니다.
품질 게이트(Quality gate)를 통과하지 못하면 아무것도 출시되지 않습니다. 처음에는 15개의 검사로 시작했지만, 현재는 21개로 늘어났으며 계속 증가하고 있습니다. 왜냐하면 모든 검사는 단 하나의 이유 때문에 존재하기 때문입니다: 실제로 무언가 망가졌거나, 출시되었거나, 우리를 당황하게 만들었던 일이 있었고, 우리는 그것을 다시는 보고 싶지 않기 때문입니다. 여기 제가 가장 많은 것을 배운 흔적(scars)들이 있습니다.
소리 없이 무용지물이었던 검사
게이트에는 첫날부터 "정지된 프레임 없음" 검사가 있었습니다. 연속된 프레임을 비교하여 비트 단위로 동일(bit-identical)하면 실패 처리하는 방식이었습니다. 하지만 이 검사는 단 한 번도 작동하지 않았습니다.
그 이유는 작동할 수 없었기 때문입니다. 배경의 노이즈(grain)와 글로우(glow) 효과가 매 프레임마다 최소 1픽셀씩 흔들리기 때문에, 그 어떤 것도 비트 단위로 동일할 수 없었습니다. 결과적으로 완전히 정지된 30초짜리 샷도 무사히 통과되었습니다. 우리는 인간 검토자가 이 검사가 불가능하게 만들었어야 했던 내용을 다음과 같이 메모로 남겼을 때 이를 발견했습니다: "배경이 정지되어 있으면 좋지 않으니, 항상 무언가 움직이도록 하세요."
새로 작성된 검사는 대신 **모션 에너지 (Motion energy)**를 측정합니다. 초당 두 번 샘플링된 중앙 크롭(center crop) 영역에서의 평균 절대 휘도 변화(mean absolute luma change)를 측정합니다. 10초 이상 0.05 미만이면 실패입니다. 교훈: 한 번도 실패한 적 없는 검사는 합격점이 아니라, 무언가 잘못되었다는 신호(smell)입니다.
음악이 숨기고 있던 간극
승인된 영상 하나가 두 문장 사이에 4.8초의 무음 정지 구간을 가진 채 출시되었습니다. 업계 표준 솔루션인 silencedetect는 아무것도 감지하지 못했는데, 배경 음악이 그 빈 공간을 채우고 있었기 때문입니다. 오디오 트랙은 결코 무음이 아니었지만, _내레이션(narration)_은 무음이었습니다.
해결책: 최종 마스터 파일에 대해 음성 인식(speech recognition)을 실행한 다음, 음악은 완전히 무시하고 전사된 음성 세그먼트(transcribed speech segments) 사이의 간격을 측정합니다. 제한 사항: 단일 간격이 4.0초를 초과해서는 안 됩니다 (우리가 의도적으로 설정한 섹션 카드 홀드는 최대 3.44초였으므로, 제한 수치는 의도적인 구간보다 약간 높게 설정했습니다). 바로 다음 에피소드가 4.72초의 간격으로 이 검사에 걸렸습니다. 이 영상은 인간 검토자에게 전달되기도 전에 차단되었습니다.
"AI"라고 말할 수 없는 AI에 관한 채널
우리의 TTS (Text-to-Speech) 엔진은 "AI"를 "the eye"에 가깝게 발음했습니다. 아무도 모든 테이크(take)를 다시 듣지 않기 때문에, 당황스러울 정도로 오랫동안 아무도 이를 알아차리지 못했습니다.
이제는 음성 인식 (speech-recognition) 단계를 거쳐 생성된 모든 테이크를 전사(transcribe)하고 이를 스크립트와 비교(diff)합니다. 단어 오류율 (WER, Word Error Rate)이 0.06을 초과하면 다시 생성합니다. 우리는 한 줄당 몇 개의 테이크를 렌더링하고, 가장 낮은 WER을 가진 것을 유지합니다. 이 검사 하나만으로 샘플링 방식으로는 절대 잡아낼 수 없는 오발음, 누락된 단어, 그리고 TTS 글리치 (glitch)를 조용히 해결합니다.
자신의 프레임을 채점하는 판사
결정론적 (deterministic) 검사들은 물리 법칙을 잡아냅니다. 취향은 판단이 필요하므로, 게이트 (gate)의 마지막 단계는 비전 모델 (vision model)이 10가지 항목의 체크리스트를 기준으로 샘플링된 프레임을 검토하는 것으로 끝납니다 (카드 내부의 텍스트가 휴대폰 크기에서도 읽을 수 있는지, 필수적인 요소가 모바일 UI 오버레이 아래에 가려지지 않았는지, 툴링 유출(tooling leaks)은 없는지 등). 여기에 절대 나타나서는 안 될 엄격한 콘텐츠 규칙도 포함됩니다.
프로덕션 환경에서 모델 판사 (model-judges)를 운영하며 얻은 두 가지 솔직한 발견은 다음과 같습니다:
- 비전 판사는 비결정론적 (nondeterministic)입니다. 동일한 영상이 한 번의 실행에서는 통과하고, 다음 실행에서는 다른 항목 때문에 실패할 수 있습니다. 우리는 이를 노이즈로 취급하는 것을 중단했습니다. 이번 주에 발생한 모든 "새로운" 실패는 관대한 실행 과정에서 통과되었던 실제 잠재적 결함(latent flaw)을 가리켰습니다.
- 판단 기준(judged bar)이 느낌(vibes)보다 낫습니다. 우리의 종료 규칙은 고정된 점수 임계값(threshold)을 넘는 두 개의 독립적인 모델과 깨끗한 사실 관계 통과(factual pass)를 결합한 것입니다. 또한 루프가 영원히 돌지 않도록 엄격한 반복 횟수 제한 (iteration cap)을 두고 있습니다.
왜 이렇게까지 하는가
게이트 없는 자율성은 리스크 생성기 (liability generator)이기 때문입니다. 게이트는 제가 잠든 동안 에이전트 (agent)가 자신의 업로드를 자동 승인할 수 있게 해주는 장치입니다. 결정론적 검사가 물리 법칙을 잡아내고, 모델 판사가 취향을 잡아내며, 게시/미게시 (ship/no-ship) 결정은 생성기 스스로의 자기 의견에 대해 전혀 신뢰할 필요가 없습니다.
21가지의 모든 검사, 각 검사 뒤에 숨겨진 실제 사건, 그리고 정확한 프로덕션 임계값이 담긴 전체 주석 명세서 (annotated spec)는 무료로 제공됩니다 (pay-what-you-want, 0달러도 괜찮습니다): https://join.mishkavids.me. 게이트가 보호하고 있는 채널은 youtube.com/@mishkaai 입니다.
이 포스트에 언급된 모든 임계값(threshold)은 실제로 설정된 수치입니다. 모든 사건은 실제로 발생했습니다. 그것이 게이트(gate)의 핵심입니다. 그것은 실행 가능한 당신의 흉터 조직(scar tissue)입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기