홈으로 돌아가기

CLI tapeback: Linux 통화 스테레오 다이어라이제이션

Tapeback — 스테레오 다이어라이제이션으로 Linux 통화 녹음 CLI: 왼쪽 채널 마이크, 오른쪽 모니터. faster-whisper 전사, 선택적 pyannote 및 Obsidian용 Markdown LLM-summary. 모듈러 extras로 종속성 최소화.

Tapeback: 다이어라이제이션 포함 로컬 통화 녹음기
Advertisement 728x90

# 리눅스 CLI 미팅 레코더: 스테레오 화자 분리와 AI 요약

CLI 도구 tapeback은 PipeWire/PulseAudio를 통해 오디오를 캡처하고, faster-whisper로 전사하며, 스테레오 채널로 화자를 분리한 뒤 LLM으로 요약을 생성합니다. 결과는 지정한 디렉터리에 Markdown 파일로 저장됩니다—Obsidian 볼트도 가능합니다. 한 명령어로 녹음을 시작하고 Ctrl+C로 종료하면 파이프라인이 작동합니다: 캡처 → 전사 → 화자 분리 → 요약.

Zoom, Teams, Meet, Discord, Telegram을 지원합니다. 시스템 오디오만 캡처하므로 서비스 API가 필요 없습니다.

tapeback start
# 미팅 진행
# Ctrl+C → 처리 → Markdown

스테레오 화자 분리

이 아키텍처는 스테레오 WAV 파일을 활용합니다: 왼쪽 채널은 내 마이크("나"), 오른쪽 채널은 모니터 소스(다른 모든 사람)입니다. Whisper는 각 채널을 별도로 처리합니다. Pyannote 화자 분리는 오른쪽 채널에서만 실행되어 Speaker 1, 2 등을 라벨링합니다. 세그먼트는 RMS 에너지 레벨로 분류됩니다.

Google AdInline article slot

물리적 채널 분리는 클러스터링 오류를 없앱니다: 비슷한 목소리 혼동 없음, 한 화자를 여러 클러스터로 나누지 않음. GPU 가속으로 속도를 높이고, CUDA 오류 시 CPU로 폴백합니다.

┌─────────────┐     ┌──────────────┐     ┌────────────────────┐
│   Stereo    │     │   Whisper    │     │   Channel          │
│  WAV file   │───▶│  (per        │───▶│   Classification:  │
│  L: mic     │     │   channel)   │     │   L → "나"        │
│  R: monitor │     │              │     │   R → pyannote     │
└─────────────┘     └──────────────┘     │      for Others    │
                                         └────────────────────┘

선택적 종속성

기본 설치(~320 MB): 녹음 + 전사. 필요 없는 2 GB PyTorch 부피를 피할 수 있는 추가 기능:

| 변형 | 추가 기능 | 크기 |

Google AdInline article slot

|---------------|-----------------------|---------|

| tapeback | 녹음 + Whisper | ~320 MB|

| [llm] | 요약 (Anthropic, OpenAI, Groq...) | +50 MB |

Google AdInline article slot

| [diarize] | pyannote + PyTorch | +2 GB |

| [tray] | 시스템 트레이 | +1 MB |

우아한 폴백: pyannote 없음? 오른쪽 채널은 "기타"로 처리. __init__에서 지연 임포트.

LLM 통합과 폴백

7개 제공자 지원: Anthropic, OpenAI, Groq, Gemini, DeepSeek, OpenRouter, Qwen. OpenAI 호환은 통합 API와 베이스 URL 사용:

_OPENAI_COMPATIBLE_BASE_URLS = {
    "groq": "https://api.groq.com/openai/v1",
    "gemini": "https://generativelanguage.googleapis.com/v1beta/openai/",
    "deepseek": "https://api.deepseek.com",
    # ...
}

제공자 오류? 다음으로 자동 폴백. 전사는 항상 저장. Markdown에 내장된 JSON 요약:

## 요약
간단 개요.
### 액션 아이템
- [ ] **나:** 금요일까지 보고서 보내기
- [ ] **Speaker 1:** PR 검토
### 주요 결정
- MongoDB 대신 PostgreSQL

Arch Linux 패키징

AUR에서 4개 메타패키지로 제공:

  • tapeback — 핵심.
  • tapeback-tray — 트레이.
  • tapeback-llm — LLM 지원.
  • tapeback-diarize — PyTorch + pyannote.

yay가 venv에서 pip 종속성을 처리합니다. release.sh + PyPI CI (Trusted Publisher) + AUR 스크립트로 릴리스.

yay -S tapeback tapeback-diarize tapeback-llm tapeback-tray

설정은 ~/.config/tapeback/.env:

TAPEBACK_VAULT_PATH=~/Documents/obsidian/vault

개발과 배운 점

MVP 3일 만에 완성, v0.8.9는 2주(버그, 테스트). 명세 주도: 완료 기준이 있는 Markdown 명세. Claude 코드에 리뷰. PyPI/AUR 이름은 일찍 확인—정규화로 echo-vault == echovault.

주요 요점

  • 스테레오 분리: 마이크(나) vs 모니터(기타)—결정적, pyannote의 확률적 오류 피함.
  • 로컬 처리: faster-whisper + 선택적 PyTorch, 클라우드 불필요.
  • 모듈성: 화자 분리/LLM/트레이 추가 기능, 부드러운 폴백.
  • 통합: JSON 요약(액션 아이템, 결정) 포함 Obsidian용 Markdown.
  • 설치: uv tool install tapeback[tray,diarize,llm] 또는 AUR.

— Editorial Team

Advertisement 728x90

다음 읽기