# Whisper STT 비용 분석 리포트

**작성일**: 2026-03-03
**작성자**: 불칸 (백엔드 엔지니어)
**프로젝트**: InsuWiki — 보험 유튜브 채널 크롤링 시스템

---

## 배경 및 목적

인스킹 채널은 자막이 없는 영상이 많아 YouTube 자막 API만으로는 텍스트 추출이 불가능하다. 이에 STT(Speech-to-Text) 솔루션 도입을 검토하며, 비용·정확도·Cloud Functions 환경 제약을 종합적으로 비교한다.

### 크롤링 환경 요약

| 항목 | 내용 |
|------|------|
| 채널 | 보험명의정닥터, 인스킹 (2개) |
| 크롤링 주기 | 6시간마다 자동 실행 |
| 신규 영상 | 주 3~5개 (양 채널 합산) |
| 영상 평균 길이 | 10~60분 (평균 약 30분으로 가정) |
| Cloud Functions | asia-northeast3, 타임아웃 540초, 메모리 1GiB |

---

## 1. 옵션별 비용 분석

### 1-1. OpenAI Whisper API / GPT-4o Transcribe

**가격 (2026년 3월 기준)**

| 모델 | 분당 비용 | 시간당 비용 | WER |
|------|-----------|-------------|-----|
| Whisper (legacy) | $0.006 | $0.36 | ~10.6% |
| GPT-4o Transcribe | $0.006 | $0.36 | ~8.9% |
| GPT-4o Mini Transcribe | $0.003 | $0.18 | ~13.2% |

- 과금 단위: 1초 단위, 최소 과금 없음
- 볼륨 할인 없음 (flat-rate)
- 한국어 지원: 공식 지원, CER(Character Error Rate) 기준 평가

**1시간 영상 기준 비용 계산**

```
Whisper / GPT-4o Transcribe: 60분 × $0.006 = $0.36
GPT-4o Mini Transcribe:      60분 × $0.003 = $0.18
```

**처리 속도**: API 호출 → 비동기 처리, 실시간보다 빠름 (일반적으로 10~30초 내 응답)

---

### 1-2. 자체 호스팅 — whisper.cpp / faster-whisper (CPU 기준)

Cloud Functions 환경(1GiB RAM, vCPU 1~2코어)에서 GPU 없이 CPU만 사용하는 경우.

**CPU 처리 속도 벤치마크**

| 모델 | CPU 환경 | 실시간 배율 | 30분 영상 처리 시간 |
|------|----------|-------------|---------------------|
| whisper.cpp tiny | 2~4 vCPU | ~4x realtime | ~7~8분 |
| whisper.cpp small | 2~4 vCPU | ~1.5x realtime | ~20분 |
| whisper.cpp medium | 2~4 vCPU | ~0.5x realtime | ~60분 |
| faster-whisper medium | 8 vCPU, 16GB | ~3x realtime | ~10분 |
| faster-whisper large-v3 | 2 vCPU (Cloud Fn) | ~0.3x realtime | **>100분** |

> 참고: faster-whisper는 8코어 16GB 환경 기준 medium 모델로 약 3배 실시간 처리 속도를 보임. Cloud Functions 1GiB / 2vCPU 환경에서는 large 모델 실행 자체가 메모리 부족으로 불가능할 수 있음 (large-v3 모델 크기: ~3GB).

**Cloud Functions 환경 제약 분석**

```
타임아웃:    540초 (9분)
메모리:      1GiB
모델 크기:   tiny ~75MB, small ~244MB, medium ~769MB, large-v3 ~3GB

30분 영상 처리 시간 (medium, Cloud Fn 환경):
  → 예상 60분 이상 → 타임아웃 초과 (540초)

결론: Cloud Functions에서 self-hosting Whisper는 medium 이상 모델은 사실상 불가능.
      tiny/small 모델은 처리 가능하나 한국어 정확도 크게 저하.
```

**서버 비용 (Cloud Run 별도 인스턴스 가동 시)**

- Cloud Run (2 vCPU, 2GiB): 약 $0.000024/vCPU·초, $0.0000025/GiB·초
- 30분 영상 처리에 ~60분 소요 시: 2 vCPU × 3600초 × $0.000024 = **~$0.17**
- 모델: small 기준, large는 처리 불가

