나만의 AI 노트

🎙️ 음성 → 텍스트 변환 & AI 분석 웹앱

만들려던 것 📝

음성 파일을 올리면 텍스트로 자동 변환하고, AI가 요약·키워드 추출·오탈자 교정까지 해주는 로컬 실행형 개인 도구를 만들고자 함.

  • 회의·강의 녹음을 빠르고 정확하게 텍스트로 옮기는 환경을 구축하고자 함.

  • 여러 파일을 한 번에 처리하고, 긴 오디오도 멈추지 않고 안정적으로 변환하는 구조를 구현하고자 함.

  • 변환에서 끝나지 않고 AI 요약·교정까지 한 흐름으로 이어지는 개인용 분석 도구를 목표로 함.

상용 프로그램은 좀 쓰다 보면 한도가 차서 유료 전환을 해야 하고, 화자 분리된 텍스트를 복사하기가 너무 어려워 직접 만들었음.

활용한 툴 ⚒️

  • Claude Code: 바이브코딩

  • faster-whisper (CTranslate2): 음성→텍스트 STT 엔진. openai-whisper 대비 2~4배 빠름.

  • OpenAI GPT-4.1: 요약, 키워드 추출, 오탈자 교정 담당.

  • pyannote.audio: 화자 분리(누가 말했는지 감지) — 선택 기능.

  • Streamlit / ffmpeg / PyTorch: 웹 UI, 오디오 분할, 딥러닝 연산 백엔드.

진행 세부 내용 🔍

1️⃣ 음성 변환 코어 구축

  • mp3·mp4·wav·m4a·ogg 등 주요 포맷을 지원하고, 여러 파일을 동시에 업로드해 순차 처리하도록 구성함.

  • Whisper 모델 5종(tiny~large-v3)과 언어(한/영/자동)를 사이드바에서 선택할 수 있게 함.

  • GPU면 float16, CPU면 int8을 자동 선택해 환경에 맞게 동작하도록 함.

2️⃣ 긴 오디오 자동 분할 처리

  • ffprobe로 오디오 길이를 먼저 측정하고, 기준 시간(기본 10분)을 넘으면 ffmpeg으로 청크를 분할함.

  • 분할된 청크를 개별 변환한 뒤 타임스탬프 offset을 더해 다시 합산하여 하나의 결과로 만듦.

3️⃣ AI 분석 기능 결합

  • 변환된 텍스트에 대해 요약(일반/회의록/강의·인터뷰), 키워드 10개 추출, 오탈자 교정을 GPT-4.1로 수행하도록 구성함. (옵션)

  • 각 기능은 자동 실행이 아닌 버튼 클릭 시에만 호출해 API 비용을 통제함.

4️⃣ 이력 관리 및 내보내기

  • 변환할 때마다 history.json에 자동 저장(최대 100건)하고, 히스토리 탭에서 조회·삭제·다운로드하도록 함.

  • 결과를 TXT·JSON으로 내보내고 클립보드 복사까지 지원하도록 구성함.

시행착오 ⚠️

flowchart LR
    P1["🐌 초기 로딩 수 분"] --> S1["faster-whisper 교체<br/>+ lazy import"]
    P2["📂 단일 파일만 지원"] --> S2["다중 업로드<br/>+ Expander 분리"]
    P3["💥 긴 파일 OOM"] --> S3["ffprobe 측정<br/>+ ffmpeg 청크 분할"]
    P4["✏️ 오탈자·환각"] --> S4["VAD 필터<br/>+ GPT 교정 버튼"]
    P5["💸 자동 요약 비용"] --> S5["요약/키워드/교정<br/>버튼 분리 실행"]
    P6["👤 SPEAKER_00 표시"] --> S6["화자 이름 입력<br/>실시간 치환"]
  • 초기 로딩이 수십 초~수 분으로 느림 → openai-whisper를 faster-whisper로 교체하고, pyannote는 lazy import로 화자 분리 OFF 시 로딩을 건너뛰게 하여 해결함.

  • 긴 오디오를 통째로 넣으면 메모리 부족(OOM) 위험 → 청크 단위 분할 후 합산 방식으로 우회함.

  • Whisper 변환 결과에 오탈자·환각(hallucination) 발생 → VAD 필터로 묵음 구간을 제거(환각 감소)하고, 보완책으로 GPT-4.1 교정 탭을 추가함.

  • AI 요약이 매번 자동 실행되어 비용 낭비 → 요약·키워드·교정을 각각 버튼으로 분리하고 결과를 세션에 캐싱함.

배운 점 📚

  • 단순히 빠른 라이브러리로 교체하는 것만으로도 사용자가 체감하는 초기 로딩 병목이 크게 줄어든다는 점을 확인함.

  • 긴 작업은 통째로 처리하기보다 잘게 쪼갠 뒤 합치는 구조가 메모리·안정성 면에서 유리함을 인식함.

  • STT 정확도는 한 가지 방법으로 끝나지 않고 전처리(VAD)와 후처리(AI 교정)를 함께 가져가야 실용 수준에 도달함을 체감함.

  • 비용이 드는 AI 호출은 자동이 아니라 사용자가 의도적으로 누를 때만 실행시키는 설계가 개인 도구에서 중요함을 배움.

향후 계획 🧭

  • 실시간 마이크 녹음 → 즉시 변환(Streamlit-webrtc) 기능 추가 고민중

  • 변환 결과를 앱 내에서 바로 편집하는 텍스트 에디터를 내장.

도움이 필요한 점 🤝

1️⃣ STT 정확도의 근본적 향상 방안

  • 현재 상황: VAD 필터와 GPT 교정으로 오탈자를 줄였으나, 음질이 낮은 파일에서는 여전히 환각·오인식이 남아 있음.

  • 시도한 방법: VAD 파라미터 튜닝, beam_size 조정, 이전 문맥 반영, 그리고 변환 후 GPT-4.1 교정.

  • 필요한 도움: 후처리 교정에 의존하기 전에, 입력 단계(노이즈 제거·도메인 용어 사전 등)에서 정확도를 끌어올릴 수 있는 접근 방식.

2️⃣ 로컬 도구의 배포·공유 구조 구체화

  • 현재 상황: 현재는 로컬에서 배치파일로만 실행되어, 다른 사람이 바로 쓰기 어려운 상태임.

  • 시도한 방법: run.bat 원클릭 실행, requirements.txt 정리 정도까지 진행함.

  • 필요한 도움: 모델 다운로드·API 키·GPU 의존성을 가진 앱을 Docker/클라우드로 깔끔하게 배포하는 현실적인 방법이나 방향성.

1

뉴스레터 무료 구독