매일 쌓이는 회의 녹음을 옵시디언에 자동 저장하기

소개

클로바노트로 회의녹음을 했는데 무료 계정에 한계가 있어 무료로 만들어봐야겠다는 생각을 했습니다. 그리고 인터뷰, 회의, 강의 등 매일 쌓이는 음성 녹음 파일을 빠르게 텍스트로 정리하고 옵시디언에 자동 저장하는 워크플로우를 만들어 나만의 WIKI로 만들면 좋겠다는 생각이 들었습니다. 처음에는 단순히 "화자 구분된 전사"가 목표였지만, 진행하면서 음성 → 전사 → 요약 → 마인드맵 → 저장 → 아카이빙까지 한 줄 명령으로 자동화하는 개인용 음성 에이전트(voice-agent)로 발전했습니다.

매일 1~3개씩 쌓이는 m4a 파일을 일일이 수동 정리하기엔 시간이 너무 걸렸고, 외장하드에 그냥 쌓아두면 영영 다시 안 보게 되더라고요. "녹음만 해두면 알아서 정리되는 시스템"이 필요했습니다.

진행 방법

사용 도구: Claude Code(메인), MLX Whisper(로컬 전사), Google Gemini 2.5 Flash(병렬 전사), Anthropic Claude API(요약·마인드맵), ffmpeg(오디오 처리), Obsidian(저장소), Markmap(마인드맵 렌더링)

1단계 — 화자 분리 시도와 좌절 (Day 1)

처음에는 pyannote-audio로 화자 분리(diarization)부터 시도했습니다.

이 인터뷰 파일 변환 요청하려 하는데 목소리 구분해서 분석해줄 수 있어?

HuggingFace 토큰 발급, 모델 카드 동의까지 했는데 1시간짜리 파일에서 계속 실패했습니다.

얼마나 걸려?
8분 넘었어
아직도 안끝났어?
화자분리가 안되는 이유가 뭐야?

3명 화자 지정, WAV 변환, diarize-only 모드, CPU-only 모드까지 다 해봤지만 결국 exit code 137 (메모리 부족, OOM) 으로 5시간 사투 끝에 포기. 맥북 메모리로는 1시간 분량 화자 분리가 불가능하다는 결론에 도달했습니다.

대신 Whisper 단독 전사로 우회했습니다.

그냥 화자 구분하지 말고 전사해줘

2단계 — 병렬 전사로 속도 개선

MLX Whisper로 1시간 분량을 합리적 시간에 전사할 수 있게 됐지만, 여러 파일이 쌓이면 느렸습니다. 그래서 Gemini API로 청크 병렬 전사를 추가했습니다.

이거 병렬로 작업 가능해?

ffmpeg로 5분 단위 분할 → 모든 청크를 동시에 Gemini API 호출하니 1시간 분량이 20~30초로 단축됐습니다.

3단계 — 마인드맵 자동화

요약본만으로는 전체 구조가 한눈에 안 들어와서 마인드맵을 붙였습니다.

마인드맵으로도 만들 수 있어?
마인드 크게 보고싶어

처음엔 Mermaid mindmap을 썼는데 옵시디언에서 확대가 안 돼서 Markmap으로 갈아탔습니다. Markmap 플러그인 자동 설치, 노드 기본 펼침(expand all) 옵션 자동 주입까지 Claude Code가 알아서 처리해줬습니다.

4단계 — 환각 대참사와 안전장치 통합 (가장 큰 교훈)

1시간 55분짜리 라이브 영상을 전사했는데 "그럴듯한 강의 내용"이 나왔습니다. 그런데...

1시간 55분인데 왜 클로드코드 이야기는 없지?

확인해보니 원본 파일이 사실상 무음이었는데(비트레이트 < 8 kbps, mean_volume < -50 dB) Gemini가 통째로 가짜 내용을 환각으로 만들어낸 것이었습니다. 옵시디언에 가짜 정보가 저장되는 끔찍한 상황이었죠.

파일에 음성이 없네 ㅠㅠ
안전장치 통합해줘

이 사건 이후 audio_quality.py 모듈을 메인 파이프라인 2단계로 통합했습니다.

python