> 실질적으로 자체 호스팅 CPU 방식은 InsuWiki 환경에서 실현 불가능에 가깝다.

---

### 1-3. Google Cloud Speech-to-Text (Chirp 3)

**가격 (2026년 기준)**

| 모델 | 분당 비용 | 시간당 비용 |
|------|-----------|-------------|
| Standard | $0.024 | $1.44 |
| Enhanced (Chirp 3) | $0.036 | $2.16 |
| 데이터 로깅 거부 옵션 | +40% 추가 | — |
| 무료 tier | 월 60분 무료 | — |

- 한국어 지원: Chirp 3에서 공식 지원 (85+ 언어)
- 한국어 정확도: 일반적으로 우수하나 금융/보험 전문용어에는 별도 adaptation 필요
- Dynamic batch 사용 시 추가 할인 가능

**1시간 영상 기준 비용**

```
Standard:  60분 × $0.024 = $1.44
Enhanced:  60분 × $0.036 = $2.16
```

OpenAI Whisper 대비 4~6배 비싸다.

---

### 1-4. YouTube 자막 API (현재 방식)

**비용**: 무료

| API 메서드 | 쿼터 비용 |
|------------|-----------|
| captions.list | 50 유닛 |
| captions.download | 200 유닛 |
| 일일 기본 쿼터 | 10,000 유닛 |

**일일 처리 가능 영상 수 (자막 다운로드 기준)**

```
10,000 유닛 ÷ 200 유닛 = 하루 최대 50편 자막 다운로드
```

- 주 3~5편 신규 영상 기준으로 쿼터는 전혀 문제 없음
- **단, 인스킹 채널처럼 자막이 없는 영상에는 적용 불가**

---

## 2. 비교 매트릭스

| 항목 | YouTube 자막 API | OpenAI Whisper API | GPT-4o Mini Transcribe | Google Cloud STT | Self-hosting CPU |
|------|------------------|--------------------|------------------------|------------------|------------------|
| **분당 비용** | 무료 | $0.006 | $0.003 | $0.024~$0.036 | ~$0.003~$0.005 |
| **시간당 비용** | 무료 | $0.36 | $0.18 | $1.44~$2.16 | ~$0.17 (Cloud Run) |
| **한국어 정확도** | 원본 자막 | 높음 (large-v3) | 중간~높음 | 높음 (Chirp 3) | tiny: 낮음, small: 중간 |
| **처리 속도** | 즉시 | 빠름 (<30초/30분 영상) | 빠름 | 빠름 | 매우 느림 (CPU) |
| **Cloud Fn 호환성** | 완벽 | 완벽 (API 호출) | 완벽 (API 호출) | 완벽 (API 호출) | **불가** (타임아웃) |
| **구현 난이도** | 쉬움 | 쉬움 | 쉬움 | 중간 | 매우 어려움 |
| **자막 없는 영상** | 불가 | 가능 | 가능 | 가능 | 조건부 가능 |
| **보험 전문용어** | 원본 정확 | 중간 | 중간 | adaptation 필요 | 낮음 |

---

## 3. 월간 예상 비용 시나리오

### 전제 조건

```
채널:          2개 (보험명의정닥터, 인스킹)
신규 영상:     주 4편 평균 (월 약 17편)
자막 없는 비율: 인스킹 70%, 보험명의정닥터 20%
  → 인스킹 월 약 6~7편 STT 필요
  → 보험명의정닥터 월 약 1~2편 STT 필요
  → 월 STT 처리 영상: 약 8편
영상 평균 길이: 30분
월 STT 처리 음성: 8편 × 30분 = 240분 / 월
```

### 옵션별 월간 비용

| 옵션 | 계산 | 월 비용 (USD) | 월 비용 (KRW 약 1,350원/달러) |
|------|------|---------------|-------------------------------|
| YouTube 자막만 | 무료 | $0 | 0원 |
| Whisper API (하이브리드) | 240분 × $0.006 | **$1.44** | **~1,940원** |
| GPT-4o Mini (하이브리드) | 240분 × $0.003 | **$0.72** | **~970원** |
| Google Cloud STT Standard (하이브리드) | 240분 × $0.024 | $5.76 | ~7,800원 |
| Google Cloud STT Enhanced (하이브리드) | 240분 × $0.036 | $8.64 | ~11,660원 |

