OBS 텍스트 음성 변환: 방송이 어떤 글이든 말하게
OBS Studio는 스스로 글을 읽어 주지 않고, 넣어 준 것을 보여 주고 믹스할 뿐입니다. 목소리를 넣으려면 오디오를 줘야 합니다. 미리 만든 클립이나, 스크립트가 즉석에서 변환해 OBS에 재생을 요청하는 파일입니다. OBS 28부터 obs-websocket 서버가 내장되어 같은 PC의 스크립트가 플러그인 없이 소스를 제어할 수 있습니다.
이 가이드는 방송 PC에서 오프라인으로 텍스트를 변환하는 무료 SuperClonica 엔진으로 두 방법을 모두 보여 줍니다. 스크립트는 obs-websocket 프로토콜로 테스트했으며, 한 줄마다 미디어 소스의 파일을 바꾸고 다시 재생합니다.
정해진 문장: 미디어 소스와 단축키
“잠깐 자리 비울게요”나 인사처럼 자주 쓰는 문장은 한 번만 변환해 두세요: superclonica --text "잠깐 자리 비울게요, 간식 챙겨 오세요!" --voice F1 --lang ko --output brb.wav. OBS에서 미디어 소스(Media Source)를 추가하고 파일을 고른 뒤, 소스가 활성화될 때 재생을 다시 시작하는 옵션을 켜고, 단축키 설정에서 그 소스에 보이기 키를 지정하세요. 누를 때마다 문장이 재생됩니다. 한국어 OBS에서는 메뉴 이름이 조금 다를 수 있습니다.
어떤 글이든 실시간으로: 스크립트와 obs-websocket
OBS에서 Tools → WebSocket Server Settings(도구 → WebSocket 서버 설정)을 열어 서버를 켜고 비밀번호를 적어 두세요. 장면에 TTS라는 이름의 미디어 소스를 추가하고 파일은 비워 두세요. 그다음 두 패키지를 설치하세요:
pip install superclonica-cpu obsws-python
스크립트를 obs_say.py로 저장하세요:
import os, sys, wave
import numpy as np
import obsws_python as obs
from superclonica import Superclonica
SOURCE = "TTS" # the name of a Media Source in your scene
VOICE = os.environ.get("TTS_VOICE", "F1") # M1..M5, F1..F5 or a voice file from the catalog
LANGUAGE = os.environ.get("TTS_LANGUAGE", "en")
FILES = [os.path.abspath("tts-a.wav"), os.path.abspath("tts-b.wav")]
tts = Superclonica()
client = obs.ReqClient(host="localhost", port=4455, password=os.environ.get("OBS_PASSWORD", ""), timeout=5)
def save(path, audio, rate):
pcm = (np.clip(np.asarray(audio, dtype=np.float32).reshape(-1), -1, 1) * 32767).astype(np.int16)
with wave.open(path, "wb") as file:
file.setnchannels(1)
file.setsampwidth(2)
file.setframerate(rate)
file.writeframes(pcm.tobytes())
def say(text, turn):
path = FILES[turn % 2] # two files, so OBS never reads the one being written
audio, rate = tts.synthesize(text, voice=VOICE, lang=LANGUAGE)
save(path, audio, rate)
client.set_input_settings(SOURCE, {"local_file": path}, True)
client.trigger_media_input_action(SOURCE, "OBS_WEBSOCKET_MEDIA_INPUT_ACTION_RESTART")
for turn, line in enumerate(sys.stdin):
if line.strip():
say(line.strip(), turn)OBS_PASSWORD에 비밀번호를 넣고 실행한 뒤 줄을 입력하거나, 채팅 봇에서 텍스트를 넘겨 주세요:
python obs_say.py
각 줄이 WAV로 변환되고, TTS 소스가 그 파일을 받아 OBS가 처음부터 재생합니다. 스크립트는 두 파일을 번갈아 써서 OBS가 쓰는 중인 파일을 읽는 일이 없습니다.
목소리 고르기
카탈로그의 아무 목소리 페이지에서 자주 쓰는 문장(30~100자)을 붙여 넣고 언어를 고른 뒤 음성 변환을 누르세요. 계정 없이 몇 초 만에 방송이 어떻게 들릴지 알 수 있습니다. TTS_VOICE에는 기본 목소리 10개(M1~M5, F1~F5) 중 하나나 카탈로그 음성 파일 경로를, TTS_LANGUAGE에는 31개 언어 중 하나(예: ko)를 넣으세요. 중국어는 아직 지원하지 않습니다.
통제 유지하기
시청자가 글을 보낼 수 있다면 채널 포인트 보상, 비트, 후원만 읽고, 길이를 제한하고, 링크와 욕설을 거르고, TTS 소스 음소거 키를 준비하세요. 캐릭터 목소리는 팬이 만든 것으로 SuperClonica 약관 범위에서 방송의 재미로 쓰기에 괜찮지만, 실제 인물을 흉내 내는 목소리로 채팅이 말하게 해서는 안 됩니다. 채팅 쪽은 Twitch 채팅 TTS 가이드를 참고하세요.