블로그 글을 Youtube Shorts로 생성하려면...?

요즘은 블로그 글보다 짧은 영상이 먼저 눈에 들어올 때가 많다. 유튜브를 켜면 숏츠가 연달아 나오니 나도 한번 시류에 탑승해 볼까 싶었다.  소재를 새로 찾을 필요는 없었다. 그동안 AI와 협업하면서 겪었던 사건일지 중에는 글로 읽어도 황당한 이야기가 제법 있다. 특히 신입 GPT가 인수인계 문서를 잘못 이해해 후임 GPT의 업무까지 진행한 사건은 로봇 캐릭터로 짧은 상황극을 만들면 재미있을 것 같았다.

 

한 편에 30~40초 정도면 충분하지 않을까? 대본의 방향과 내용은 내가 판단하고, 이미지부터 애니메이션, 음성과 편집은 평소처럼 AI에게 맡길 생각이었다. 가볍게 시작했는데, 영상을 만들기도 전에 비용 문제가 먼저 등장했다.

AI 영상 생성 도구와 구독 비용

유튜브에서 본 AI 숏츠 몇 개의 링크를 ChatGPT에 보여주며 “이 정도 영상도 만들 수 있어?”라고 물었다. 정작 ChatGPT는 원본 영상을 제대로 확인하지 못했고, 대신 별도의 영상 생성 서비스나 편집 프로그램을 추천했다.

도구 용도 비용 구조
 Runway  AI 영상 생성  제한적 무료 체험, 유료 구독
 Kling AI  이미지 기반 영상 생성  무료 이용 제한, 크레딧 과금
 Pika  영상 및 애니메이션 효과  무료 이용 제한, 유료 플랜
 CapCut  영상 편집·자막  기본 무료, 일부 기능 유료
 Draw Things  Mac 로컬 AI 생성  로컬 실행 무료
 LTX Desktop  로컬 AI 영상 생성  무료 로컬 실행, 장비 제약
 ComfyUI  이미지·영상 생성 워크플로  오픈소스, 로컬 연산 필요

클라우드 서비스는 무료로 조금 시험해 볼 수 있어도 계속 영상을 만들려면 구독료나 크레딧 비용을 피하기 어려워 보였다. 그렇다고 오픈소스 영상 생성 모델을 설치하자니 또 하드웨어가 걸렸다.

 

개인 Mac mini는 M4에 RAM 16GB인 기본 사양이다. 이미지 생성은 시도해 볼 수 있겠지만, 유튜브에서 본 것처럼 자연스럽게 움직이는 고품질 AI 영상을 이 장비로 계속 만들기에는 부담이 커 보였다. 실제 로컬 영상 생성 성능을 측정한 것은 아니어서 일단 이 방법은 보류했다.

ChatGPT 구독과 별개인 OpenAI API 요금

Python 프로그램에서 OpenAI API를 호출해 대본과 이미지를 만들고, 이를 영상으로 합치는 방법도 검토했지만 여기에도 비용 문제가 있었다. ChatGPT 유료 구독과 OpenAI API 요금은 별개였다. 이미 ChatGPT 구독료를 내고 있어도 Python에서 모델을 호출해 텍스트나 이미지를 생성하면 별도 사용량에 따라 과금되는 구조다.

 

사건일지 하나 숏츠로 바꿔보려는데 구독 서비스나 API 비용부터 늘릴 생각은 없었다. 그런데 지금 쓰는 ChatGPT는 이미지를 만들고 코드를 작성하며 파일도 생성하지 않는가. 굳이 별도 API를 호출하지 않고 이 대화에서 직접 시켜보면 어떨까 싶었다.

ChatGPT Work의 첫 유튜브 숏츠

실험 대상으로 ChatGPT 인수인계 사고 글을 골랐다. 신입 GPT가 전체 7단계 계획을 현재 맡은 업무로 오해해 후속 작업까지 진행하도록 지시한 이야기다. 황당한 상황이어서 움직이는 캐릭터로 보여주면 재미가 있을 것 같았다.

 

