<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>무료TTS on To the Moon</title><link>https://junstellar.github.io/tags/%EB%AC%B4%EB%A3%8Ctts/</link><description>Recent content in 무료TTS on To the Moon</description><generator>Hugo -- gohugo.io</generator><language>ko-kr</language><lastBuildDate>Sun, 12 Jul 2026 10:00:00 +0900</lastBuildDate><atom:link href="https://junstellar.github.io/tags/%EB%AC%B4%EB%A3%8Ctts/index.xml" rel="self" type="application/rss+xml"/><item><title>ElevenLabs 구독 끊고 내 GPU로 — 무료 로컬 TTS 트렌드와 Qwen3-TTS 실전 구축기</title><link>https://junstellar.github.io/p/qwen3-tts-local-korean-narration/</link><pubDate>Sun, 12 Jul 2026 10:00:00 +0900</pubDate><guid>https://junstellar.github.io/p/qwen3-tts-local-korean-narration/</guid><description>&lt;p&gt;유료 TTS 구독(대표적으로 ElevenLabs)을 쓰다 보면 글자 수 제한과 월 요금이 계속 신경 쓰인다. 그런데 최근 한 달 사이 분위기가 확 바뀌었다. **&amp;ldquo;유료 구독 탈출 → 무료 로컬 TTS&amp;rdquo;**가 대세가 된 것. 이번 글은 두 부분으로 나뉜다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;트렌드 조사&lt;/strong&gt; — YouTube Data API로 최근 한 달(6/10~7/10)의 &amp;ldquo;무료 TTS&amp;rdquo; 영상 65건을 수집·선별해 지금 뭐가 뜨는지 정리&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;실전 구축&lt;/strong&gt; — 그중 오픈웨이트로 한국어가 가장 자연스러운 &lt;strong&gt;Qwen3-TTS 1.7B&lt;/strong&gt;를 게이밍 노트북(RTX 4060 Laptop 8GB)에 설치하고, 감정 태그를 입힌 &lt;strong&gt;11분짜리 세미나 내레이션&lt;/strong&gt;을 실제로 뽑아낸 과정&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;비용은 0원, 생성 무제한, 인터넷 없이 동작한다.&lt;/p&gt;
&lt;h2 id="무료-tts-트렌드-조사--요즘-뭐가-뜨나"&gt;무료 TTS 트렌드 조사 — 요즘 뭐가 뜨나
&lt;/h2&gt;&lt;p&gt;유튜브에서 최근 한 달 &amp;ldquo;무료 TTS&amp;rdquo; 관련 영상을 API로 긁어 65건을 모으고, 관련도 높은 20개(한국어 14, 해외 6)를 선별해 요약했다. 결론부터:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;이번 달 최대 이슈는 수퍼톤(Supertone)이다.&lt;/strong&gt; 6월 10일 웹 서비스 &lt;strong&gt;수퍼톤 플레이&lt;/strong&gt;(play.supertone.ai)를 출시했고(공식 소개 영상이 한 달 만에 5.7만 회), 동시에 로컬 모델 &lt;strong&gt;슈퍼토닉3를 MIT 라이선스로 무료 공개&lt;/strong&gt;했다. CPU만으로 한국어를 무제한 생성할 수 있어서 &amp;ldquo;ElevenLabs 해지했다&amp;quot;는 영상이 줄줄이 올라오는 중.&lt;/p&gt;
&lt;p&gt;자주 언급된 무료 도구를 성격별로 묶으면:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;분류&lt;/th&gt;
					&lt;th&gt;도구&lt;/th&gt;
					&lt;th&gt;특징&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;웹에서 바로&lt;/td&gt;
					&lt;td&gt;수퍼톤 플레이, 클로바더빙, Vrew&lt;/td&gt;
					&lt;td&gt;설치 없음, 한국어 더빙은 무료 범위로 충분&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;로컬 오픈소스&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;슈퍼토닉3&lt;/strong&gt;(MIT, 한국어 특화, CPU 가능), &lt;strong&gt;Qwen3-TTS&lt;/strong&gt;, VoxCPM2, OmniVoice&lt;/td&gt;
					&lt;td&gt;무제한 + 음성 복제 지원&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;개발자용 최저 진입장벽&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Edge-TTS&lt;/strong&gt;(pip 한 줄, API 키 불필요), Google AI Studio Gemini Flash TTS(70+ 언어)&lt;/td&gt;
					&lt;td&gt;스크립트에 바로 붙이기 좋음&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;기타&lt;/td&gt;
					&lt;td&gt;VoiceBox(오프라인 Windows 앱), RVC(내 목소리 로컬 학습)&lt;/td&gt;
					&lt;td&gt;특수 용도&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;한 줄 요약: &lt;strong&gt;웹에서 바로 쓰려면 수퍼톤 플레이·클로바더빙, 개발자라면 Edge-TTS가 진입장벽 최저&lt;/strong&gt;다.&lt;/p&gt;
