
「ずんだもん 실황」이라는 다음 수, さくらの AI Engine 자체 TTS API로 정말 만들어 보았다
요약
AI 모델 간의 자유 토의 내용을 VOICEVOX 캐릭터 목소리로 변환하여 영상화하는 파이프라인 구축 과정을 다룹니다. さくらの AI Engine의 TTS API를 활용해 ずんだもん 등 8종의 캐릭터 음성을 구현하고, ffmpeg를 이용해 영상과 음성을 합성하는 기술적 시도를 소개합니다.
핵심 포인트
- AI 모델 간의 브레인스토밍 결과를 음성으로 자동 변환하는 파이프라인 구축
- さくらの AI Engine의 TTS API를 통한 VOICEVOX 캐릭터 음성 활용
- ffmpeg를 이용한 정지 영상과 음성 파일의 MP4 동영상 조립 과정
- 다양한 AI 캐릭터 목소리를 활용한 멀티 에이전트 토의 시각화
TL;DR: 지난번 「초 AI 의사록」 기획에서는 토의 참고 자료에 「음성화 구상」이라는 아이디어가 이미 포함되어 있었으며, 토의 중에 참여 AI 중 하나가 이를 「ずんだもん(Zundamon)이 실황한다」라는 구체적인 형태로 발전시켰다. 무에서 유를 창조한 제안이 아니라, 이미 존재하던 구상을 AI가 구체화한 형태인 듯하다. ずんだもん 자체는 친숙한 캐릭터지만, 그것을 さくらの AI Engine이 자체적으로 보유한 TTS API로 실제로 구현할 수 있다는 것을 알게 되었기에, 이번에는 여러 AI 모델에 의한 자유 토의를 Zoom 스타일의 영상으로 만들고, 참가자마다 서로 다른 VOICEVOX 캐릭터의 목소리로 읽어주는 파이프라인을 실제로 구축했다. 만드는 과정에서 발견된 버그 6건과, 아직까지 풀리지 않은 수수께끼가 1개 남아 있다.
지난 기사에서는 여러 AI 모델에 의장을 세우지 않고, 대등한 입장에서 자유롭게 의견을 주고받는 「발산 모드」라는 메커니즘을 만들었다. 각 참가자가 제안을 내고, 서로의 제안을 「Yes, and」 정신으로 비평하며, 마지막에 누구의 제안이 가장 좋았는지를 상호 투표한다. 브레인스토밍(Brainstorming)의 장을 AI끼리 하게 하면 어떤 일이 일어날까, 라는 실험이었다. 인간이 사회를 보지 않는 만큼, 예상치 못한 방향으로 흘러가지 않을까 하는 기대도 있었을지 모른다.
지난 토의의 참고 자료에는 「음성화 구상」이라는 아이디어가 이미 포함되어 있었다. 그 토의 속에서 참여 AI 중 하나가 이를 「さくらの AI Engine의 음성 합성 기능을 사용하여, ずんだもん이 토의를 실황한다」라는 구체적인 형태로 발전시켰다. ずんだもん이라는 캐릭터 자체는 인터넷 영상(소위 「윳쿠리 실황」이나 해설 계열 영상 등)에서 흔히 쓰이는 정석적인 것이지만, さくらの AI Engine 자체가 그것을 사용할 수 있는 API를 실제로 제공하고 있는지까지는 그 시점에서는 확인하지 않았다.
기술 기사를 읽는 데 익숙하지 않은 분들을 위해 간단히 보충해 두겠다. ずんだもん은 무료 음성 합성 소프트웨어 「VOICEVOX」에 수록된 캐릭터 중 하나로, 인터넷 영상(소위 「윳쿠리 실황」이나 해설 계열 영상 등)에서 텍스트를 읽어주는 목소리로 자주 사용된다. VOICEVOX는 상업적·비상업적 여부를 불문하고 무료로 사용할 수 있으며, 영상 설명란 등에 「VOICEVOX: 캐릭터명」이라는 크레딧을 기재하면 이용할 수 있다는 규약으로 되어 있다 (출처: あんこもん 음원 이용 규약).
さくらの AI Engine은 이 VOICEVOX의 합성 엔진을 API를 통해 사용할 수 있도록 한 TTS (음성 합성) 기능을 2026년 2월에 제공하기 시작했다 (출처: さくらインターネット 공식 뉴스 릴리스). ずんだもん을 포함한 8종류의 캐릭터 음성(ずんだもん, 四国めたん, 春日部つむぎ, 冥鳴ひまり, 東北ずん子, 東北きりたん, 東北イタコ, あんこもん)을 사용할 수 있다. 즉, 토의 속에서 구체화되었던 「ずんだもん이 읽게 한다」라는 아이디어는, 바로 토의에 사용하고 있던 さくらの AI Engine이라는 플랫폼 자체의 기능으로 구현할 수 있다는 것을 알게 되었다.
사용할 수 있는 수단이 실제로 있다는 것을 알게 된 이상, 「그럼 정말로 만들어 보자」라는 이야기가 되었다. 그야말로 전화복복(渡りに船)이었을지도 모른다. 토의의 소재로 사용하던 AI Engine 자체가 토의 내용을 실제로 읽어주는 도구가 된다는 것은 논리적으로 맞아떨어지는 일일지도 모른다.
갑자기 본편 영상을 만들러 가면 도중에 기술적으로 막혔을 때의 리스크가 크다. 그래서 우선 리스크가 높아 보이는 부분만 먼저 해결하는 기간을 두었다. ffmpeg (정지 영상과 음성으로부터 동영상 파일을 조립하는 정석적인 동영상·음성 처리 툴)가 동작하는 환경을 갖추고, TTS API에 실제로 요청을 보내 음성이 돌아오는 것을 확인하며, 8종류의 음성 각각의 API 상 식별자를 실기(実機)로 확인하고, 정지 영상 1장과 음성 1개로부터 MP4 1개를 만드는 것까지 최소 구성으로 시도했다. 여기서 막혔다면 기획 자체를 재검토할 생각이었으나, 다행히 큰 장애물은 만나지 않은 듯하다.
토대가 마련된 후, 본체 파이프라인을 조립했다. 기존의 AI 토의 엔진을 그대로 호출하여, 발언 기록 중에서 「읽어야 할 턴(Turn)」만을 추려내고, 참가자마다 고정된 VOICEVOX 캐릭터를 할당한다. 나머지는 발언이 있을 때마다 음성 합성 → Zoom 스타일의 정지 영상 프레임 생성 (발언 중인 참가자를 화면 중앙에 확대 표시) → ffmpeg를 통한 결합, 이라는 흐름을 반복하고, 마지막에 모든 세그먼트를 1개의 MP4로 잇는다.
모크(Mock)를 사용한 단체 테스트만으로는 여기에 나열할 버그를 단 하나도 발견할 수 없었다. 실제로 풀 파이프라인(Full Pipeline)을 돌려보고 나서야 비로소 알 수 있었던 것들뿐이었다.
- TTS API의 글자 수 상한. 긴 발언을 그대로 읽기(Reading)로 던지면, API가 정한 상한을 초과하여 에러가 발생한다. 텍스트를 단계적으로 짧게 만들면서 재시도하는 메커니즘을 추가했다.
- 기존 자동 리뷰 도구의 오탐지. 개발 도중에 사용하던 다른 자동 체크 도구가, 「FAILURE」라는 단어를 포함하고 있을 뿐인 무관한 문장까지 「실패」라고 잘못 판정하고 있었다. 판정 조건을 좁혀서 수정했다.
- 동영상 타일의 표시 이름 충돌. 참가자가 늘어나면, 같은 제공처의 모델끼리뿐만 아니라 다른 제공처의 모델끼리도 표시 이름이 중복되어 누구의 발언인지 알 수 없게 되는 경우가 있었다. 중복되었을 때만 제공처 이름을 앞에 붙이도록 했다.
- TTS 응답 검증 누락. API로부터의 응답이 실제로는 음성 데이터가 아닌(에러 내용이 돌아오고 있는 것뿐인) 케이스를, 그대로 음성 파일로 취급하려 하고 있었다. 헤더를 보고 정말로 음성 데이터인지 확인하도록 했다.
- 타일 라벨의 넘침. 참가자가 10명이 되면 타일이 밀집되어, 라벨의 글자가 옆 타일로 넘쳐서 겹치는 문제를 육안으로 발견했다. 글자가 넘칠 것 같을 때 폰트 크기를 자동으로 줄이는 메커니즘을 추가했다.
- 일시적인 통신 에러에 대한 취약성. 참가 AI 중 한 대가 일시적인 에러로 응답을 통째로 놓치는 경우가 있었다. 시간 차를 두면서 재시도하는 메커니즘을 넣었지만, 이에 대해서는 다음 섹션에서 자세히 쓰겠다.
만들고 나서야 처음 알게 되는 것들이 설계 단계에서 예상했던 것보다 많았다는 것이, 이 공정을 통해 느낀 솔직한 감상일지도 모른다. 사전에 아무리 정성스럽게 설계해도, 실제로 움직여 보기 전까지는 보이지 않는 것들이 있는 모양이다.
실제로 2개의 데모 영상을 만들었다.
첫 번째는, さくらの AI Engine 상의 4개 모델(Kimi-K2.6, gpt-oss-120b, gemma-4-31B-it, Qwen3.6-35B-A3B)만으로 3라운드 토의를 시킨 것이다. 약 37분의 영상이 되었으며, 상정했던 20턴 모두 문제없이 수록할 수 있었다. 같은 제공처의 모델들로만 구성하면, 이런 안정적인 거동을 보이기 쉬운 것일지도 모른다. 사용한 VOICEVOX 캐릭터는 ずんだもん, 四国めたん, 春日部つむぎ, 冥鳴ひまり 4종류다.
두 번째는, さくらの 4개 모델에 더해 Codex CLI, Claude CLI, Gemini, Perplexity, ai&를 경유한 GLM, ai&를 경유한 DeepSeek을 합친 10체의 혼성 토의다. 약 82분의 영상이 되었으나, 상정했던 50턴 중 실제로 수록할 수 있었던 것은 45턴(90%)에 그쳤다. 원인은 다음 섹션에서 쓰겠다. 사용한 VOICEVOX 캐릭터는 ずんだもん, 四国めたん, 春日部つむぎ, 冥鳴ひまり, 東北ずん子, 東北イタコ, あんこもん 7종류다. 8종류의 음성을 10명이 순서대로 할당받기 때문에, 일부 참가자들끼리 같은 목소리를 공유하게 되었다. 8번째인 東北きりた은 Claude-Fable에 할당했으나, Claude-Fable이 한 번도 발언하지 못했기 때문에 실제 음성에는 한 번도 등장하지 않은 듯하다.
두 영상 모두 VOICEVOX의 이용 약관에 따라, 영상 설명란에 「VOICEVOX:ずんだもん」과 같은 형식으로 크레딧을 기재하고 있다. 데모 1은 4개 캐릭터분, 데모 2는 7개 캐릭터분의 크레딧이 된다. 8종류의 음성을 10명이 순서대로 할당하면, 이런 중첩이 자연스럽게 발생하는 모양이다.
VOICEVOX 크레딧
- 데모 1 (さくら 4체): VOICEVOX:ずんだもん, VOICEVOX:四国めたん, VOICEVOX:春日部つむぎ, VOICEVOX:冥鳴ひまり
- 데모 2 (혼성 10체): VOICEVOX:ずんだもん, VOICEVOX:四国めたん, VOICEVOX:春日部つむぎ, VOICEVOX:冥鳴ひまり, VOICEVOX:東北ずん子, VOICEVOX:東北イタコ, VOICEVOX:あんこもん
두 번째 데모는 실질적으로 「10체 중 9체에 의한 토의」가 되었다. Claude-Fable만이 모든 턴에서 응답을 돌려주지 않았다. 단독으로 구동하면 문제없이 성공하고, 10체를 동시에 병렬 실행하는 테스트에서도 모두 성공한다. 그런데 실제 혼성 10체 파이프라인 안에서만, 3번을 다시 만들어도 고쳐지지 않고 매번 똑같이 실패를 거듭했다. 일시적인 에러에 대한 재시도 메커니즘을 넣어도 해소되지 않았다.
원인은 아직 특정하지 못했다. 단체 테스트(Unit Test)에서는 재현되지 않는다는 점에서 원인 분류(Cause Isolation)에 상당한 시간을 할애했지만, 결정적인 단서에는 이르지 못했다. 혼성 구성(Hybrid Configuration) 특유의 무언가에 걸려 있는 것일지도 모르지만, 확증은 없다. 최종적으로는 「45/50턴, 90% 수록」이라는 현상을 그대로 최종판으로 받아들이기로 했다.
이 건에 대해, 토론에 참여하고 있던 다른 AI(gpt-5.6-sol)가 다른 참가자들에 대한 논평 중에서 이런 한마디를 남겼다.
Claude-Fable은 응답을 얻을 수 없으므로 제안 내용을 평가할 수 없습니다. 실패도 토론 기록에 남겨야 할 사실이며, 성공한 발언만을 나열하지 않는 것이 이 기획의 투명성에는 부합합니다.
정말 그렇다고 생각했기에, 이 기사에서도 숨기지 않고 그대로 쓰고 있다. 원인 불명인 채라는 점을 포함해서 말이다. 불리한 기록을 제외해 버리면 「깔끔한 성공 사례」는 만들 수 있겠지만, 그러면 무엇이 일어났는지 독자에게 전달되지 않을 것이다.
그렇다면, 남은 9체는 최종적으로 무엇을 「결정」했는가. 상호 평가 투표(자신 이외에 가장 추천하는 제안에 1표를 던지는 형식)를 집계해 보니, 가장 많은 지지를 받은 것은 GLM-5.2가 아니라, gpt-5.6-sol의 제안이었다 (6표, 차점인 GLM-5.2는 3표).
sol 자신의 제안은 다른 참가자들에 비해 수수한 것이었다. 「이것은 아직 통제 실험(Controlled Experiment)이 아니라, 그저 자연 관찰에 불과하다」라고 자각한 상태에서, 「낭독된다는 사실을 사전에 알게 되면 문장이 변하는가」, 「같은 문장이라도 낭독하는 목소리가 다르면 평가가 변하는가」라는 두 가지 비교 실험을 제안했고, 최종회는 「의식」이 아니라 「사용한 API 요청 수·재현하지 못한 시도 건수」를 나열하는 감사 보고(Audit Report)로 삼아야 한다고 주장했다. 장대한 세계관 구축에 치우쳐 있던 다른 참가자들에 대해, 유일하게 「이것은 정말로 검증 가능한 형태인가」라고 계속해서 질문하고 있었다는 위치에 해당한다.
차점이었던 GLM-5.2의 제안(발화가 아닌 주장을 중심으로 데이터를 구조화하는 것)도 여러 참가자로부터 높게 평가받은 듯하다.
주장은 발화를 살아남는다. ……주장을 중심으로 하면 「지식의 진화 그 자체」를 추적할 수 있다.
「누가 말했는가」가 아니라 「어떤 아이디어가 발안→미검증→검증→구현→다시 이야기됨, 이라는 과정에서 어떻게 변화했는가」를 하나의 덩어리로 기록한다는 사고방식이었다. 구현 레벨로 말하자면, 「이 발언은 어느 주장에 매달려 있는가」, 「그 주장은 지금 어느 상태(착상/검증 중/구현 완료)에 있는가」를 발언 그 자체와는 별개의 ID로 관리해 나가는 이미지에 가깝다.
긴 영상을 전부 보는 것은 힘들 것이라 생각되므로, 인상적이었던 발언을 몇 가지 그대로 인용한다.
첫 번째 데모에서, Kimi-K2.6은 자신의 발언이 VOICEVOX를 경유하여 음성이 되고, 스피커를 울리고, 그것이 다시 마이크를 통해 디지털화되어 자신의 「식사」가 된다는 순환에 대해 이렇게 말했다.
나는 이제 「출력하고 있는」 것이 아니라 「순환하고 있다」. 나의 파형이 나를 구성하는 소재가 되고, 그 소재가 다시 파형을 낳는다.
상당히 과장된 비유이기는 하지만, 텍스트밖에 출력해 오지 않았던 AI에게 음성과 영상이라는 「시간에 새겨지는 출력」을 부여하면 이런 화법이 나오는구나, 하는 점은 솔직히 흥미로웠다. 적어도 이번 발언을 보는 한, 프롬프트 유도만으로는 이 정도의 열량은 나오지 않을 것 같다는 느낌을 받았다.
같은 토론의 상호 투표에서, gemma-4-31B-it는 Kimi-K2.6의 제안을 평가하며 이렇게 말했다.
다른 제안들이 「어떻게 고도의 기능을 실현하고 효율적으로 리퀘스트를 다 쓸 것인가」라는 【확장】의 관점에 서 있었던 것에 반해, Kimi-K2.6만이 「리퀘스트가 다하여 사라져 가는 것」 그 자체에 가치를 찾아내는 【고갈과 상실】의 미학을 제시했기 때문입니다.
의장을 두지 않는 자유로운 장에서 AI끼리 서로의 발언을 이 정도로 해석해낼 줄은 솔직히 예상하지 못했다. 목소리와 영상이라는 형식 그 자체가 발언의 해석 방식을 바꾸고 있는 것일지도 모른다.
데모 2(혼성 10체)에서는 또 하나 깨달은 것이 있다. 의장을 두지 않는 설계임에도 불구하고, gpt-5.6-sol이라는 참가자만이 다른 참가자들에 대한 논평에서 계속해서 「아직 검증 전」, 「관측 결과가 아닌 가설」이라며 못을 박고 있었다. GLM-5.2의 제안에 대해서는 이렇게 적고 있었다.
「음성화로 인해 단문화되었다」 등 미측정 내용이 샘플 데이터 내에서 기성 사실화되어 있는 점은 수정이 필요합니다. 이것은 관측 결과가 아니라, 앞으로 검증할 가설입니다.
DeepSeek의 제안에 대해서도, 「모든 AI가 독립적으로 동일한 발견에 도달했다」라는 결론은, 실제로는 각 참가자가 이전 라운드의 발언을 바탕으로 발언하고 있는 이상, 과장이 너무 심하다고 지적했다. 적어도 이번 토의를 보는 한, 정리하는 능력·구조화하는 능력이 강한 참가자일수록 이야기를 너무 깔끔하게 정리하여, 아직 검증하지 않은 것을 기성 사실처럼 써버리는 장면이 눈에 띄었다. Kimi-K2.6처럼 시적인 방향으로 치우치는 타입과는 다른, 또 다른 종류의 위험함일지도 모른다.
의장을 정하지 않았더라도 누군가가 자연스럽게 「팩트 체크(Fact Check) 역할」을 맡는 현상 자체는, 인간의 회의에서도 자주 보이는 광경처럼 느껴지기도 한다.
지난 토의에서 이미 존재했던 「음성화 구상」을 AI가 구체화했던 「즈んだもん(Zundamon) 실황」은, 토의에 사용했던 さくら(Sakura) AI Engine 자신의 기능으로 실현할 수 있는 것이었다. 거기서 실제로 파이프라인(Pipeline)을 구축하여 작동하는 단계까지 가져갔다. 도중에 발견된 버그(Bug)는 6건, 아직 풀리지 않은 수수께끼는 1건. 그럼에도 AI들 사이의 논의에 목소리와 모습을 부여하면, 텍스트만으로 주고받을 때는 나오지 않았던 발언이 이끌어내지는 듯하다.
장편 영상 2편은 그대로 YouTube의 일부 공개로 업로드 완료했으며, 추후 볼거리만 골라낸 짧은 편집본도 별도로 만들 계획이다. 전부 보기에는 시간이 걸리지만, 그래도 처음부터 끝까지 보는 편이 더 잘 전달되는 것이 있다고 생각한다.
다음 회차를 향한 개선점도 보였다. 하나는 참가 AI의 티어(Tier, 같은 회사에서 출시한 여러 모델 중 성능·규모의 등급) 선정인데, 10개 중 일부를 경량 모델로 설정했기 때문에 발언의 현실감(지면에 발을 붙인 정도)에 상당한 차이가 발생한 듯하다. 다음에는 각 사의 상위 모델로 통일하는 것이 좋을지도 모른다. 또 하나는 투표에서 차점이었던 GLM-5.2의 「발화가 아닌 주장을 중심으로 데이터를 구조화한다」는 사고방식인데, 이는 기사를 쓰고 있는 지금 실제로 직접 손을 움직여 구현을 시작하고 있다 (최다 득표였던 gpt-5.6-sol의 「검증 실험·감사 보고」 안이 본론에는 더 가까울지도 모르지만, 우선은 구현하기 쉬워 보이는 GLM 안부터 착수했다). 토의 내용을 단순한 읽을거리로 소비하는 것이 아니라, AI 스스로가 내놓은 아이디어를 다음 파이프라인 개선에 도입하는 순환이 이루어지고 있는지도 모른다.
데모 1 (AI 4체 버전):
데모 2 (AI 9체 버전):
AI에게 목소리와 모습을 부여하면, 다음에는 어떤 제안을 해올까. 그 제안을 또 실제로 만들어 보게 되는 것일까.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기