OpenAI TTS 사용법, 음성 파일은 어떻게 만들고 확인할까?
본문 바로가기
AI 완전정복

OpenAI TTS 사용법, 음성 파일은 어떻게 만들고 확인할까?

by empi 2026. 10. 12.
반응형

OpenAI TTS는 입력한 글을 말소리로 바꾸는 기능입니다. 한국어 대본을 MP3 파일로 저장하려면 OpenAI API를 사용할 수 있습니다. 이 글에서는 API 이용 준비, Python 코드 실행, 파일 저장과 재생 확인까지 순서대로 설명합니다.

공식 문서를 기준으로 작성했습니다. 아래 코드는 공식 API 호출 방식에 맞춘 예제이며, 이 글을 위해 실제 유료 음성을 생성하거나 품질을 비교한 후기는 아닙니다. 그림은 이해를 돕는 생성 일러스트로 실제 제품 화면이 아닙니다.

먼저 알아둘 변경사항이 있습니다. OpenAI는 2026년 10월 1일 기존 TTS 모델의 종료 계획을 공지했습니다. tts-1, tts-1-hd, gpt-4o-mini-tts-2025-03-20, gpt-4o-mini-tts-2025-12-15는 2027년 1월 6일 종료 예정입니다. 아래는 확인일 현재 Speech API 문서에 남아 있는 gpt-4o-mini-tts 사용법입니다. 장기 운영용으로 도입할 때는 최신 지원 상태와 이전 안내를 다시 확인하세요. 권장 이전 모델은 gpt-realtime-2.1-mini이지만, 아래 코드의 모델 이름만 바꾸면 된다는 뜻은 아닙니다.

마이크 입력과 문서, 스피커 출력의 변환 흐름 위에 대화 말풍선이 놓이고, 아래에는 음악 악보가 별도 영역으로 구분된 개념도
음성 대화, 전사, 음성 합성과 음악은 원하는 결과부터 구분합니다.

1. ChatGPT 음성 대화와 MP3 파일 만들기 구분하기

TTS는 Text to Speech의 줄임말로, 이미 써 둔 안내문이나 내레이션을 음성으로 만드는 기능입니다. 녹음 속 말을 글로 옮기는 것은 전사이고, 마이크로 말을 주고받는 것은 음성 대화입니다. 음악 작곡도 별도 작업입니다.

예를 들어 “안내문을 MP3로 읽어줘”, “회의 녹음을 글로 옮겨줘”, “마이크로 질문하고 답을 들려줘”는 필요한 결과가 다릅니다. 재생 가능한 MP3 한 개가 필요하다면 실제 오디오 데이터를 생성하고 파일로 저장하는 과정이 있어야 합니다.

OpenAI API에 음성 생성 기능이 있어도 모든 ChatGPT 대화에서 바로 MP3를 첨부할 수 있는 것은 아닙니다. 사용하는 화면에 어떤 실행 도구가 연결돼 있는지 확인해야 합니다. 아래 방법은 내 컴퓨터에서 Python으로 OpenAI API를 호출하는 절차입니다.

글 문서의 내용이 음성 파형과 다운로드 기호가 있는 저장용 오디오 파일 카드로 바뀌는 모습
대본 준비와 실제 오디오 파일 생성은 서로 다른 단계입니다.

2. 준비물: API 결제 설정, API 키, Python

준비할 것은 API를 사용할 수 있는 OpenAI 계정과 프로젝트, API 키, Python 3.10 이상이 설치된 컴퓨터입니다. 이 예제에서는 별도 녹음 파일이나 마이크가 필요하지 않습니다.

  1. OpenAI Platform에 로그인하고 사용할 프로젝트를 선택합니다.
  2. API 결제 설정과 사용 가능한 잔액 또는 사용 한도를 확인합니다. ChatGPT 구독료와 이 글의 API 키 방식으로 발생하는 API 사용료는 별도입니다. ChatGPT Plus나 Pro를 구독했다는 이유만으로 이 코드의 호출이 무료가 되지는 않습니다.
  3. 선택한 프로젝트의 API Keys에서 키를 만듭니다. 프로젝트나 키에 제한이 있다면 Speech API와 해당 모델에 필요한 권한을 확인합니다.
  4. API 키는 비밀정보로 보관합니다. 블로그, GitHub, 화면 캡처, 일반 채팅, 대본에 붙여 넣지 않습니다.

