제 포스팅은 AI가 작성한게 아닌 한글자 한글자 타자를 쳐서 작성한 포스팅입니다. 구독 좋아요 댓글은 힘이됩니다.
안녕하세요! 지난번 포스팅으로 존F케네디의 명연설을 Tiny와 Base로 STT로 음성을 텍스트로 추출해봤습니다.!
[Whisper.cpp] #1. Edge Agent AI 음성처리 : whisper.cpp를 이용한 음성처리(Base, Tiny 비교)
[Whisper.cpp] #1. Edge Agent AI 음성처리 : whisper.cpp를 이용한 음성처리(Base, Tiny 비교)
안녕하세요, 이번엔 whisper.cpp를 이용해서 on device, edge agent AI의 청각의 능력을 한번 분석/검증해보겠습니다.이번 포스팅 계획은안드로이드 + 엑시노스1380 환경에서 whisper.cpp는 잘 동작하는가?성
uno-kim.tistory.com
[오디오추출] 안드로이드 환경에서 유튜브 특정 구간 오디오 추출하는방법
[오디오추출] 안드로이드 환경에서 유튜브 특정 구간 오디오 추출하는방법
한글의 음성 파일들이 필요하다, 그렇다고 무턱대고 내 발음을 가지고 테스트하기에는 시간이 촉박하고 급하다.이럴때일 수록 지천에 널린 소스로 이용하면 될것같아서 유투브 영상을 가져와
uno-kim.tistory.com
이번 포스팅에서는 과연 한국어로 혼자 떠드는 영상 또는 오디오에서 텍스트를 잘 추출하는지 비교 분석해보겠습니다!

4단계 체급 비교 테스트
우선 아직 안 받으신 모델(tiny, base)이 있을 수 있으니 확실하게 전부 다운로드합니다.
(이미 받은 파일은 알아서 건너뛰거나 덮어씁니다.)
반드시 whisper.cpp 폴더 내에서 해야합니다~!
# tiny (약 75MB)
bash ./models/download-ggml-model.sh tiny
# base (약 142MB)
bash ./models/download-ggml-model.sh base
# small (약 466MB)
bash ./models/download-ggml-model.sh small
# medium (약 1.5GB)
bash ./models/download-ggml-model.sh medium
모델이 다 받아졌는지 확인~! (4개의 모델 파일이 용량에 맞게 잘 들어있다면 준비 완료입니다!)
ls -lh models/ggml-*.bin
대망의 4체급 검증
준비가 끝났다면 아까 추출한 test_cut.wav 파일의 경로를 정확히 확인하고 명령에 넣고 진행해 주세요!!!

은근히 오래걸립니다잉
find ~ -name "test_cut.wav"

