지난 포스팅에서는 OpenAI(ChatGPT), Anthropic(Claude), Google(Gemini), xAI(Grok) 등 주요 AI 챗봇 플랫폼에서 음성 파일을 직접 업로드해 텍스트로 변환(STT) 할 수 있는지 테스트해 보았습니다.
이번 글에서는 그 연장선으로, 실제 애플리케이션에 적용하기 위해 API를 사용해 음성 파일을 텍스트로 변환하는 방법을 파이썬 코드 예제와 함께 소개하겠습니다.
✔️ 대상 모델
- OpenAI – 멀티모달 모델 기반 STT - gpt-4o-transcribe
- Google – Gemini 멀티모달 모델 - gemini-3-flash-preview
xAI Grok과 Anthropic Claude는 현재 STT를 지원하는 공개 API가 없습니다.
✔️ 음성 파일
지난 포스팅과 동일한 음성 파일을 사용합니다.
- 갤럭시 폰에서 녹음한 음성 파일
- 파일 형식: .m4a - 필요한 경우 .wav로 변환하여 사용
- 파일명:
stt_test.m4a
음성 파일 내용
안녕하세요. 저는 인공지능 음성 인식 기능을 테스트하고 있습니다.
오늘 날씨는 조금 춥지만 하늘은 맑습니다.
뜬금없지만 제 전화번호는 010-1234-5678입니다.
테스트 문장에는 숫자, 날짜, 그리고 일상적인 표현이 포함되어 있습니다.
이 음성이 얼마나 정확하게 텍스트로 변환되는지 확인해보겠습니다. 감사합니다.
사전 준비
✔️ OpenAI와 Google Gemini의 API 키를 발급받아야 합니다.
- OpenAI의 API 키 발급 : https://platform.openai.com/api-keys
- Gemini API 키 발급 : https://aistudio.google.com/
✔️ 패키지 설치
pip install openai # OpenAI 패키지 설치
pip install -U google-genai # Google Gemini 패키지 설치
pip install python-dotenv # dotenv 패키지 설치 (환경변수 관리를 위해)
✔️ 환경변수 설정
프로젝트 디렉토리에 .env 파일을 생성하고 API 키를 저장합니다.
OPENAI_API_KEY="your_openai_api_key_here"
GEMINI_API_KEY="your_gemini_api_key_here"
✔️ 음성 파일 준비
음성 파일(stt_test.m4a)을 프로젝트 디렉토리에 저장합니다. 파일 형식이 '.m4a'가 아니어도 됩니다. 저는 제 환경에서 음성 녹음이 쉽고 용량이 작은 .m4a 파일을 사용했습니다.
OpenAI 멀티모달 모델 - gpt-4o-transcribe
OpenAI는 멀티모달을 기반으로 한 전용 STT API를 제공합니다. 최근 gpt-4o-transcribe (또는 더 저렴한 gpt-4o-mini-transcribe)가 Whisper 대비 한국어 포함 다국어 정확도가 크게 향상되었습니다.
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv() # 현재 프로젝트의 .env 파일을 읽어서 환경 변수로 등록
client = OpenAI() # OpenAI 클라이언트 생성
audio_file = open("stt_test.m4a", "rb") # 음성 파일을 바이너리 모드(rb)로 오픈
# OpenAI의 음성 -> 텍스트 변환(STT) API 호출
transcript = client.audio.transcriptions.create(
model="gpt-4o-transcribe", # 음성 인식 전용 모델 지정
file=audio_file # 업로드할 음성 파일
)
print(transcript.text) # 변환된 텍스트 출력
실행 결과 예시
안녕하세요. 저는 인공지능 음성 인식 기능을 테스트하고 있습니다. 오늘 날씨는 조금 춥지만 하늘은 맑습니다. 뜬금없지만 제 전화번호는 010-1234-5678입니다. 테스트 문장에는 숫자, 날짜 그리고 일상적인 표현이 포함되어 있습니다. 이 음성이 얼마나 정확하게 텍스트로 변환되는지 확인해 보겠습니다. 감사합니다.
- OpenAI의 멀티모달 기반의 전용 STT 모델은 한국어 음성 인식 정확도가 매우 우수하였습니다.
오류 예시
'gpt-4o-transcribe'의 모델을 사용하여 실무 적용에서 오류가 발생한 상황을 공유합니다.
아래는 오류 파일 정보입니다.
- 파일명: 'ooooo.m4a'
- 파일 확장자: '.m4a'
- 파일 용량: 16.2MB
- 길이: '00:33:07'
위의 파일을 사용하여 STT를 시도했으나 아래와 같은 오류가 발생하였습니다.
openai.BadRequestError: Error code: 400 - {'error': {'message': 'audio duration 1987.477333 seconds is longer than 1400 seconds which is the maximum for this model', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_value'}}
해당 모델의 최대 음성 길이 제한(1400초, 약 23분)을 초과하여 발생한 오류입니다.
✔️ 해결 방법
음성 파일을 23분 이내로 분할하여 여러 개의 파일로 나눈후 각각을 STT를 처리하면 됩니다.
참고로 아래의 'gemini-3-flash-preview'는 해당 파일을 문제없이 처리하였습니다.
OpenAI의 'gpt-4o-transcribe'는 multimodal을 기반으로 한 전용 STT 모델입니다.
Google의 'gemini-3-flash-preview'는 multimodal 모델입니다.
2개의 모델은 확실한 차이가 있습니다.
'gemini-3-flash-preview'을 살펴본 후 다시 비교해 보겠습니다.
Google Gemini 멀티모달 모델 - gemini-3-flash-preview
Google은 'Cloud Speech-to-Text'와 같은 전통적인 전용 STT API가 있지만 Gemini 멀티모달 모델에서도 음성 파일을 텍스트로 변환할 수 있습니다.
- 'Cloud Speech-to-Text'는 설정이 Gemini API보다 복잡합니다.
- 최신 모델인 'gemini-3-flash-preview'를 사용하여 음성 파일을 텍스트로 변환하는 방법을 소개합니다.
from dotenv import load_dotenv
from google import genai
load_dotenv() # 현재 프로젝트의 .env 파일을 읽어서 환경 변수로 등록
client = genai.Client() # Gemini 클라이언트 생성
audio_file_path = "stt_test.m4a" # 음성 파일 경로 지정
# 음성 파일을 열어서 Gemini 멀티모달 모델에 전달하고 STT 요청
with open(audio_file_path, "rb") as f:
response = client.models.generate_content(
model="gemini-3-flash-preview", # 최신 프리뷰 모델사용 - 다른 모델 "gemini-2.5-flash"
contents=[
"음성 파일을 텍스트로 변환해 주세요. 음성 내용의 텍스트만 반환해 주세요.", # STT 요청 프롬프트
{
"inline_data": {
"data": f.read(), # 음성 파일 바이너리 데이터
"mime_type": "audio/mpeg" # 음성 파일 타입 지정 (m4a/mp3 등)
}
}
]
)
print(response.text) # 변환된 텍스트 출력
실행 결과 예시
안녕하세요.
저는 인공지능 음성 인식 기능을 테스트하고 있습니다.
오늘 날씨는 조금 춥지만 하늘은 맑습니다.
뜬금없지만 제 전화번호는 010-1234-5678입니다.
테스트 문장에는 숫자, 날짜, 그리고 일상적인 표현이 포함되어 있습니다.
이 음성이 얼마나 정확하게 텍스트로 변환되는지 확인해 보겠습니다.
감사합니다.
- Google Gemini 멀티모달 모델의 STT 정확도도 매우 우수하였습니다.
비교하며
OpenAI의 'gpt-4o-transcribe'와 Google의 'gemini-3-flash-preview' 모델을 비교해 보겠습니다.
✔️ OpenAI의 'gpt-4o-transcribe'
- multimodal('gpt-40')을 기반으로 하였지만 전용 STT모델입니다.
- 프롬프트 없이 음성 파일의 텍스틑를 추출합니다.
- 23분(1400초) 이상의 음성 파일은 처리할 수 없습니다.
✔️ Google의 'gemini-3-flash-preview'
- multimodal('gemini-3') 모델입니다. STT 전용 모델이 아닙니다. 멀티모달을 STT에 활용하는 방식입니다.
- 텍스트 추출을 요청하는 프롬프트가 필요합니다.
- 음성 파일 길이 제한이 상대적으로 관대합니다. (실제 테스트한 33분 파일도 문제없이 처리되었습니다.)
'인공지능 > STT' 카테고리의 다른 글
| 음성파일을 텍스트로 변환하기 - AI 챗봇 플랫폼 (1) | 2026.01.20 |
|---|