생성 요청은 입력 텍스트를 OpenAI에 전송하며 사용량에 따라 과금됩니다. 처음에는 짧은 두세 문장으로 시험하고 Usage에서 사용량을 확인하세요. 무료 API 이용이 보장되는 예제가 아닙니다. 입력할 권한이 없는 개인정보나 비밀 자료는 대본에서 제외합니다.

새 작업 폴더를 만든 뒤 터미널에서 그 폴더로 이동합니다. Windows PowerShell은 다음 명령으로 가상환경을 만들고 공식 SDK를 설치합니다. 가상환경을 직접 실행하므로 PowerShell 실행 정책을 바꿀 필요가 없습니다.

py -3 --version
py -3 -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade openai

macOS와 Linux는 다음 명령을 사용합니다. 첫 명령에 표시되는 Python 버전이 3.10 이상인지 확인하세요.

python3 --version
python3 -m venv .venv
.venv/bin/python -m pip install --upgrade openai

Python 명령을 찾을 수 없다면 먼저 Python 공식 배포본을 설치해야 합니다. 회사 컴퓨터라면 조직의 설치 기준을 따릅니다. 설치 명령은 프로그램 준비 단계이며, 음성 생성 요청은 다음 절의 Python 파일을 실행할 때 발생합니다.

녹음용 마이크와 헤드폰 앞에 MP3와 WAV라고 표시된 두 음성 파일 카드가 나란히 놓인 모습
출력 형식은 재생하거나 편집할 환경에 맞춰 선택합니다.

3. 한국어 텍스트를 MP3로 저장하는 Python 예제

같은 작업 폴더에 tts_mp3.py 파일을 만들고 아래 코드를 UTF-8로 저장합니다. 파일 이름이 tts_mp3.py.txt가 되지 않도록 확인하세요.
실제 읽을 문장은 script에, 읽는 방식은 instructions에 넣습니다.
말투 요청의 예는 “차분하고 또렷한 한국어로 읽어 주세요.”입니다.

import os
import warnings
from getpass import GetPassWarning, getpass
from pathlib import Path

from openai import OpenAI

script = "안녕하세요. 이것은 OpenAI로 만든 한국어 음성입니다. 마지막 문장까지 확인해 주세요."
output = Path(__file__).resolve().parent / "speech.mp3"

if output.exists():
    raise SystemExit("speech.mp3가 이미 있습니다. 보관한 뒤 출력 파일 이름을 바꾸세요.")

if not os.environ.get("OPENAI_API_KEY"):
    warnings.simplefilter("error", GetPassWarning)
    os.environ["OPENAI_API_KEY"] = getpass("OpenAI API key: ").strip()

if not os.environ.get("OPENAI_API_KEY"):
    raise SystemExit("API 키가 입력되지 않았습니다.")

with OpenAI(max_retries=0) as client:
    with client.audio.speech.with_streaming_response.create(
        model="gpt-4o-mini-tts",
        voice="coral",
        input=script,
        instructions="차분하고 또렷한 한국어로 읽어 주세요.",
        response_format="mp3",
    ) as response:
        response.stream_to_file(output)

if not output.exists() or output.stat().st_size == 0:
    raise SystemExit("저장된 음성 파일을 확인할 수 없습니다.")

print(f"저장 위치: {output}")
print(f"파일 크기: {output.stat().st_size:,} bytes")
print("파일을 열어 처음부터 끝까지 직접 들어 보세요.")

