Split View: 음성 모델 고르기: STT와 TTS의 실전 기준
음성 모델 고르기: STT와 TTS의 실전 기준
- 음성은 요구사항이 모델보다 먼저 정해집니다
- STT: 다국어가 필요한 경우
- STT: 영어에서 속도와 길이가 필요한 경우
- 실시간이라는 말을 정확히 쪼개기
- 화자 분리는 별도의 모델입니다
- TTS: 목소리를 어디서 가져오는가
- 음성 모델의 경고는 장식이 아닙니다
- 코드 예시
- 고를 때의 순서
- 직접 해보기
- 시리즈 안내
- 참고 자료
모델 정보는 2026-08-12에 Hugging Face 페이지에서 직접 확인했습니다. 모델 카드와 라이선스는 바뀔 수 있으니 사용 전 원본을 다시 확인하세요.
음성은 요구사항이 모델보다 먼저 정해집니다
텍스트 모델은 일단 붙여 보고 품질을 비교할 수 있지만 음성은 그렇게 되지 않습니다. 어떤 언어를 받는지, 오디오가 얼마나 긴지, 결과가 몇 초 안에 나와야 하는지, 화자를 구분해야 하는지가 먼저 정해지고 나면 후보가 대부분 저절로 걸러집니다.
그래서 이 글은 모델을 나열하기 전에 그 네 가지 축부터 정리합니다. 카드가 제공하는 값 대부분이 이 축에 직접 대응하기 때문입니다.
STT: 다국어가 필요한 경우
| 저장소 | license | 크기 | 언어 | 카드에 적힌 제약 |
|---|---|---|---|---|
openai/whisper-large-v3 | apache-2.0 | 1550M | 99개 언어 | 30초 수용 영역, 긴 오디오는 순차 또는 청크 알고리즘 필요 |
openai/whisper-large-v3-turbo | mit | 809M | 99개 언어 | 디코딩 층이 32에서 4로 감소, 기본 상태로 실시간 전사용은 아님 |
nvidia/canary-1b-flash | cc-by-4.0 | 883M | 영어, 독일어, 프랑스어, 스페인어 | 40초 미만 오디오를 대상으로 설계, 타임스탬프는 실험적 기능 |
두 Whisper 변형의 라이선스 표기가 서로 다르다는 점을 놓치기 쉽습니다. openai/whisper-large-v3은 apache-2.0, openai/whisper-large-v3-turbo는 mit으로 표기됩니다. 같은 계열이라고 같은 조건이 아닙니다.
openai/whisper-large-v3-turbo 카드는 훨씬 빠른 대신 품질이 약간 떨어진다고 직접 적습니다. 어느 쪽을 고를지는 오탈자 하나가 어떤 비용을 만드는지에 달려 있습니다. 자막 초안이라면 속도가, 의료 기록이나 법적 근거라면 정확도가 우선입니다.
nvidia/canary-1b-flash는 영어와 독일어·프랑스어·스페인어 사이의 번역을 양방향으로 지원한다고 적습니다. 다만 40초 미만 오디오를 대상으로 설계되었고, 특수문자를 처리하지 않으며 역정규화가 필요할 수 있다고 카드가 밝힙니다.
STT: 영어에서 속도와 길이가 필요한 경우
nvidia/parakeet-tdt-0.6b-v2는 cc-by-4.0에 6억 파라미터이고, FastConformer 인코더와 TDT 디코더 구조라고 적혀 있습니다. 이 모델의 실무적 강점은 카드가 명시한 두 가지입니다. 한 번에 최대 24분 길이의 오디오 구간을 전사할 수 있고, 문자·단어·구간 단위 타임스탬프를 지원한다는 점입니다.
대신 언어는 영어 하나입니다. 그리고 NVIDIA NeMo 설치가 필요하다고 카드가 적습니다. 파이프라인이 transformers만으로 구성되어 있다면 런타임 하나를 더 들이는 결정이 됩니다. 카드는 전사가 100퍼센트 정확하지는 않으며 언어와 입력 오디오 특성에 따라 정확도가 달라진다고도 밝힙니다.
실시간이라는 말을 정확히 쪼개기
실시간이 필요하다는 요구는 대개 세 가지 중 하나입니다. 발화가 끝나기 전에 중간 결과가 보여야 하거나, 발화가 끝난 뒤 1초 안에 최종 결과가 나와야 하거나, 회의가 끝난 뒤 몇 분 안에 전체 결과가 나오면 되는 경우입니다.
Whisper 계열은 세 번째에 가장 잘 맞습니다. openai/whisper-large-v3 카드는 30초 수용 영역을 명시하고 긴 오디오에는 순차 또는 청크 알고리즘이 필요하다고 적으며, openai/whisper-large-v3-turbo 카드는 기본 상태로 실시간 전사를 위해 설계된 것은 아니라고 직접 적습니다. 첫 번째 요구가 진짜라면 모델 선택보다 스트리밍 구조 설계가 먼저입니다.
배포 형식도 지연에 영향을 줍니다. Systran/faster-whisper-large-v3은 openai/whisper-large-v3을 ct2-transformers-converter로 CTranslate2 형식으로 변환한 저장소이고, 가중치는 FP16으로 저장되어 있으며 CTranslate2의 compute_type 옵션으로 바꿀 수 있다고 적혀 있습니다. 같은 모델이라도 런타임이 다르면 지연 특성이 달라진다는 뜻입니다.
화자 분리는 별도의 모델입니다
회의록을 만든다면 받아쓰기만으로는 절반입니다. 누가 말했는지를 나누는 것은 다른 모델의 일입니다.
pyannote/speaker-diarization-3.1은 mit으로 표기되고, 16kHz 모노를 전제로 하며 스테레오나 다채널은 평균을 내어 자동으로 모노로 합치고 다른 샘플링 레이트는 자동으로 16kHz로 재변환한다고 적혀 있습니다. 화자 수는 num_speakers, min_speakers, max_speakers 옵션으로 조절할 수 있습니다.
이 저장소는 접근 조건에 동의하고 연락처를 공유해야 파일을 받을 수 있습니다. 자동 배포 파이프라인을 짜기 전에 확인해야 하는 항목입니다.
TTS: 목소리를 어디서 가져오는가
| 저장소 | license | 크기 | 언어 | 카드에 적힌 특징 |
|---|---|---|---|---|
hexgrad/Kokoro-82M | apache-2.0 | 82M | 8개 언어, 54개 음성 | StyleTTS 2 구조에 ISTFTNet 보코더, 디코더만 공개 |
coqui/XTTS-v2 | coqui-public-model-license | 명시되어 있지 않음 | 17개 언어, 한국어 포함 | 6초 오디오로 음성 복제, 교차 언어 복제 |
SWivid/F5-TTS | cc-by-nc-4.0 | 명시되어 있지 않음 | 페이지에 명시되어 있지 않음 | 학습 데이터로 Emilia 데이터셋을 표기 |
microsoft/speecht5_tts | mit | 명시되어 있지 않음 | 페이지에 명시되어 있지 않음 | 화자 x-vector 임베딩과 별도 보코더 필요 |
TTS를 고를 때 첫 질문은 목소리를 어디서 가져오느냐입니다. hexgrad/Kokoro-82M처럼 미리 준비된 음성 목록에서 고르는 방식이라면 결정이 단순합니다. coqui/XTTS-v2처럼 6초짜리 참조 오디오로 복제하는 방식이라면, 그 6초를 어떻게 확보했고 그 화자가 동의했는지가 기술 문제보다 먼저 걸립니다.
microsoft/speecht5_tts는 구조 자체가 조립식입니다. 카드가 화자 x-vector 임베딩을 넣어야 하고 microsoft/speecht5_hifigan 보코더를 함께 불러와야 한다고 적습니다. 저장소 하나를 붙이면 끝나는 형태가 아니라는 뜻이고, 지원 언어를 포함해 편향·위험·한계·평가 데이터 항목이 카드에서 More Information Needed로 남아 있습니다.
SWivid/F5-TTS는 페이지에 지원 언어와 기능 설명이 명시되어 있지 않습니다. 이 글은 그 빈칸을 기억으로 채우지 않았습니다. 실제로 쓰려면 연결된 코드 저장소와 논문을 직접 확인해야 합니다.
음성 모델의 경고는 장식이 아닙니다
음성은 다른 어떤 모달리티보다 카드의 경고가 곧 설계 제약이 되는 영역입니다.
openai/whisper-large-v3 카드는 예측에 실제로 말해지지 않은 문장이 포함될 수 있다고 명시하고, 반복적인 텍스트를 생성하는 경향과 언어별로 성능이 고르지 않다는 점을 함께 적습니다. 같은 카드는 동의 없이 녹음된 음성을 전사하지 말라고 하고, 의사결정 같은 고위험 영역에 배치하지 말라고 씁니다. openai/whisper-large-v3-turbo 카드도 억양과 방언에 따라 성능이 달라진다는 점을 덧붙입니다.
이 문장들은 그대로 요구사항이 됩니다. 환각 가능성이 명시된 모델의 출력을 사람 검토 없이 확정 기록으로 삼으면 안 되고, 녹취 동의 절차가 없는 서비스는 모델 선택 이전에 설계가 잘못된 것입니다. hexgrad/Kokoro-82M 카드가 허용된 비저작권 오디오만으로 학습했다고 밝히고 이 모델을 사칭하는 가짜 사이트를 경고하는 것도 같은 맥락입니다.
코드 예시
# 예시: 긴 오디오를 청크 방식으로 전사합니다
from transformers import pipeline
asr = pipeline(
"automatic-speech-recognition",
model="openai/whisper-large-v3-turbo",
chunk_length_s=30,
return_timestamps=True,
)
result = asr("meeting.wav", generate_kwargs={"language": "korean"})
for chunk in result["chunks"][:3]:
print(chunk["timestamp"], chunk["text"])
화자 분리는 별도 파이프라인으로 붙여 결과를 시간축에서 합칩니다.
# 예시: 화자 구간을 얻어 전사 결과와 시간축에서 맞춥니다
from pyannote.audio import Pipeline
diarizer = Pipeline.from_pretrained(
"pyannote/speaker-diarization-3.1",
use_auth_token="hf_...",
)
for turn, _, speaker in diarizer("meeting.wav").itertracks(yield_label=True):
print(f"{turn.start:.1f}-{turn.end:.1f}", speaker)
고를 때의 순서
- 대상 언어를 확정합니다. 영어 단일이면 후보가 크게 달라집니다.
- 오디오 길이 분포를 봅니다. 카드에 적힌 수용 영역과 권장 길이를 넘는지 확인합니다.
- 실시간 요구를 세 가지 중 어느 것인지로 다시 씁니다.
- 화자 분리가 필요하면 별도 모델과 게이트 조건을 함께 계획합니다.
- 음성 복제를 쓴다면 동의와 권리 확인 절차를 기술 결정보다 앞에 둡니다.
- 카드의 환각·편향 경고를 그대로 사람 검토 절차 요구사항으로 옮겨 적습니다.
직접 해보기
- 브라우저 AI 실험실 — 작은 음성 모델을 브라우저에서 돌려 지연을 체감합니다.
- AI 벤치마크 모음 — 음성 인식 평가 지표가 무엇을 재는지 확인합니다.
- LLM GPU 메모리(VRAM) 계산기 — 음성 모델과 언어 모델을 같은 장비에 함께 올릴 때 용량을 계산합니다.
시리즈 안내
- 이전 글: 한국어를 지원하는 오픈 모델과 토크나이저 비용
- 다음 글: 비전과 멀티모달: 이미지 이해, OCR, VLM
참고 자료
- 표의 모든 값은 2026-08-12에 해당 모델의 Hugging Face 페이지에서 직접 읽었습니다. 페이지에 없던 항목은 명시되어 있지 않음으로 적었습니다.
SWivid/F5-TTS의 지원 언어와 기능은 페이지에 명시되어 있지 않아 이 글에 적지 않았습니다.- 라이선스 전문을 직접 읽고, 상업적 사용은 법무 검토를 거치세요.
Choosing Speech Models: Practical Criteria for STT and TTS
- In Speech, Requirements Come Before Models
- STT: When You Need Multiple Languages
- STT: When English Needs Speed and Length
- Decomposing the Word Real-Time
- Diarization Is a Separate Model
- TTS: Where Does the Voice Come From
- The Warnings on Speech Cards Are Not Decoration
- Code Examples
- The Order to Decide In
- Try It Yourself
- Series Navigation
- References
Model details were read directly from the Hugging Face pages on 2026-08-12. Model cards and licenses change, so check the original again before you use anything.
In Speech, Requirements Come Before Models
With text models you can wire something up and compare quality afterwards. Speech does not work that way. Once you fix which languages come in, how long the audio runs, how many seconds you have before a result is needed, and whether speakers must be separated, most candidates fall away on their own.
So this post sorts out those four axes before listing models, because most of the values a card provides map directly onto them.
STT: When You Need Multiple Languages
| Repository | license | Size | Languages | Constraints as stated |
|---|---|---|---|---|
openai/whisper-large-v3 | apache-2.0 | 1550M | 99 languages | 30-second receptive field; long audio needs sequential or chunked algorithms |
openai/whisper-large-v3-turbo | mit | 809M | 99 languages | Decoding layers reduced from 32 to 4; not designed for real-time transcription out of the box |
nvidia/canary-1b-flash | cc-by-4.0 | 883M | English, German, French, Spanish | Designed for audio smaller than 40 seconds; timestamps are an experimental feature |
It is easy to miss that the two Whisper variants carry different license tags. openai/whisper-large-v3 is marked apache-2.0 and openai/whisper-large-v3-turbo is marked mit. Same family does not mean same terms.
The openai/whisper-large-v3-turbo card states plainly that the model is way faster at the expense of a minor quality degradation. Which side you take depends on what a single misheard word costs. For a subtitle draft, speed; for a medical record or legal evidence, accuracy.
nvidia/canary-1b-flash states it supports translation between English and German, French, or Spanish in both directions. But the card also states it is designed for audio smaller than 40 seconds, that it does not handle special characters, and that it may need inverse text normalization.
STT: When English Needs Speed and Length
nvidia/parakeet-tdt-0.6b-v2 is cc-by-4.0 with 600 million parameters, described as a FastConformer encoder with a TDT decoder. Its practical strengths are the two things the card names: efficient transcription of audio segments up to 24 minutes in a single pass, and timestamp support at char, word, and segment level.
The trade is that the language is English only. And the card states that NVIDIA NeMo is required. If your pipeline is built purely on transformers, this is a decision to take on one more runtime. The card also states that transcripts may not be 100 percent accurate and that accuracy varies with language and the characteristics of the input audio.
Decomposing the Word Real-Time
A request for real-time is usually one of three things: partial results must appear before the utterance ends, a final result must arrive within a second after it ends, or the full result must be ready a few minutes after the meeting is over.
The Whisper family fits the third best. The openai/whisper-large-v3 card states a 30-second receptive field and that longer audio requires sequential or chunked algorithms, while the openai/whisper-large-v3-turbo card states outright that it is not designed for real-time transcription out of the box. If the first requirement is genuine, designing the streaming architecture comes before choosing a model.
Distribution format affects latency too. Systran/faster-whisper-large-v3 is a repository converting openai/whisper-large-v3 into the CTranslate2 format with ct2-transformers-converter, with weights saved in FP16 and the note that this can be changed with the CTranslate2 compute_type option. The same model under a different runtime has different latency behavior.
Diarization Is a Separate Model
If you are producing meeting minutes, transcription is only half of it. Splitting who spoke is a different model's job.
pyannote/speaker-diarization-3.1 is marked mit, assumes 16kHz mono, and states that stereo or multi-channel files are automatically downmixed to mono by averaging channels and that other sample rates are automatically resampled to 16kHz. Speaker counts can be steered with the num_speakers, min_speakers, and max_speakers options.
This repository requires accepting the access conditions and sharing contact information before files can be retrieved. That is something to confirm before you write an automated deployment pipeline.
TTS: Where Does the Voice Come From
| Repository | license | Size | Languages | Characteristics as stated |
|---|---|---|---|---|
hexgrad/Kokoro-82M | apache-2.0 | 82M | 8 languages, 54 voices | StyleTTS 2 architecture with an ISTFTNet vocoder; decoder only |
coqui/XTTS-v2 | coqui-public-model-license | Not stated | 17 languages including Korean | Voice cloning from a 6-second clip; cross-language cloning |
SWivid/F5-TTS | cc-by-nc-4.0 | Not stated | Not stated on the page | Lists the Emilia dataset as training data |
microsoft/speecht5_tts | mit | Not stated | Not stated on the page | Requires speaker x-vector embeddings and a separate vocoder |
The first question in picking a TTS model is where the voice comes from. If you choose from a prepared voice list, as with hexgrad/Kokoro-82M, the decision is simple. If you clone from a 6-second reference clip, as coqui/XTTS-v2 supports, then how you obtained those six seconds and whether that speaker consented becomes a blocker well before any technical question.
microsoft/speecht5_tts is assembled rather than dropped in. The card states you must supply speaker x-vector embeddings and load the microsoft/speecht5_hifigan vocoder alongside it. It is not a one-repository integration, and its supported languages along with bias, risks, limitations, and evaluation data remain More Information Needed on the card.
The SWivid/F5-TTS page does not state supported languages or a capability description. This post did not fill those blanks from memory. To actually use it you have to check the linked code repository and paper yourself.
The Warnings on Speech Cards Are Not Decoration
Speech is the modality where a card warning turns into a design constraint more directly than anywhere else.
The openai/whisper-large-v3 card states that predictions may include text not actually spoken in the audio, along with a tendency to generate repetitive text and uneven performance across languages. The same card says not to transcribe recordings taken without consent, and warns against deployment in high-risk decision-making contexts. The openai/whisper-large-v3-turbo card adds disparate performance across accents and dialects.
Those sentences become requirements verbatim. Output from a model with a documented hallucination risk must not become a finalized record without human review, and a service with no recording-consent procedure has a design problem that precedes model selection. The hexgrad/Kokoro-82M card stating that it was trained exclusively on permissive and non-copyrighted audio, and warning about fake sites impersonating it, belongs to the same category.
Code Examples
# Example: transcribe long audio using the chunked approach
from transformers import pipeline
asr = pipeline(
"automatic-speech-recognition",
model="openai/whisper-large-v3-turbo",
chunk_length_s=30,
return_timestamps=True,
)
result = asr("meeting.wav", generate_kwargs={"language": "korean"})
for chunk in result["chunks"][:3]:
print(chunk["timestamp"], chunk["text"])
Diarization is attached as a separate pipeline and merged on the time axis.
# Example: get speaker turns and align them with the transcript in time
from pyannote.audio import Pipeline
diarizer = Pipeline.from_pretrained(
"pyannote/speaker-diarization-3.1",
use_auth_token="hf_...",
)
for turn, _, speaker in diarizer("meeting.wav").itertracks(yield_label=True):
print(f"{turn.start:.1f}-{turn.end:.1f}", speaker)
The Order to Decide In
- Fix your target languages. English-only changes the candidate set dramatically.
- Look at the distribution of audio lengths and check it against the receptive field and recommended length on the card.
- Rewrite the real-time requirement as one of the three concrete cases.
- If diarization is needed, plan the separate model and its gating conditions together.
- If you use voice cloning, put consent and rights verification ahead of the technical decision.
- Copy the hallucination and bias warnings from the card directly into your human-review requirements.
Try It Yourself
- Browser AI Lab — run a small speech model in the browser and feel the latency.
- AI Benchmark Collection — check what speech recognition metrics actually measure.
- GPU VRAM Calculator for LLMs — size the memory when a speech model and a language model share one machine.
Series Navigation
- Previous: Open Models That Support Korean, and the Cost of Tokenization
- Next: Vision and Multimodal: Image Understanding, OCR, and VLMs
References
- Every value in the tables was read directly from that model page on Hugging Face on 2026-08-12. Anything absent from the page is written as not stated.
- The supported languages and capabilities of
SWivid/F5-TTSare not stated on its page, so they are not written here. - Read the full license text yourself and put commercial use through legal review.