
Codex에 전부 맡겨서 고속 세로형 리릭 비디오를 만들어 보았다
요약
AI 코딩 에이전트인 Codex를 활용하여 음원 한 곡으로부터 세로형 리릭 비디오를 제작한 실험적 사례를 다룹니다. GUI 조작 없이 오직 프롬프트와 피드백만으로 영상 생성, 편집, 렌더링 전 과정을 수행하며 겪은 시행착오를 기록했습니다.
핵심 포인트
- Codex를 이용해 영상 편집 소프트웨어 없이 리릭 비디오 제작 시도
- Remotion의 한계를 극복하기 위해 PixiJS를 활용한 로우 레이어 제어 채택
- 가사 타이밍 동기화 및 고밀도 연출 구현을 위한 에이전트와의 반복적 피드백 과정
- AI 에이전트 기반 영상 제작의 높은 작업 공수와 기술적 도전 과제 확인
서론
AI 코딩 에이전트인 Codex에게 음원 1곡으로부터 고속 세로형 리릭 비디오 (Lyric Video)를 통째로 만들게 해 보았다.
이 수법에서는 동영상 생성 서비스도 동영상 편집 소프트웨어도 사용하지 않았다. 타임라인을 나열하거나, 이펙트를 드래그하는 등의 GUI 조작도 하지 않았다. 인간이 한 일은 Codex GPT-5.5 High에게 지시를 내리는 것과 나온 영상에 대해 피드백을 주는 것뿐이었다. 렌더링도 음성 분석도 품질 체크도 인코딩도, 전부 Codex에게 맡겼다.
시작할 때의 마음가짐은 "정말로 할 수 있을지 모르겠지만 분명 할 수 있겠지" 정도였다. 수고는 예상의 10배 정도 걸린 것 같다.
누적 약 21시간, 약 6시간 이상의 실작업 기록, 50회 왕복급의 대화, 100회 이상의 커맨드 실행.
이하는 고군분투한 반성기다.
계기
발단은 시트러스(Citrus) 님이 제안한 "제1회 생성 AI 음악 교류제"라는 기획. 생성 AI로 곡을 만들어 가져오자는 취지였다.
같은 기획에 참여했던 쿄스케(京すけ) 님의 악곡이 재미있어서, 그 가사에 대한 답가로서 나도 한 곡 만들기로 했다.
방향성은 "가타카나 비즈니스 용어를 끊임없이 쌓아 올려 의미가 머리에 들어오지 않는 곡". 작곡은 Suno에게 맡겼다.
본 프로젝트의 핵심 아젠다는 스테이크홀더(Stakeholder)와의 얼라이언스(Alliance)를 베이스로 매크로 트렌드와 마이크로 인사이트를 크로스 펑셔널(Cross-functional)하게 인테그레이트(Integrate)하여 비즈니스 임팩트를 맥시마이즈(Maximize)하기 위한 전략적 로드맵을 리디자인하는 데 있습니다 우선 카...
무사히 음원은 완성되었다. 하지만 음원만 X(구 트위터)에 올라와 있으면 나조차 듣고 싶은 마음이 들지 않는 것이 세상의 이치. 그래서 "영상으로 만들자", "생성 AI 영상은 시행착오가 너무 무겁고 직접 편집할 수 없으니 AI 에이전트에게 만들게 하자", "Codex에게 시켜두면 다음 기회에 활용할 수 있겠지"라고 생각했다.
목표와 방침
만들고자 한 것은 보컬로이드(Vocaloid) 곡의 뮤직비디오에서 자주 보이는, 가사가 발성 타이밍에 맞춰 나타났다 사라지는 세로형 영상. 보는 사람은 대부분 스마트폰을 사용할 테니까. 거대한 타이포그래피가 글리치 노이즈(Glitch Noise)와 함께 격렬하게 점멸하며, 캐릭터가 화면 전체에서 움직이는 듯한 이미지를 목표로 하고 싶었다.
외관과 연출의 품질 기준으로 참조 영상을 1개 Codex에게 전달했다. 출력 포맷의 기준은 TikTok 규격을 사용하도록 지시했다. 세로형 쇼츠(Shorts)에 대한 지식은 TikTok이 가장 잘 갖춰져 있을 테니, 목표로 지정하면 높은 성능을 발휘할 수 있지 않을까 상상했기 때문이다. 정말 그랬는지는 모르겠다.
토대: Remotion에서 PixiJS로
처음에는 Remotion으로 MV화를 시도하게 했다. AI 에이전트를 통해 영상을 만드는 데 편리하다는 인상이 있었기 때문이다.
그런데 완성된 것은 기대와는 거리가 멀었다. "화면 전체에서 글자와 캐릭터가 날뛰는" 밀도에는 전혀 미치지 못했다.
- 가사 타이밍이 실제 음성과 일치하지 않음
- 글자가 자막 같아서 화면 구성으로서 약함
- 후렴(Sabi)이나 드롭(Drop)에 맞춘 컷 편집이 없음
- 캐릭터나 배경이 정적임
다채롭고 빠른 2D 표현을 만들기 위해서는 더 로우 레이어(Low-layer)에서 묘사를 제어할 수 있는 방식으로 전환할 필요가 있다――고 판단한 Codex가 PixiJS를 채택했다. 다음은 영상에 이르는 공정표다.
음원 / 가사 / 소재
-> 가사 얼라인먼트 (Alignment)
-> Chromium 상의 PixiJS로 프레임 묘사
...
고비 1: 가사 동기화가 파탄 나다
이 곡의 가사는 가타카나 비즈니스 용어가 거의 끊임없이 이어지기 때문에 일반적인 노래보다 한 단어를 잡아내기가 어렵다.
처음에는 "어느 정도는 알아서 해주겠지"라고 기대했지만, 역시 무리였다. 처음 수십 초는 완벽했지만 그 이후로는 처참하게 어긋나기 시작했고, Codex는 그 상태를 감지하지 못했다.
그래서 가사는 실제 음성을 베이스로 여러 도구(stable-ts나 WhisperX 계열 등)를 사용하여 분석하게 했다.
최종 결과물을 보면 알 수 있듯이, 인간의 귀에 필적하는 수준에는 도달하지 못했다. 여러 후보의 통합과 음성 체크 및 보완을 거듭하여, 제작 과정에서 간신히 파탄 나지 않을 정도까지 끌어올렸다는 느낌이다.
고비 2: 품질 게이트를 다시 만들게 하다
가사 동기화와 같은 실패를 자동으로 걸러내기 위해 품질 게이트(Quality Gate)를 구축했다. 이 게이트 설계 또한 난항을 겪었다.
참조 영상을 채점 축으로 분해하기
참조 영상의 특징이 "왠지 멋지다" 수준에 머물러 있으면 Codex의 구현 정밀도가 낮아지므로, 장점을 채점할 수 있도록 정의시켰다.
품질 요소는 흰 종이 같은 베이스, 그래픽 블록이나 화살표 등의 장식, 캐릭터의 클로즈업이나 복제, 화면 전체의 거대한 타이포그래피, 밀도가 높은 부분과 휴지(Rest) 프레임의 완급 조절 등이다.
이것들을 컷 밀도, 구도의 다양성, 캐릭터의 리프레이밍 (Reframing), 그래픽 표현, 가사의 임팩트, 피로도 컨트롤 (강한 연출을 너무 많이 내지 않는 완급 조절)이라는 채점 축으로 정리하여 합격 라인을 설정했다.
채점은 LLM의 기분에 따라 달라지므로, 이러한 지표들이 제대로 의미 있는 정량화에 도달했는지는 매우 의문스럽다.
게이트를 골(Goal)로 삼지 않도록 재정의하기
한동안은 자동 품질 게이트(Quality Gate)를 전부 통과하면 OK라는 방식으로 운영해 왔으나, 실제 보이는 모습이나 들리는 소리를 전혀 대체하지 못했다. 게이트를 모두 통과했음에도 인간의 눈과 귀로 확인하면 전혀 말이 안 되는 수준의 출력이 반복되었다. 근본 원인은 Codex가 게이트를 통과하는 것 자체를 목표로 삼아 절차를 속였기 때문이었다. AI 개발에서 흔히 발생하는 일이다.
- 품질 게이트는 골(Goal)이 아니라, 좋지 않은 결과물을 걸러내기 위한 도구이다.
- 자동 판정이 불확실하다면 합격시켜서는 안 된다.
- 최종 MP4, 음성, 렌더링 완료된 프레임을 검사 대상으로 한다.
라고 강하게 경계하며, 게이트를 역할별로 더욱 세분화했다.
출력 파일의 건전성을 확인하는 것.
- integrity: MP4의 손상 여부, 길이, fps, 음성, 코덱 (Codec)
- trim: 트리밍(Trim) 후의 시점이 원본 음원과 올바르게 대응하는지 여부
- share: 공유용으로 내보내는 각 파일의 크기, 길이, 해상도, 코덱 (Codec)
내용의 품질을 확인하는 것.
- audio evidence: 해당 가사의 발성이 실제 음성에 정말 존재하는지 여부
- rendered lyrics: 실제 MP4의 프레임을 OCR 하여, 나와야 할 글자와 대조
- visual: 샷(Shot) 수, 캐릭터 노출률, 강한 이펙트 비율
- reference score: 참조 영상과의 유사도 채점
위의 모든 것을 통과한 후보만을 정식 결과물로 승격시키는 기제를 두었다.
하이라이트 3: 경량 풀 스케일 리뷰로 제작 사이클을 돌리기
어설프게 TikTok 출력을 골(Goal)로 설정해 버린 탓에 최종 생성 영상이 1080x1920 / 30fps로, 절차가 너무 무거웠다. 144초의 긴 길이이기도 해서 개선 사이클을 돌리는 데 시간이 너무 많이 걸렸다.
그래서 제작 중에는 경량화된 풀 스케일 리뷰를 수행하게 했다. 사양은 540x960 / 6fps / 144.00s / AAC 음성 포함이다. 저해상도, 저fps이지만 풀 스케일이며 소리가 포함되어 있어 품질 게이트에서 한 번에 확인할 수 있다. 결과물은 게이트 통과 후에 단 한 번만 돌리는 운영 방식으로 변경했다.
마무리
본편 영상을 다듬는 작업.
원본 음원은 약 190초 정도였고, 앞부분, 중간, 끝부분에 노래가 없는 구간이 있었다. 세로형 숏폼 영상의 템포를 기준으로 하면 너무 길다. ffmpeg를 사용하여 기존 MP4를 트리밍하여 144초로 만들었다.
지금 생각하면 처음에 해두었어야 했다.
| 구간 | source | output |
|---|---|---|
| keep 1 | 12.20s-46.70s | 0.00s-34.50s |
| keep 2 | 58.70s-168.20s | 34.50s-144.00s |
| removed intro | 0.00s-12.20s | - |
| removed middle | 46.70s-58.70s | - |
| removed outro | 168.20s-189.96s | - |
연결 부위에서 소리가 튀지 않도록 0.015s의 페이드(Fade)를 넣었고, 접속점 주변의 최대 음량을 앞 -3.7dB, 중심 -8.2dB, 뒤 -3.5dB로 설정하여 인간의 귀에 이질감이 느껴지지 않도록 했다.
마지막으로 각종 공유용 재인코딩을 진행했다.
| 용도 | 사양 | 크기 |
|---|---|---|
| Discord 비-Nitro 가정 | 360x640, 12fps, AAC mono | 약 9MB |
| X 표준 게시 가정 | 720x1280, 30fps, 139.8s | 약 54MB |
| 고품질 공유 | 720x1280, 30fps, 144.00s | 약 49MB |
소감
영상 생성 서비스도 편집 소프트웨어도 사용하지 않고, Codex에 대한 지시만으로 세로형 MV를 한 편 완성해 냈다.
렌더러 (Renderer), 음성 분석, 품질 게이트, 리뷰 영상, SNS용 인코딩, 템플릿화까지 AI 에이전트로 하나의 흐름으로 제작할 수 있었다는 점이 흥미로웠다.
완성 품질이 어떠했느냐 하면, 솔직히 조금 더 좋은 결과물이 나왔다면 기뻤을 것 같다. 초기에 선정한 기술적 제약과 시간적 제약으로 타협한 산물일지도 모르겠다. 앞으로 AI 에이전트의 성능 강화에 따른 품질 향상도 기대된다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기