ChatGPT에게 숏츠 제작을 요청하자 Work 모드로 전환됐고, 원문 분석부터 로봇 캐릭터, 음성, BGM까지 작업을 진행했다. 제작 중 화면에는 로컬 한국어 TTS 모델을 찾고 영상에 넣을 소리와 그림을 준비하는 과정이 표시됐다.

약 20분 뒤 실제 38초짜리 1080×1920 MP4가 나왔다. 캐릭터가 등장하고 한국어 내레이션과 자막, BGM도 있었지만, 결과물은 기대했던 것과 달랐다. 뭔가 좀 구렸다. ㅋㅋㅋ

 

장면과 화면 구성이 비슷해서 황당한 사고를 보여주는 상황극이라기보다는, 로봇이 블로그 내용을 설명하는 발표자료에 가까웠다. 영상은 완성됐지만 내가 원했던 재미있는 숏츠와는 거리가 있었다.

그래도 한 가지 궁금증이 생겼다. 로봇은 분명 조금씩 움직였는데, AI 영상 생성 모델이 그 움직임을 만든 것 같지는 않았다. 그래서 Work가 실제로 어떤 코드로 영상을 제작했는지 조사하도록 했다.

Three.js와 FFmpeg를 이용한 영상 제작

제작 코드를 확인해 보니 의외였다. Work는 정지 이미지를 이어 붙인 것이 아니라 JavaScript의 Three.js로 머리, 몸통, 팔, 다리, 눈과 입을 따로 구성한 3D 로봇을 만들고 있었다. 각 부품의 위치와 회전을 시간에 따라 바꾸고, 눈과 입의 크기를 조절해 표정을 표현하는 방식이었다.

 

배경 그래픽과 자막은 Canvas가 담당하고, 브라우저에서 장면을 프레임별로 렌더링한 뒤 FFmpeg로 MP4를 인코딩했다. 한국어 음성은 로컬 TTS 모델을 실행했고 BGM과 효과음은 Python으로 합성했다. 확인된 제작 스크립트에서는 별도의 유료 영상 생성 API 호출도 발견되지 않았다.

 

여기서 FFmpeg가 낯설지 않았다. 예전에 셋톱박스 개발할 때 살펴봤던 도구였기 때문이다. 영상과 음성을 합치고 인코딩하는 역할이라면 이해할 수 있었다. 그렇다면 AI가 영상 자체를 매번 생성하지 않아도, 캐릭터의 움직임을 코드로 만든 다음 FFmpeg로 영상화하는 방식은 가능하겠다는 생각이 들었다.

난데없는 JavaScript와 다음 실험

그런데 JavaScript라니... 이 괴랄스러운 사파 언어는 또 뭔가? ㅡㅡ;;

 

Python도 하나도 모르는 마당에 갑자기 Three.js까지 등장했다. MyStock도 Python과 PySide6로 개발하고 있지만, 내가 직접 코딩하는 건 아니다. 설계와 방향을 판단하고 실제 구현은 AI가 맡으니 언어가 바뀌었다고 직접 코딩할 부담이 생기는 건 아니었다. 그래도 완전히 생소한 기술을 새로 끌어안는 느낌은 썩 편하지 않았다. ㅋㅋㅋ

 

하지만 이미 움직이는 영상을 제작한 방식을 확인했는데, 굳이 Python으로 다시 만들 이유는 없었다. 더 걱정되는 건 블로그 글마다 등장인물과 상황이 다르다는 점이었다. 매번 새로운 캐릭터와 애니메이션 코드를 처음부터 생성하면 시간과 AI 사용량도 만만치 않을 것이다. 그렇다면 ChatGPT가 애니메이션에 필요한 이미지와 움직임 자료를 직접 준비하고, JavaScript는 그 자료를 움직이는 역할만 담당하게 하면 어떨까?

 

결국 또 하나의 실험거리가 생겼다. 이번에는 ChatGPT가 준비한 이미지로 실제 움직이는 애니메이션을 만들어볼 차례다. ㅋㅋㅋ