NEW코딩일지 · 11.05코퍼스 메인에 주장 연구실을 세웠다: 사유고2 주장 29만 개를 자동 등록하고 스파크 두 대가 반증 조건까지 검토한다
← 학습
·4분

로컬 영상 뽑기 · 1화

원고를 영상 한 편으로 조립하는 로컬 자동화를 만들었다

로컬 모델로 장면 클립을 뽑고, 음성·자막·음악과 엮어 한 편의 영상으로 조립하는 자동화를 만들었다. 처음 만든 본편은 PPT 같다는 말을 들었다.

▸ 유튜브 자동화#comfyui#video-generation#automation

유튜브 채널 두 개에 영상을 올린다. AI 인프라를 해설하는 AC리서치와 책과 사상가를 다루는 부르바키소사이어티다. 영상 한 편에는 원고, 목소리, 자막, 음악, 그리고 화면을 채울 장면 영상이 필요하다. 가장 손이 많이 가는 것이 마지막, 장면 영상이었다. 이 연재는 그 장면을 집에 있는 GPU로 직접 만들면서 배운 것을 정리한다.

두 모델, 두 역할

장면은 ComfyUI에서 로컬 모델 두 개로 만든다. 사람의 손이나 몸이 움직여야 하는 장면은 MiniMax H3, 공간이나 사물을 보여 주는 B-roll은 LTX 2.5가 맡는다. 둘 다 1344×768, 24fps로 10초 안팎의 클립을 뽑는다. H3는 동작을 잘 그리지만 느리고, LTX는 빠르지만 사람 동작이 약하다. 이 차이가 뒤에 나올 속도 이야기의 출발점이다.

자동화의 모양: 쇼츠 네 편

작업 기록이 자세히 남은 예로 9월 초에 만든 쇼츠 네 편이 있다. 데이터센터 관련 기업 네 곳을 다룬 1분짜리 세로 영상이다. 원고 파일을 넣으면 목소리를 만들고, 장면 클립을 뽑고, 자막을 붙여 렌더한 뒤 자동 검사까지 하는 흐름이다.

목소리는 ElevenLabs의 한 목소리로 고정하고, 편마다 여러 테이크를 만들어 하나를 골랐다. 고른 테이크는 음량만 맞추고 속도나 음높이, 길이는 건드리지 않았다. 버린 테이크도 원본과 생성 설정을 함께 남겼다. 장면은 RTX 5090에서 LTX 2.5로 뽑았다. 네 편 모두 렌더와 검사를 통과했다.

첫 본편은 PPT였다

쇼츠가 돌아가자 9분짜리 본편으로 넘어갔다. 부르바키의 『신호와 소음』 편이었다. 결과물을 받아 본 반응은 차가웠다. 슬라이드를 넘기는 PPT 같다는 것이었다.

세어 보니 그 말이 맞았다. 59장면 가운데 실제로 움직이는 영상은 4장면, 41초(7.7%)뿐이었고, 나머지 55장면은 설명 그래픽이었다. 장면 영상이 모자란 자리를 그래픽으로 채운 것이다.

그래서 원칙을 바꿨다. 영상이 본체이고, 설명은 꼭 필요한 순간에만 짧게 얹는다. 설명 오버레이를 전부 꺼도 영상의 흐름이 성립해야 한다. 장면이 모자라다고 그래픽을 늘려 완성이라고 부르지 않는다. 이 원칙을 31초 구간에 먼저 적용해 전후를 나란히 비교한 뒤 전체 수정에 들어갔다. 그러다 그 편에 쓰던 클라우드 영상 서비스 계정이 막히면서 수정 작업이 멈췄다. 다음 날부터는 장면을 우리 GPU의 로컬 모델로 뽑는 쪽에 힘을 실었다.

조립하는 자동화

이 방식으로 다시 만든 본편이 AC리서치 하이퍼사이클 3편이다. 910초, 166컷짜리 본편에 새 H3 클립 125개와 먼저 만들어 둔 LTX 11개, H3 2개를 배치했다. 앞 장을 복습하는 장에서는 28컷을 새로 만들지 않고 앞서 보여 준 같은 주제 영상을 다시 썼다. 영상 길이를 늘리려고 같은 클립을 반복하거나, 거꾸로 돌리거나, 느리게 재생하지는 않기로 했다.

자동화의 뼈대는 세 가지다.

  • 타임라인: 음성의 발화 시각이 기준이다. 어느 문장이 몇 초에 나오는지에 맞춰 컷을 배치하고, 자막 220개와 가끔 뜨는 헤드라인 34개를 얹는다. 글자만 얹고 영상 화면은 가리지 않는다.
  • 배치 실행기: 생성 작업을 하나씩 GPU에 넣는다. 넣기 전에 다른 작업이 GPU를 쓰고 있지 않은지, 큐가 비었는지, 메모리 여유가 있는지 확인한다. 진행 상황은 실행기의 기억이 아니라 실제로 생긴 결과 파일과 클립 파일을 기준으로 읽는다. 중간에 끊겨도 어디까지 됐는지 파일이 말해 준다.
  • 렌더: 검수를 통과한 클립만 1080p 30fps로 장별 렌더한 뒤, 다시 인코딩하지 않고 이어 붙인다. 음악은 음량을 맞추고 말소리가 나올 때 살짝 낮춘다. 너무 어두운 클립은 밝기를 보정한다.

만들고 나서 실제 프레임을 봐야 보이는 문제도 있었다. 자막이 끝난 뒤에도 잠깐 남아 있는 현상을 4초 지점 프레임에서 발견해 고쳤다. 나중 편에서는 이 편집 단계를 Remotion으로 옮겨 원고에서 렌더까지 한 번에 돌리게 됐다.

생성 성공은 합격이 아니다

클립이 생성됐다고 쓸 수 있는 것은 아니다. 모든 클립은 처음과 중간과 끝 프레임을 직접 확인한다. 배경의 간판에 가짜 글자가 생기거나, 반도체 부품 모양이 틀리거나, 화면이 번진 클립은 본편에서 빼고 다시 만든다. 뺀 클립도 지우지 않고 사유와 함께 남긴다. 그래야 같은 문제가 반복되는지 나중에 알 수 있다.

배운 것

장면 영상 자동화의 중심은 모델이 아니라 두 개의 기록이다. 음성의 시각을 기준으로 한 타임라인, 그리고 어떤 컷이 어떤 설정으로 만들어져 어디에 들어갔는지 적은 원장. 이 둘이 있으면 모델을 바꾸든 장비를 늘리든 조립은 그대로 돌아간다. 문제는 속도였다. H3 클립 하나에 15분이 넘게 걸렸고, 본편 한 편에는 그런 클립이 백 개 넘게 필요했다. 다음 화는 그 시간을 줄인 이야기다.

로컬 영상 뽑기 · 전 4화

  1. 1화원고를 영상 한 편으로 조립하는 로컬 자동화를 만들었다
  2. 2화H3 터보 8스텝: 2.33배 빨라지고 연출은 지켰다
  3. 3화H3는 5090, LTX는 DGX Spark: 두 대로 나눠 동시에 돌렸다
  4. 4화H3가 2.8배 빨라졌다: PyTorch 2.13과 ck attention 설정 두 줄