# 검증 기준 (첫 60초만 분석해서 빠른 사전 검증)
- 비트레이트 < 8 kbps → 에러 (사용자 확인 후 진행)
- 비트레이트 < 16 kbps → 경고
- mean_volume < -50 dB → 에러 (무음)
- mean_volume < -35 dB → 경고  
- max_volume < -30 dB → 에러 (마이크 캡처 실패 의심)

이후 동일 사고는 0건이었습니다.

최종 워크플로 (한 줄 명령)

bash

voice 파일.m4a

위 명령어 한 줄로 다음 7단계가 자동 실행됩니다.

  1. 해시 계산 (중복 검사)

  2. 음성 품질 검증 (환각 방지 안전장치)

  3. 전사 (MLX 로컬 또는 --fast Gemini 병렬)

  4. Claude API 요약 (강의/회의/메모 템플릿 자동 선택)

  5. 마인드맵 자동 생성 (Markmap)

  6. Obsidian Vault 저장

  7. 외장하드 완료 폴더로 자동 아카이빙


결과와 배운 점

성과: 하루 만에 강의 6편 + 미팅 1편 = 총 7개 파일을 백그라운드 병렬 처리로 완주한 적도 있습니다. 녹음만 해두면 정말로 알아서 정리되는 시스템이 됐습니다.

시행착오에서 배운 점:

첫째, "되는 것 같은데 안 되는 것"이 제일 무섭다는 것. 화자 분리는 5시간을 날렸지만 그래도 "안 된다"는 결론을 빨리 줬습니다. 진짜 위험했던 건 환각 대참사였습니다. 무음 파일에서 그럴듯한 1시간 55분짜리 가짜 강의록이 나왔는데, 제목이 그럴듯해서 하마터면 그대로 옵시디언에 영구 저장될 뻔했습니다. AI 결과물은 입력 단계에서 sanity check가 들어가야 한다는 교훈을 비싸게 배웠습니다.

둘째, 로컬 vs 클라우드 이중 엔진의 가치. MLX Whisper 로컬은 느리지만 환각이 적고, Gemini 청크 병렬은 빠르지만 환각 위험이 있습니다. 상황에 따라 골라 쓸 수 있게 둘 다 유지한 게 결과적으로 좋은 선택이었습니다.

셋째, 세션 간 컨텍스트 공유의 어려움. "이전에 어떻게 작업했는지 몰라?"라는 질문을 여러 번 했습니다. 결국 표준 워크플로를 README와 시스템 메시지에 명문화하니 일관성이 생겼습니다. AI 에이전트와 일할 때는 인간이 매번 설명하지 않아도 되도록 워크플로를 문서화하는 것이 핵심이라는 걸 체감했습니다.

나만의 꿀팁:

  • 긴 음성 파일은 무조건 청크 병렬 처리. 1시간 → 30초는 정말 게임 체인저.

  • 마인드맵은 요약본을 다시 LLM에 입력해서 생성하면 구조가 깔끔하게 나옵니다.

  • 옵시디언에 저장할 때는 파일명 컨벤션(YYMMDD_제목.md)을 정해두면 나중에 검색·통합 분석이 쉬워집니다.

  • 외장하드 자동 아카이빙은 미연결 시 해당 단계만 스킵하도록 설계해야 다른 곳에서도 워크플로가 깨지지 않습니다.

앞으로의 계획:

지금은 CLI 파이프라인이지만 진짜 "에이전트"로 키우려면 자율 판단이 필요합니다. 음성 파일 폴더 자동 감시(watcher), 사용자 의도에 따른 템플릿 자동 선택, 과거 노트 검색 후 관련 컨텍스트 자동 첨부 같은 방향을 고민 중입니다. 특히 여러 대화록을 시계열로 묶어서 "이 주제에 대한 내 생각은 어떻게 변해왔는가"를 자동 분석해주는 기능을 붙이고 싶습니다.

도움이 필요한 부분:

  • 화자 분리를 로컬에서 가볍게 돌리는 방법 (클라우드 API 외 옵션). 추천 모델이나 경량화 노하우가 있으시면 공유 부탁드립니다.

  • 옵시디언 마인드맵을 더 인터랙티브하게 만드는 플러그인 추천도 환영합니다.

3
2개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.