> **하이브리드 전략**: 자막 있으면 YouTube 자막 API 사용(무료), 없을 때만 STT 호출

### 최악 시나리오 (모든 영상에 STT 적용)

```
주 5편 × 60분 × 4주 = 월 1,200분
Whisper API:        1,200분 × $0.006 = $7.20 / 월
GPT-4o Mini:        1,200분 × $0.003 = $3.60 / 월
Google Cloud STT:   1,200분 × $0.024 = $28.80 / 월
```

---

## 4. Cloud Functions 환경 제약 분석

### 현재 환경 제약

```
런타임:   Cloud Functions (asia-northeast3)
타임아웃: 540초 (9분)
메모리:   1GiB
```

### 각 옵션의 Cloud Functions 적합성

**OpenAI Whisper API / GPT-4o Mini Transcribe**
- 구현 방식: HTTP API 호출
- 처리 흐름: 오디오 파일 다운로드 → API 전송 → 결과 수신
- 30분 영상 예상 소요: 오디오 추출 60~120초 + API 응답 30~60초 = 총 2~3분
- **타임아웃 내 처리 가능** (단, 60분 이상 영상은 분할 필요)
- 메모리: API 호출 방식이므로 1GiB 충분

**Google Cloud Speech-to-Text**
- 구현 방식: GCS 업로드 후 비동기 LongRunningRecognize 호출
- 30분 영상: GCS 업로드 후 polling 방식으로 완료 대기
- LongRunningRecognize는 비동기 작업으로 별도 polling 함수 필요
- **Cloud Functions에서 동기 처리는 타임아웃 위험**, 비동기 아키텍처 필요

**Self-hosting Whisper**
- 1GiB 메모리: medium 모델(769MB) 간신히 적재 가능하나, 처리 중 OOM 위험
- 540초 타임아웃: 30분 영상 CPU 처리에 60분 이상 소요 → **불가**
- 결론: Cloud Functions에서 self-hosting은 현실적으로 불가능

### 60분 초과 영상 처리 전략

```python
# 영상 길이 기준 분기 처리 (예시)
def process_video(video_id: str, duration_seconds: int):
    if duration_seconds <= 1800:  # 30분 이하
        # Cloud Functions에서 직접 처리
        return transcribe_in_function(video_id)
    else:
        # Cloud Tasks 또는 Pub/Sub으로 분할 처리 위임
        return enqueue_chunked_transcription(video_id, chunk_size=1500)
```

---

## 5. 추천안

### 최우선 추천: 하이브리드 전략 (YouTube 자막 + GPT-4o Mini Transcribe)

**구현 로직**

```
1. YouTube 자막 API로 자막 존재 여부 확인
2. 자막 있음 → YouTube 자막 API 사용 (무료)
3. 자막 없음 → GPT-4o Mini Transcribe API 호출
   3-1. 오디오 추출 (yt-dlp)
   3-2. 30분 단위로 분할
   3-3. OpenAI API 호출
   3-4. 결과 병합 및 저장
```

**예상 월 비용**: $0.72 ~ $1.44 (약 970원 ~ 1,940원)

**이 방식을 추천하는 이유**

1. **비용 최소화**: 자막 있는 영상은 STT 비용 0원
2. **Cloud Functions 완벽 호환**: API 호출 방식, 9분 타임아웃 내 처리
3. **구현 단순성**: 기존 HTTP 클라이언트 코드에 추가만 하면 됨
4. **확장성**: 영상 수 증가 시 비용이 선형적으로만 증가
5. **품질**: GPT-4o Mini도 Whisper large-v3 대비 합리적인 정확도

### 차선 추천: Whisper API ($0.006/분)

- GPT-4o Mini보다 정확도 높음 (WER 8.9% vs 13.2%)
- 보험 전문용어 혼재 환경에서 더 안정적
- 월 비용 약 $1.44 (한국어 금융 도메인이라면 정확도 투자 가치 있음)