이 코드는 이미 설정된 OPENAI_API_KEY 환경변수가 있으면 사용합니다. 없으면 실행 중인 컴퓨터의 터미널에서 키를 입력받아 해당 Python 프로세스의 환경변수에만 넣습니다. 입력한 키는 화면에 표시되지 않으며 코드 파일이나 디스크에 저장하지 않습니다. 입력을 숨길 수 없는 환경에서는 키를 받기 전에 멈추도록 했습니다. GetPassWarning이 나타나면 일반 터미널에서 실행하세요. 공유 컴퓨터나 공개 노트북 환경에 키를 입력하지 않습니다.
Windows PowerShell에서는 다음 명령으로 실행합니다.

.\.venv\Scripts\python.exe tts_mp3.py

macOS와 Linux에서는 다음 명령을 사용합니다.

.venv/bin/python tts_mp3.py

키를 묻는 경우 터미널에 입력하고 Enter를 누릅니다. 이미 환경변수가 설정돼 있다면 입력을 묻지 않고 API 요청을 보냅니다. 성공하면 tts_mp3.py와 같은 폴더에 speech.mp3가 저장되고, 터미널에 저장 위치와 파일 크기가 출력됩니다. 파일이 이미 있으면 덮어쓰지 않고 멈추도록 했습니다. 다음 음성을 만들 때는 코드의 출력 파일 이름을 speech_02.mp3처럼 바꾸세요.

max_retries=0은 오류가 났을 때 SDK의 자동 재시도를 끄는 설정입니다. 오류나 연결 중단이 보이면 파일과 사용량부터 확인하고 필요한 경우 다시 실행합니다. 이 예제에서 stream_to_file은 받은 오디오를 파일에 저장하는 동작이며, 스피커 자동 재생이나 실시간 음성 대화를 시작하지 않습니다.

4. 대본, 목소리, 형식 바꾸기와 오류 해결

처음에는 예제의 짧은 대본으로 저장 과정을 확인한 뒤 script 값을 원하는 문장으로 바꿉니다. 여러 줄 대본은 따옴표 세 개로 감쌀 수 있습니다. Speech API의 입력 상한은 4,096자이며, 예제 모델에는 2,000 입력 토큰 제한도 있습니다. 한글의 글자 수와 토큰 수는 같지 않으므로 긴 글은 문단별로 나눕니다. 여러 조각을 만들 때는 파일 이름을 각각 다르게 지정하고 순서대로 검수하세요.

voice는 목소리 이름입니다. 예제의 coral을 공식 문서에서 지원하는 marin 또는 cedar 등으로 바꿔 비교할 수 있습니다. instructions는 차분하게, 또렷하게 같은 전달 방식이고 실제 대본과는 분리됩니다. 모델마다 지원 옵션이 다르며, tts-1과 tts-1-hd에는 이 instructions 옵션을 그대로 적용할 수 없습니다.