Whisper 4개 체급 벤치마크
# 1. Tiny 모델 격발 (약 75MB)
./build/bin/whisper-cli -m models/ggml-tiny.bin -f /data/data/com.termux/files/home/samples/test_cut.wav -l ko -t 4
# 2. Base 모델 격발 (약 142MB)
./build/bin/whisper-cli -m models/ggml-base.bin -f /data/data/com.termux/files/home/samples/test_cut.wav -l ko -t 4
# 3. Small 모델 격발 (약 466MB)
./build/bin/whisper-cli -m models/ggml-small.bin -f /data/data/com.termux/files/home/samples/test_cut.wav -l ko -t 4
# 4. Medium 모델 격발 (약 1.5GB)
./build/bin/whisper-cli -m models/ggml-medium.bin -f /data/data/com.termux/files/home/samples/test_cut.wav -l ko -t 4
1. 타이니 버전 : 나오지도 않았다...!!
whisper_init_from_file_with_params_no_state: loading model from 'models/ggml-tiny.bin'
whisper_init_with_params_no_state: use gpu = 1
whisper_init_with_params_no_state: flash attn = 1
whisper_init_with_params_no_state: gpu_device = 0
whisper_init_with_params_no_state: dtw = 0
whisper_init_with_params_no_state: devices = 1
whisper_init_with_params_no_state: backends = 1
whisper_model_load: loading model
whisper_model_load: n_vocab = 51865
whisper_model_load: n_audio_ctx = 1500
whisper_model_load: n_audio_state = 384
whisper_model_load: n_audio_head = 6
whisper_model_load: n_audio_layer = 4
whisper_model_load: n_text_ctx = 448
whisper_model_load: n_text_state = 384
whisper_model_load: n_text_head = 6
whisper_model_load: n_text_layer = 4
whisper_model_load: n_mels = 80
whisper_model_load: ftype = 1
whisper_model_load: qntvr = 0
whisper_model_load: type = 1 (tiny)
whisper_model_load: adding 1608 extra tokens
whisper_model_load: n_langs = 99
whisper_model_load: CPU total size = 77.11 MB
whisper_model_load: model size = 77.11 MB
whisper_backend_init_gpu: device 0: CPU (type: 0)
whisper_backend_init_gpu: no GPU found
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 13.21 MB
whisper_init_state: compute buffer (encode) = 17.72 MB
whisper_init_state: compute buffer (cross) = 3.89 MB
whisper_init_state: compute buffer (decode) = 95.91 MB
system_info: n_threads = 4 / 8 | WHISPER : COREML = 0 | OPENVINO = 0 | CPU : NEON = 1 | ARM_FMA = 1 | FP16_VA = 1 | DOTPROD = 1 | OPENMP = 1 | REPACK = 1 |
main: processing '/data/data/com.termux/files/home/samples/test_cut.wav' (960216 samples, 60.0 sec), 4 threads, 1 processors, 5 beams + best of 5, lang = ko, task = transcribe, timestamps = 1 ...
2. Base 모델 : 그럭저럭 나왔으나 좀 이상하다????
[00:00:00.000 --> 00:00:11.160] 마지막 주제는 3개의 1위 출시자, 뭐 얘기 안 하셨죠?
[00:00:11.160 --> 00:00:12.720] 3개의 1위 출시자이 어디냐?
[00:00:12.720 --> 00:00:14.320] 당연히?
[00:00:14.320 --> 00:00:15.880] 대한민국의 코스피저.
[00:00:15.880 --> 00:00:21.000] 왜냐하면 연초 4천 2배, 3월 초 6천 3백 47, 2000 백 포인트로 올렸죠?
[00:00:21.000 --> 00:00:24.240] 연초의 상실 50%, 앞두적인 3개의 1위?
[00:00:24.240 --> 00:00:25.600] 코스피이 좋습니다.
[00:00:25.600 --> 00:00:28.240] 3개의 출시자은 당연히 코스피고요.
[00:00:28.240 --> 00:00:29.640] 또 1위 하도 있어요.
[00:00:29.640 --> 00:00:31.120] 그거 뭐냐?
[00:00:31.120 --> 00:00:37.560] 이틀간 떨어진 거, 7천 2사 브로우 11프로 합쳐서 대충 20프로, 하랑임도 앞두적인?
[00:00:37.560 --> 00:00:39.280] 여기서 하면 안 된구나.
[00:00:39.280 --> 00:00:43.280] 자, 하랑임도, 하랑임도.
[00:00:43.280 --> 00:00:48.520] 이 11% 수를 빠진 날.
[00:00:48.520 --> 00:00:52.200] 저 2일간 빠진 게 1,150%가 빠졌거든요?
[00:00:52.200 --> 00:00:57.400] 3월 4일 수를 680%가 빠졌어요.
[00:00:57.400 --> 00:00:59.860] 무슨 기소가 심해 보호가 빠져오지?
whisper_print_timings: load time = 474.16 ms
whisper_print_timings: fallbacks = 0 p / 0 h
whisper_print_timings: mel time = 335.32 ms
whisper_print_timings: sample time = 10102.69 ms / 1321 runs ( 7.65 ms per run)
whisper_print_timings: encode time = 18160.21 ms / 3 runs ( 6053.40 ms per run)
whisper_print_timings: decode time = 47.77 ms / 2 runs ( 23.89 ms per run)
whisper_print_timings: batchd time = 22072.74 ms / 1310 runs ( 16.85 ms per run)
whisper_print_timings: prompt time = 1348.27 ms / 145 runs ( 9.30 ms per run)
whisper_print_timings: total time = 52726.05 ms
whisper_init_from_file_with_params_no_state: loading model from 'models/ggml-base.bin'
whisper_init_with_params_no_state: use gpu = 1
whisper_init_with_params_no_state: flash attn = 1
whisper_init_with_params_no_state: gpu_device = 0
whisper_init_with_params_no_state: dtw = 0
whisper_init_with_params_no_state: devices = 1
whisper_init_with_params_no_state: backends = 1
whisper_model_load: loading model
whisper_model_load: n_vocab = 51865
whisper_model_load: n_audio_ctx = 1500
whisper_model_load: n_audio_state = 512
whisper_model_load: n_audio_head = 8
whisper_model_load: n_audio_layer = 6
whisper_model_load: n_text_ctx = 448
whisper_model_load: n_text_state = 512
whisper_model_load: n_text_head = 8
whisper_model_load: n_text_layer = 6
whisper_model_load: n_mels = 80
whisper_model_load: ftype = 1
whisper_model_load: qntvr = 0
whisper_model_load: type = 2 (base)
whisper_model_load: adding 1608 extra tokens
whisper_model_load: n_langs = 99
whisper_model_load: CPU total size = 147.37 MB
whisper_model_load: model size = 147.37 MB
whisper_backend_init_gpu: device 0: CPU (type: 0)
whisper_backend_init_gpu: no GPU found
whisper_init_state: kv self size = 6.29 MB
whisper_init_state: kv cross size = 18.87 MB
whisper_init_state: kv pad size = 3.15 MB
whisper_init_state: compute buffer (conv) = 16.28 MB
whisper_init_state: compute buffer (encode) = 23.09 MB
whisper_init_state: compute buffer (cross) = 4.66 MB
whisper_init_state: compute buffer (decode) = 96.37 MB
system_info: n_threads = 4 / 8 | WHISPER : COREML = 0 | OPENVINO = 0 | CPU : NEON = 1 | ARM_FMA = 1 | FP16_VA = 1 | DOTPROD = 1 | OPENMP = 1 | REPACK = 1 |
3. Small 모델 : 조금 보통의 속도로 나왔으나 괜찮다. 퀄리티 대신 수정할게 조금잇어보인다.
[00:00:00.000 --> 00:00:05.340] [이번 영상에서 구독과 좋아요를 눌러주세요]
[00:00:05.340 --> 00:00:10.980] 마지막 주제는 세계 1위 주위기장 뭐 얘기 안 할 수 없죠?
[00:00:10.980 --> 00:00:13.680] 세계 1위 주위기장이예느냐? 당연히?
[00:00:13.680 --> 00:00:15.660] 내가 몇 명 뒤에 코스피죠?
[00:00:15.660 --> 00:00:20.860] 왜냐면 연초 4,200, 3월 6,347,200 포인트를 올렸죠?
[00:00:20.860 --> 00:00:25.520] 연초의 상태를 50% 압도적인 세계 1위 코스피 좋습니다.
[00:00:25.520 --> 00:00:28.060] 세계 주위기장은 당연히 코스피고요.
[00:00:28.060 --> 00:00:29.800] 또 1위 하나 또 있어요.
[00:00:29.800 --> 00:00:30.840] 그거 뭐냐?
[00:00:30.840 --> 00:00:35.620] 이틀간 떨어진 거 7.24% 12% 합쳐서 대충 20%
[00:00:35.620 --> 00:00:37.440] 하락률도 압도적인?
[00:00:37.440 --> 00:00:39.280] 여기 이렇게 하면 안 되구나.
[00:00:39.280 --> 00:00:41.440] 하락률 드시죠. 하락률 드시죠.
[00:00:41.440 --> 00:00:47.320] 이 12% 수현랄 빠진 날
[00:00:47.320 --> 00:00:52.080] 저 1간 빠진 게 1,150%가 빠졌거든요.
[00:00:52.080 --> 00:00:55.920] 3월 4일 수현랄 698%가 빠졌어요.
[00:00:57.220 --> 00:00:59.820] 무슨 지수가 심해 보여가지고~
whisper_print_timings: load time = 895.95 ms
whisper_print_timings: fallbacks = 1 p / 0 h
whisper_print_timings: mel time = 491.24 ms
whisper_print_timings: sample time = 10661.78 ms / 1285 runs ( 8.30 ms per run)
whisper_print_timings: encode time = 37686.23 ms / 3 runs ( 12562.08 ms per run)
whisper_print_timings: decode time = 456.30 ms / 7 runs ( 65.19 ms per run)
whisper_print_timings: batchd time = 44728.88 ms / 1267 runs ( 35.30 ms per run)
whisper_print_timings: prompt time = 2435.54 ms / 134 runs ( 18.18 ms per run)
whisper_print_timings: total time = 97656.24 ms
whisper_init_from_file_with_params_no_state: loading model from 'models/ggml-small.bin'
whisper_init_with_params_no_state: use gpu = 1
whisper_init_with_params_no_state: flash attn = 1
whisper_init_with_params_no_state: gpu_device = 0
whisper_init_with_params_no_state: dtw = 0
whisper_init_with_params_no_state: devices = 1
whisper_init_with_params_no_state: backends = 1
whisper_model_load: loading model
whisper_model_load: n_vocab = 51865
whisper_model_load: n_audio_ctx = 1500
whisper_model_load: n_audio_state = 768
whisper_model_load: n_audio_head = 12
whisper_model_load: n_audio_layer = 12
whisper_model_load: n_text_ctx = 448
whisper_model_load: n_text_state = 768
whisper_model_load: n_text_head = 12
whisper_model_load: n_text_layer = 12
whisper_model_load: n_mels = 80
whisper_model_load: ftype = 1
whisper_model_load: qntvr = 0
whisper_model_load: type = 3 (small)
whisper_model_load: adding 1608 extra tokens
whisper_model_load: n_langs = 99
whisper_model_load: CPU total size = 487.01 MB
whisper_model_load: model size = 487.01 MB
whisper_backend_init_gpu: device 0: CPU (type: 0)
whisper_backend_init_gpu: no GPU found
whisper_init_state: kv self size = 18.87 MB
whisper_init_state: kv cross size = 56.62 MB
whisper_init_state: kv pad size = 4.72 MB
whisper_init_state: compute buffer (conv) = 22.42 MB
whisper_init_state: compute buffer (encode) = 33.85 MB
whisper_init_state: compute buffer (cross) = 6.20 MB
whisper_init_state: compute buffer (decode) = 97.28 MB
system_info: n_threads = 4 / 8 | WHISPER : COREML = 0 | OPENVINO = 0 | CPU : NEON = 1 | ARM_FMA = 1 | FP16_VA = 1 | DOTPROD = 1 | OPENMP = 1 | REPACK = 1 |
main: processing '/data/data/com.termux/files/home/samples/test_cut.wav' (960216 samples, 60.0 sec), 4 threads, 1 processors, 5 beams + best of 5, lang = ko, task = transcribe, timestamps = 1 ...
4. 미디엄모델 : 진짜 오래걸렸다. 1분이라면 거의 10분이상 기다린것같다. 퀄리티도 조금좋아졌다 조금
[00:00:00.000 --> 00:00:03.420] 마지막 주제는 3개의 1위 주익시장! 뭐 얘기 안 할 수 없죠?
[00:00:03.420 --> 00:00:08.220] 3개의 1위 주익시장이 어딨냐? 당연히 대한민국의 코스피죠!
[00:00:08.220 --> 00:00:13.420] 왜냐하면 연초 4200, 3월 초 6347, 2100포인트를 올렸죠?
[00:00:13.420 --> 00:00:18.220] 연초의 상승을 50%! 압도적인 3개의 1위 코스피 좋습니다.
[00:00:18.220 --> 00:00:20.720] 3개의 주익장은 당연히 코스피이고요.
[00:00:20.720 --> 00:00:23.420] 또 1위 하나 또 있어요. 그거 뭐냐?
[00:00:23.420 --> 00:00:26.500] 연초 1위 주익시장은 당연히 코스피입니다.
[00:00:26.500 --> 00:00:31.120] 당연히 코스피이고요. 또 1위 하나 또 있어요. 그거 뭐냐?
[00:00:31.120 --> 00:00:35.540] 이틀간 떨어진 거 7.24%, 12% 합쳐서 대충 20%
[00:00:35.540 --> 00:00:37.740] 하락률도 압도적인...
[00:00:37.740 --> 00:00:39.460] 아, 이거 하면 안 되구나.
[00:00:39.460 --> 00:00:43.260] 야, 하락률도 진짜 하락률도...
[00:00:43.260 --> 00:00:47.980] 이 12% 수요일 날 빠진 날...
[00:00:47.980 --> 00:00:52.260] 저 2일간 빠진 게 1150%가 빠졌거든요?
[00:00:52.260 --> 00:00:55.860] 3월 4일 수요일 날 698%가 빠졌어요.
[00:00:56.500 --> 00:00:59.860] 무슨 지수가 11%가 빠져
whisper_print_timings: load time = 3181.43 ms
whisper_print_timings: fallbacks = 0 p / 0 h
whisper_print_timings: mel time = 638.53 ms
whisper_print_timings: sample time = 10923.87 ms / 1463 runs ( 7.47 ms per run)
whisper_print_timings: encode time = 129847.90 ms / 3 runs ( 43282.63 ms per run)
whisper_print_timings: decode time = 2787.62 ms / 15 runs ( 185.84 ms per run)
whisper_print_timings: batchd time = 154962.50 ms / 1439 runs ( 107.69 ms per run)
whisper_print_timings: prompt time = 6273.13 ms / 159 runs ( 39.45 ms per run)
whisper_print_timings: total time = 309589.03 ms
whisper_init_from_file_with_params_no_state: loading model from 'models/ggml-medium.bin'
whisper_init_with_params_no_state: use gpu = 1
whisper_init_with_params_no_state: flash attn = 1
whisper_init_with_params_no_state: gpu_device = 0
whisper_init_with_params_no_state: dtw = 0
whisper_init_with_params_no_state: devices = 1
whisper_init_with_params_no_state: backends = 1
whisper_model_load: loading model
whisper_model_load: n_vocab = 51865
whisper_model_load: n_audio_ctx = 1500
whisper_model_load: n_audio_state = 1024
whisper_model_load: n_audio_head = 16
whisper_model_load: n_audio_layer = 24
whisper_model_load: n_text_ctx = 448
whisper_model_load: n_text_state = 1024
whisper_model_load: n_text_head = 16
whisper_model_load: n_text_layer = 24
whisper_model_load: n_mels = 80
whisper_model_load: ftype = 1
whisper_model_load: qntvr = 0
whisper_model_load: type = 4 (medium)
whisper_model_load: adding 1608 extra tokens
whisper_model_load: n_langs = 99
whisper_model_load: CPU total size = 1533.14 MB
whisper_model_load: model size = 1533.14 MB
whisper_backend_init_gpu: device 0: CPU (type: 0)
whisper_backend_init_gpu: no GPU found
whisper_init_state: kv self size = 50.33 MB
whisper_init_state: kv cross size = 150.99 MB
whisper_init_state: kv pad size = 6.29 MB
whisper_init_state: compute buffer (conv) = 28.57 MB
whisper_init_state: compute buffer (encode) = 44.60 MB
whisper_init_state: compute buffer (cross) = 7.73 MB
whisper_init_state: compute buffer (decode) = 98.20 MB
system_info: n_threads = 4 / 8 | WHISPER : COREML = 0 | OPENVINO = 0 | CPU : NEON = 1 | ARM_FMA = 1 | FP16_VA = 1 | DOTPROD = 1 | OPENMP = 1 | REPACK = 1 |
main: processing '/data/data/com.termux/files/home/samples/test_cut.wav' (960216 samples, 60.0 sec), 4 threads, 1 processors, 5 beams + best of 5, lang = ko, task = transcribe, timestamps = 1 ...
기술보고서
1. 벤치마크 환경 및 조건
- 테스트 기기: Samsung Galaxy A35 (Exynos 1380 / ARM64)
- 운영 체제: Termux (Android Native Linux Environment)
- 사용 엔진: whisper.cpp (C++ 기반, NEON & ARM_FMA 하드웨어 가속 활성화)
- 입력 데이터: 60초 길이의 한국어 유튜브 추출 음성 (16kHz, Mono WAV)
- 테스트 조건: 스레드 4개 할당 (-t 4), Greedy Search (Beam Search 미적용)
| 체급 | 모델 크기 | 처리 시간 (Total) | RTF (Real-Time Factor)* |
한국어 인식 품질 (주관적 평가) |
| Tiny | 77.11 MB | - | - | 무응답.. |
| Base | 147.37 MB | 52,726 ms (약 52.7초) |
0.88 | 문맥 파악이 부족하고, 조사/어미 오류가 다수 존재함 ("코스피저", "하랑임도"). |
| Small | 487.01 MB | 97,656 ms (약 1분 37초) |
1.62 | [추천] 실생활 대화 수준의 인식 가능. 유튜브 화자의 의도와 고유명사("코스피")를 제법 잘 잡아냄. |
| Medium | 1533.14 MB | 309,589 ms (약 5분 9초) |
5.15 | 완벽에 가까운 정확도. "아, 이거 하면 안 되구나" 같은 감탄사 및 맥락까지 정확히 캐치. 하지만 극악의 속도. |
빔서치라는 알고리즘을 쓰면 정확도가 더 올라간다고 한다. 그만큼 연산이 더 추가되어 오래걸린다고 합니다.
빔이란 ?
AI 모델이 문장을 생성할 때, '다음에 올 가장 확률 높은 단어'를 하나만 고르지 않고, 여러 개의 후보를 동시에 추적하며 최적의 문장을 찾아내는 알고리즘
그런데 제 로그를 잘보면
main: processing '/data/data/com.termux/files/home/samples/test_cut.wav' (960216 samples, 60.0 sec), 4 threads, 1 processors, 5 beams + best of 5, lang = ko, task = transcribe, timestamps = 1 ...
이미 빔즈가 먹었다고 합니다.
이건 자동으로 어? 이상한데??? 하면서 이미 5개 후보중 하나를 돌렸다는 이야기입니다.
그래서 궂이 따로 빔즈를 넣지 않아도되었으며, 빠르게 대강대강 훝어가려면 오히려 빔 옵션을 1로 주면되겠습니다.
이것으로 모델 4개의 체급에 대해서 알아보았고 모두 검증/분석 해보았습니다.
감사합니다.
다음 포스팅은 화자분리에 대해서 알아보겠습니다!

'AI Project > Edge AI Agent - 음성처리(연구,분석,검증))' 카테고리의 다른 글
| [비교/검증-3] #5. Edge Agent AI 음성처리 : Pyannote 모델을 이용한 화자분리 (0) | 2026.04.30 |
|---|---|
| [비교/검증-2] #4. Edge Agent AI 음성처리 : Sherpa-ONNX 실행 , 화자분리, 트러블슈팅정리 (1) | 2026.04.29 |
| [비교/검증-1] #3. Edge Agent AI 음성처리 : STT + 화자분리 경량엔진 3종 비교 + Pyannote 모델 (0) | 2026.04.29 |
| [오디오추출] 안드로이드 환경에서 유튜브 특정 구간 오디오 추출하는방법 (0) | 2026.04.27 |
| [Whisper.cpp] #1. Edge Agent AI 음성처리 : whisper.cpp를 이용한 음성처리(Base, Tiny 비교) (0) | 2026.04.27 |
댓글