인공지능/STT

음성파일을 텍스트로 변환하기 - 멀티모달 API

다시 개발 2026. 1. 21. 20:20

지난 포스팅에서는 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 키를 발급받아야 합니다.

✔️ 패키지 설치

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