### 비추천: Google Cloud Speech-to-Text

- 비용이 4~6배 높음
- 비동기 아키텍처(LongRunningRecognize) 추가 구현 필요
- 보험 전문용어 적응(adaptation) 별도 작업 필요
- 장점 대비 추가 복잡도가 정당화되지 않음

### 비추천: Self-hosting (CPU)

- Cloud Functions 타임아웃(540초) 내 처리 불가능
- 1GiB 메모리로 유효한 모델(large-v3) 구동 불가
- Cloud Run 별도 인스턴스 운영 시 인프라 관리 부담 증가
- 비용 대비 이점 없음

---

## 6. 구현 로드맵

### Phase 1: 하이브리드 자막 수집 (즉시 구현 가능)

```python
# pseudocode
async def get_transcript(video_id: str, duration_sec: int) -> str:
    # 1단계: YouTube 자막 우선
    captions = await youtube_captions_api(video_id)
    if captions:
        return parse_captions(captions)

    # 2단계: STT 폴백
    if duration_sec > 3600:  # 1시간 초과
        # 분할 처리 (Cloud Tasks 위임)
        return await enqueue_chunked_stt(video_id)

    audio_path = await download_audio(video_id)  # yt-dlp
    transcript = await openai_transcribe(
        audio_path,
        model="gpt-4o-mini-transcribe",  # 비용 절감
        language="ko"
    )
    return transcript
```

### Phase 2: 비용 모니터링

- OpenAI API 사용량 대시보드 설정
- 월별 STT 처리 영상 수 및 비용 추적
- $5/월 초과 시 알림

### Phase 3: 정확도 개선 (필요 시)

- GPT-4o Mini → GPT-4o Transcribe 업그레이드 (비용 2배)
- 보험 전문용어 후처리 사전(dictionary) 적용
- 신뢰도 낮은 구간 수동 검수 파이프라인

---

## 7. 결론 요약

| | 추천 전략 |
|---|---|
| **기본**: 자막 있는 영상 | YouTube 자막 API (무료) |
| **폴백**: 자막 없는 영상 | GPT-4o Mini Transcribe ($0.003/분) |
| **월 예상 비용** | **$0.72 ~ $1.44** (970원 ~ 1,940원) |
| **Cloud Functions 호환** | 완벽 호환 |
| **구현 난이도** | 낮음 (HTTP API 추가) |

현재 운영 규모(월 240분 STT 처리)에서는 GPT-4o Mini Transcribe를 폴백으로 사용하는 하이브리드 전략이 비용·품질·구현 난이도 모든 면에서 최적이다. 향후 채널 수나 영상 수가 크게 증가하면 self-hosting을 GPU 환경(Cloud Run + T4)에서 재검토할 수 있으나, 현재 규모에서는 과투자다.

---

## 참고 자료

- [OpenAI Whisper API Pricing 2026](https://costbench.com/software/ai-transcription-apis/openai-whisper/)
- [OpenAI GPT-4o Mini Transcribe 공식 문서](https://platform.openai.com/docs/models/gpt-4o-mini-transcribe)
- [OpenAI 공식 가격표](https://openai.com/api/pricing/)
- [Google Cloud Speech-to-Text 가격](https://cloud.google.com/speech-to-text/pricing)
- [Whisper API Pricing: Self-Host vs Managed (2026)](https://brasstranscripts.com/blog/openai-whisper-api-pricing-2025-self-hosted-vs-managed)
- [faster-whisper GitHub](https://github.com/SYSTRAN/faster-whisper)
- [YouTube Data API v3 Quota Calculator](https://developers.google.com/youtube/v3/determine_quota_cost)
- [Google Cloud Run vs Cloud Functions 비교](https://docs.cloud.google.com/run/docs/functions/comparison)
- [Best Speech-to-Text APIs 2025 비교](https://vocafuse.com/blog/best-speech-to-text-api-comparison-2025/)
- [Chirp 3 모델 문서](https://docs.cloud.google.com/speech-to-text/docs/models/chirp-3)