&lt;h2 id="qwen3-tts-17b-설치해서-직접-테스트해봤다"&gt;Qwen3-TTS 1.7B, 설치해서 직접 테스트해봤다
&lt;/h2&gt;&lt;p&gt;내 목적은 &amp;ldquo;세미나 영상 내레이션을 컷 단위로, 감정 지시까지 넣어서, 무제한으로 뽑기&amp;quot;였다. 프로그램에서 호출할 수 있고 말투 제어가 되는 로컬 모델이 필요했다.&lt;/p&gt;
&lt;p&gt;오픈웨이트 후보들을 비교한 결과:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Qwen3-TTS 1.7B ← 최종 선택&lt;/strong&gt; — Apache 2.0(상업 사용 자유), 한국어 억양·속도가 오픈웨이트 중 가장 자연스러웠다. 3초 샘플만으로 보이스 클로닝이 되고, 크로스링구얼(다른 언어 샘플로 한국어 발화) 오류율이 4.8%로 CosyVoice 3(14.4%)보다 크게 우수하다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fish Audio S2 Pro&lt;/strong&gt; — TTS Arena 기준 오픈웨이트 1위(전체 11위, Elo 1128.7)로 품질은 최상급. 하지만 &lt;strong&gt;상업 사용은 유료 라이선스&lt;/strong&gt;인 데다 모델이 무거워서 탈락.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;슈퍼토닉3&lt;/strong&gt; — MIT에 CPU만으로 돌아가는 건 매력적이지만, 이번엔 감정 지시(instruct) 제어가 필요해서 Qwen3-TTS로 갔다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="설치-windows-11--rtx-4060-laptop-8gb"&gt;설치 (Windows 11 + RTX 4060 Laptop 8GB)
&lt;/h2&gt;&lt;h3 id="1-가상환경--패키지"&gt;1. 가상환경 + 패키지
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt; &lt;span class="n"&gt;D:&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Project&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="nb"&gt;qwen3-tts&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;&lt;span class="n"&gt;D:&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Project&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="nb"&gt;qwen3-tts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;-m&lt;/span&gt; &lt;span class="n"&gt;venv&lt;/span&gt; &lt;span class="n"&gt;venv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Scripts&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;exe&lt;/span&gt; &lt;span class="n"&gt;-m&lt;/span&gt; &lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-index-url&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="p"&gt;//&lt;/span&gt;&lt;span class="n"&gt;download&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;pytorch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;whl&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cu128&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Scripts&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;exe&lt;/span&gt; &lt;span class="n"&gt;-m&lt;/span&gt; &lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="nb"&gt;qwen-tts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;내 환경 기준: Python 3.14, torch 2.11+cu128, qwen-tts 0.1.1.&lt;/p&gt;
&lt;h3 id="2-모델과-화자"&gt;2. 모델과 화자
&lt;/h3&gt;&lt;p&gt;모델은 &lt;code&gt;Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice&lt;/code&gt; — 첫 실행 시 자동 다운로드된다. VRAM은 &lt;strong&gt;4.5GB 정도만 사용&lt;/strong&gt;해서 8GB GPU에 여유 있게 들어간다.&lt;/p&gt;
&lt;p&gt;내장 화자는 9명(aiden, dylan, eric, ono_anna, ryan, serena, sohee, uncle_fu, vivian)이고, 한국어는 &lt;strong&gt;sohee&lt;/strong&gt;가 담당이다.&lt;/p&gt;
&lt;h3 id="3-알아두면-좋은-것"&gt;3. 알아두면 좋은 것
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;flash-attn을 설치하지 않으면 생성 속도는 오디오 길이의 약 2배&lt;/strong&gt; (1분짜리 음성에 2분 소요). 배치로 밤에 돌리면 문제없는 수준.&lt;/li&gt;
&lt;li&gt;실행 시 SoX 관련 경고가 뜨는데 무해하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="핵심-패턴-모델을-상주-서버로-띄우기"&gt;핵심 패턴: 모델을 상주 서버로 띄우기
&lt;/h2&gt;&lt;p&gt;모델 로딩에 약 1분이 걸리므로, 스크립트를 실행할 때마다 로딩하면 낭비다. &lt;strong&gt;간단한 HTTP 서버로 한 번만 띄워두고 POST로 호출&lt;/strong&gt;하는 구조를 만들었다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Scripts&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;exe&lt;/span&gt; &lt;span class="n"&gt;tts_server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# → http://127.0.0.1:8765 에서 대기&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;호출은 이렇게:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;POST&lt;/span&gt; &lt;span class="err"&gt;/tts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;texts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;여러분, 오늘 다룰 주제는 피지컬 AI입니다.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;speaker&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;sohee&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;instruct&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;자신감 있는 일타강사 말투로, 약간 도발적으로&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;filename&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;01_opener.wav&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;결과 WAV는 &lt;code&gt;output\&lt;/code&gt;에 저장된다. 핵심은 &lt;code&gt;instruct&lt;/code&gt; 필드 — &lt;strong&gt;말투를 자연어로 지시&lt;/strong&gt;할 수 있다는 점이 이 모델을 고른 결정적 이유다.&lt;/p&gt;
&lt;h2 id="실전-감정-태그-입힌-세미나-내레이션-23컷"&gt;실전: 감정 태그 입힌 세미나 내레이션 23컷
&lt;/h2&gt;&lt;p&gt;세미나 1회차 대본을 23개 컷(01_opener ~ 23_takeaway)으로 쪼개고, &lt;strong&gt;컷마다 감정 태그와 TTS용 instruct 문구를 JSON으로 관리&lt;/strong&gt;했다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;cut&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;05_quiz2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;emotion&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;장난스러운 도발&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;instruct&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;퀴즈를 내며 살짝 약올리는 말투로, 템포를 빠르게&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;감정 곡선은 이렇게 설계했다: &lt;strong&gt;도발 → 퀴즈 5연발 → 약올림 → 차분한 강의 → 정답 발표 → 심화 → 묵직한 마무리&lt;/strong&gt;. 단일 톤으로 11분을 읽으면 졸린데, 컷마다 instruct를 바꿔주니 확실히 &amp;ldquo;사람이 진행하는&amp;rdquo; 느낌이 산다.&lt;/p&gt;
&lt;p&gt;파이프라인은 3단계:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;컷별 대본 23개 + 감정 태그 JSON
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ (gen_all_cuts.py — 컷마다 instruct 다르게 서버 호출)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;output\cuts\ 23개 WAV
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ (60~90초 단위로 병합, 구성은 parts_manifest.json에 기록)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;output\parts\part_01.wav ~ part_10.wav (총 11.6분)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;이 구조의 장점은 &lt;strong&gt;수정이 컷 단위&lt;/strong&gt;라는 것. 특정 컷의 억양이 마음에 안 들면 그 컷만 instruct를 고쳐 재생성하고 해당 파트만 다시 병합하면 된다. 유료 서비스였다면 재생성할 때마다 글자 수가 차감됐을 텐데, 로컬이라 무한 리테이크가 공짜다.&lt;/p&gt;
&lt;h2 id="직접-들어보기--생성-샘플-3개"&gt;직접 들어보기 — 생성 샘플 3개
&lt;/h2&gt;&lt;p&gt;말로 설명하는 것보다 듣는 게 빠르다. 아래는 Qwen3-TTS(화자 sohee)로 뽑은 샘플들이다. 스타일별로 하나씩 — 뉴스 리딩, 다큐 내레이션, 감정 표현.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;샘플 1 — 뉴스 톤&lt;/strong&gt; · &amp;ldquo;오늘 서울의 낮 최고 기온은 33도까지 오르겠고, 내륙 곳곳에 소나기가 지나겠습니다.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;audio controls preload="metadata" src="https://junstellar.github.io/audio/qwen3-tts/sample1_news.wav" style="width:100%"&gt;&lt;/audio&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;샘플 2 — 차분한 내레이션 톤&lt;/strong&gt; · &amp;ldquo;인공지능 기술은 지난 10년간 놀라운 속도로 발전해왔습니다. 이제 우리는 컴퓨터와 자연스럽게 대화하는 시대에 살고 있죠.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;audio controls preload="metadata" src="https://junstellar.github.io/audio/qwen3-tts/sample2_narration.wav" style="width:100%"&gt;&lt;/audio&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;샘플 3 — 감정(놀람) 표현&lt;/strong&gt; · &amp;ldquo;정말요? 그게 진짜 된다고요? 와, 이건 생각보다 훨씬 대단한데요?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;audio controls preload="metadata" src="https://junstellar.github.io/audio/qwen3-tts/sample3_emotion.wav" style="width:100%"&gt;&lt;/audio&gt;&lt;/p&gt;
&lt;p&gt;같은 화자인데도 instruct 지시에 따라 톤이 이만큼 갈라진다. 특히 샘플 3처럼 감탄·놀람 같은 감정 표현이 어색하지 않다는 점이 세미나 내레이션에 쓸 수 있겠다고 판단한 근거였다.&lt;/p&gt;
&lt;h2 id="정리"&gt;정리
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;트렌드는 명확하다: &lt;strong&gt;무료 로컬 TTS가 유료 구독을 대체하는 중.&lt;/strong&gt; 웹은 수퍼톤 플레이·클로바더빙, 개발자는 Edge-TTS, 품질+제어가 필요하면 오픈웨이트 로컬 모델.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Qwen3-TTS 1.7B&lt;/strong&gt;는 Apache 2.0 + 한국어 자연스러움 + 자연어 말투 지시(instruct) + VRAM 4.5GB라는 조합으로, 8GB급 GPU에서 실용적인 최선이었다.&lt;/li&gt;
&lt;li&gt;상주 서버 + 컷별 감정 태그 JSON 패턴으로 &lt;strong&gt;11.6분 세미나 내레이션을 컷 단위 리테이크 가능한 형태&lt;/strong&gt;로 완성했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이 글의 코드 전체(상주 서버, 컷별 생성·병합 스크립트, 스트리밍 페이지, 샘플 음성)는 GitHub에 공개했다: &lt;strong&gt;&lt;a class="link" href="https://github.com/junstellar/qwen3-tts-korean-narration" target="_blank" rel="noopener"
 &gt;junstellar/qwen3-tts-korean-narration&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;다음 과제는 두 가지다. flash-attn을 설치해 생성 속도를 끌어올리는 것, 그리고 3초 샘플 보이스 클로닝으로 내 목소리를 등록해보는 것. 진행되면 후속 글로 정리하겠다.&lt;/p&gt;</description></item></channel></rss>