MP3는 기본 출력 형식입니다. WAV가 필요하면 response_format을 wav로 바꾸고 출력 파일 이름도 speech.wav로 바꿉니다. 파일 확장자만 MP3에서 WAV로 고치는 것은 형식 변환이 아닙니다. 그 밖에 AAC, FLAC, Opus, PCM도 지원되지만 일반적인 첫 결과물은 사용할 재생기나 편집기가 지원하는 MP3 또는 WAV로 확인하면 됩니다.

  • ModuleNotFoundError: openai: SDK를 설치한 가상환경의 Python으로 실행했는지 확인합니다. 위의 .venv 경로를 그대로 사용합니다.
  • 401 또는 AuthenticationError: 키의 오타, 폐기 여부, 프로젝트와 권한을 확인합니다. 도움을 요청할 때도 키 원문은 공유하지 않습니다.
  • 429: 요청 속도 제한인지 잔액 또는 사용 한도 문제인지 오류 내용을 먼저 읽습니다. 속도 제한이면 안내된 대기시간을 따르고, 잔액이나 한도 문제면 결제 설정을 확인합니다. 같은 요청을 반복한다고 잔액 문제가 해결되지는 않습니다.
  • 400 또는 BadRequestError: 모델, 목소리, 옵션 이름과 대본 길이를 확인합니다. 긴 대본은 줄여서 시도합니다.
  • 모델을 찾을 수 없거나 접근할 수 없음: 모델 이름, 프로젝트 접근 권한과 해당 모델의 지원 종료 여부를 확인합니다. Realtime 모델 이름을 Speech API 코드에 임의로 대입하지 않습니다.
  • 연결 오류 또는 시간 초과: 인터넷 연결과 서비스 상태를 확인합니다. 저장 도중 멈췄다면 불완전한 파일이 남을 수 있으므로 성공 메시지와 실제 파일 재생 여부를 함께 확인합니다.

AI에게 작업을 맡길 때는 용도, 최종 대본, 말투, 결과 형식, 검수 항목을 함께 전달하면 좋습니다. 예를 들면 “아래 안내문을 차분한 한국어 음성으로 만들어 주세요. 실행 가능한 도구와 예상 비용을 먼저 확인하고, 생성하면 내려받을 수 있는 MP3 파일로 제공해 주세요. 이름, 숫자와 마지막 문장이 빠지지 않았는지도 확인해 주세요.”라고 요청할 수 있습니다. 이 문장만 입력했다고 모든 채팅에서 음성이 생성되는 것은 아니므로, 실제 파일이 전달됐는지 확인합니다.

스피커 옆의 AI 음성 안내 표지를 확인하며 소리를 듣는 성인의 모습
AI로 만든 음성이라는 사실을 청자가 알 수 있게 안내합니다.

5. 파일 재생, 청취 검수, AI 음성 고지

터미널에 출력된 저장 위치를 열고 speech.mp3를 더블클릭해 재생합니다. 자동으로 연결된 앱이 없다면 운영체제의 미디어 재생기에서 파일을 여세요. 파일 크기가 0보다 크다는 확인만으로 음성이 정상이라는 뜻은 아닙니다. 처음부터 끝까지 직접 들어 봐야 합니다.

  1. 대본의 첫 문장과 마지막 문장이 모두 들리는지 확인합니다.
  2. 이름, 외래어, 숫자, 단위와 부정 표현이 정확한지 확인합니다.
  3. 중간에 소리가 끊기거나 반복되는 곳이 없는지 확인합니다.
  4. 실제로 사용할 영상 편집기나 재생 환경에서 파일이 열리는지 확인합니다.
  5. 공개할 음성에는 AI로 생성했다는 사실을 청자가 알아볼 수 있게 안내합니다.

한국어 입력은 지원되지만 목소리는 영어에 최적화돼 있다고 안내돼 있습니다. 발음이 중요한 이름과 숫자는 짧은 구간으로 먼저 확인하고 대본 표기를 조정합니다. 모든 결과의 발음이나 길이가 같다고 보장할 수는 없습니다.

OpenAI는 생성 음성이 AI 음성이라는 사실을 청자에게 명확히 알리도록 요구합니다. 영상 설명이나 재생 화면 등에 “이 안내 음성은 AI로 생성했습니다”처럼 표시할 수 있습니다. 사람이 직접 녹음한 음성이라고 오해할 설명은 피합니다.

정리하면, API 이용 준비를 마친 뒤 대본을 넣고 코드를 실행해 MP3를 저장하고, 실제 파일을 끝까지 재생해 확인하는 순서입니다. 대본이나 프롬프트만 받은 단계와 재생 가능한 파일이 완성된 단계를 구분하면 어디까지 끝났는지 분명하게 알 수 있습니다.

반응형

댓글


TOP

jaehyen11@naver.com(광고문의)