AI : 8. Whisper로 음성을 텍스트로 변환하는 법
Whisper는 음성 파일을 텍스트로 변환하는 음성 인식 모델이다.
https://github.com/openai/whisper
사전 준비
로컬에서 Whisper를 사용하려면 Python과 FFmpeg가 필요하다.
py -m venv .venv
.\.venv\Scripts\Activate.ps1
FFmpeg는 Chocolatey나 Scoop으로 설치할 수 있다.
choco install ffmpeg
설치
로컬에서 실행하려면 openai-whisper 패키지를 설치한다.
pip install -U openai-whisper
기본 사용법
기본 형태는 입력 파일 뒤에 필요한 옵션을 붙이는 방식이다.
한국어 음성을 텍스트 파일로 저장하려면 다음과 같이 사용한다.
whisper audio.mp3 --model small --language Korean --output_format txt
음성을 영어 텍스트로 번역하려면 작업을 translate로 바꾼다.
whisper audio.mp3 --model small --task translate --output_format txt
자막 파일이 필요하면 출력 형식을 srt 또는 vtt로 바꾸면 된다.
whisper audio.mp3 --model small --language Korean --output_format srt
--output_format을 지정하지 않으면 여러 형식의 파일이 함께 생성된다.
로컬 CLI 옵션
Whisper CLI에서 사용할 수 있는 주요 옵션은 다음과 같다.
입력과 모델
audio변환할 음성 파일을 지정한다. 여러 파일을 한 번에 넘길 수도 있다.--model사용할 Whisper 모델을 지정한다. 예:tiny,base,small,medium,large,turbo--model_dir모델 파일을 저장할 폴더를 지정한다. 비워두면 기본 캐시 폴더를 사용한다.--device실행에 사용할 장치를 지정한다. 예:cpu,cuda
출력
--output_dir,-o출력 파일을 저장할 폴더를 지정한다.--output_format,-f출력 형식을 지정한다. 예:txt,vtt,srt,tsv,json,all--verbose처리 중 진행 상황과 인식된 구간 텍스트를 출력할지 지정한다.
변환 작업
--tasktranscribe또는translate작업을 지정한다.translate는 음성을 영어 텍스트로 번역한다.--language음성 언어를 지정한다. 지정하지 않으면 언어를 자동으로 감지한다.--initial_prompt음성 인식에 참고할 문맥 힌트를 지정한다.--carry_initial_promptinitial_prompt의 문맥 힌트를 뒤쪽 음성 인식에도 계속 사용할지 지정한다.--condition_on_previous_text앞에서 인식한 내용을 다음 구간의 문맥으로 사용할지 지정한다.
디코딩
--temperature인식 후보를 고를 때 사용할 샘플링 온도를 지정한다.--best_of샘플링 온도가 0보다 클 때 비교할 후보 수를 지정한다.--beam_size샘플링 온도가 0일 때 유지할 문장 후보 수를 지정한다.--patience문장 후보 탐색을 얼마나 더 이어갈지 지정한다.--length_penalty문장 길이에 대한 보정값을 지정한다.--suppress_tokens결과에서 제외할 토큰 번호를 지정한다. 보통 기본값을 사용한다.--fp16반정밀도 연산 사용 여부를 지정한다. GPU에서는 기본적으로 사용하고, CPU에서는 FP32로 처리된다.--temperature_increment_on_fallback인식 결과가 불안정할 때 샘플링 온도를 얼마나 올려 다시 시도할지 지정한다.--compression_ratio_threshold반복 문장이 많다고 판단할 기준값을 지정한다.--logprob_threshold토큰 예측 신뢰도가 낮다고 판단할 기준값을 지정한다.--no_speech_threshold말이 없는 구간으로 판단할 기준값을 지정한다.
타임스탬프와 자막
아래 옵션들은 단어 단위 시간 정보나 자막 출력 방식을 조정할 때 사용한다.
--word_timestamps단어별 시작 시간과 끝 시간을 추출한다.--prepend_punctuations이미 인식된 여는 괄호나 따옴표를 다음 단어 앞에 붙이도록 지정한다.--append_punctuations이미 인식된 쉼표나 마침표를 이전 단어 뒤에 붙이도록 지정한다.--highlight_words단어별 시간 정보가 있을 때,srt,vtt자막에서 현재 발화 중인 단어가 강조되도록 만든다.--max_line_width단어 타임스탬프 기반 자막에서 한 줄의 최대 글자 수를 지정한다.--max_line_count단어 타임스탬프 기반 자막에서 한 구간의 최대 줄 수를 지정한다.--max_words_per_line단어 타임스탬프 기반 자막에서 한 줄의 최대 단어 수를 지정한다.--hallucination_silence_threshold단어별 시간 정보가 있을 때, 잘못 인식된 것으로 보이는 구간 주변의 긴 무음 구간을 건너뛸 기준 초를 지정한다.
실행 제어
--threadsCPU 실행에 사용할 스레드 수를 지정한다.--clip_timestamps처리할 구간의 시작, 끝 시간을 초 단위로 지정한다.
예제 코드
다음은 음성 파일을 텍스트 파일로 저장하는 간단한 예제다.
import whisper
model = whisper.load_model("small")
result = model.transcribe(
"audio.mp3",
language="Korean",
task="transcribe",
fp16=False,
)
with open("audio.txt", "w", encoding="utf-8") as file:
file.write(result["text"].strip())
참고
옵션별 동작을 확인하기 위한 간단한 예제는 다음 링크에서 확인할 수 있다.
https://github.com/Jay1127/WhisperGui

댓글남기기