Przejdź do treści
Biblioteka skilli
Dokumenty i biuro · Konwersja i formaty

transcribe

/transcribe

Zamienia nagrania audio i wideo na tekst przez 妙记 (Volcano Lark Minutes), z rozdzieleniem mówców, a Gemini lub OpenAI jako zapas.

Repozytorium
ax-skills ↗
Licencja
MIT
Ostatnia zmiana repozytorium
16.10.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
5
Skrypty
2
Komentarze HTML
0
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 16.10.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co sprawdzić przed instalacją
  • 2 skrypty w paczce. Przejrzyj je przed instalacją, bo Claude może je uruchomić.

Skrypty: transcribe_any.py, volc_lark.py

Co robi i kiedy

Zamienia nagrania audio i wideo na tekst przez 妙记 (Volcano Lark Minutes), z rozdzieleniem mówców, a Gemini lub OpenAI jako zapas.

Wyzwalacze z opisu

transcribe audiotranscribe videospeech to textconvert audio to texttranscription
Oryginalny opis (EN)

This skill should be used when the user wants to "transcribe audio", "transcribe video", "speech to text", "convert audio to text", "transcription", or needs to extract text from audio/video files. Default engine is 妙记 (Volcano Lark Minutes ASR) for best speaker diarization; Gemini/OpenAI available as fallbacks. Supports files up to ~8.4 hours with speaker diarization.

Jak działa

  1. Overview
  2. ⚠️ Ask the user how many speakers (for lark)
  3. Capabilities
  4. Setup (one-time)
  5. Quick Start
  6. Workflow
  7. CLI Arguments
  8. Tunable Env Vars
  9. Output Example
  10. Fallback Providers (gemini / openai)
Sekcje z nagłówków SKILL.md, w oryginale · 143 linii, 997 słów
Podgląd SKILL.md
---
name: transcribe
description: This skill should be used when the user wants to "transcribe audio", "transcribe video", "speech to text", "convert audio to text", "transcription", or needs to extract text from audio/video files. Default engine is 妙记 (Volcano Lark Minutes ASR) for best speaker diarization; Gemini/OpenAI available as fallbacks. Supports files up to ~8.4 hours with speaker diarization.
---

# Audio Transcription Skill (妙记 / Gemini / OpenAI)

## Overview

Transcribe audio and video files. Three providers, default **妙记 (Volcano Lark Minutes ASR, `volc.lark.minutes`)**:

| Provider | When | Diarization |
|---|---|---|
| **`lark`** (默认 妙记) | Default — best speaker accuracy, single call | Server-side, most accurate |
| `gemini` | Fallback — no Volcano creds, or non-diarized notes | Chunk-stitched + Senko/pyannote |
| `openai` | Fallback — granular turn detection | gpt-4o-transcribe-diarize |

**Why 妙记 is the default:** verified across 5 real recordings (2026-06-17), 妙记 returned the exact speaker count on every 2-person conversation (2/2/2/2) while Gemini-chunk-stitch, OpenAI, and the raw Doubao auc models all over-counted (3–5 speakers). 妙记 does server-side diarization in a **single call** (no chunking, no cross-chunk speaker reconcile) and handled a 3.45-hour file in one pass.

## ⚠️ Ask the user how many speakers (for `lark`)

Before transcribing with 妙记, **ask the user how many speakers are in the audio** if it isn't obvious. Pass it via `--speakers N`. Use `--speakers 0` (auto-detect) only when the count is unknown — auto is good but a known count improves accuracy. Example prompt: *"How many people are speaking in this recording? (I'll auto-detect if you're not sure.)"*

## Capabilities

- **Speaker diarization**: `SPEAKER_1`, `SPEAKER_2`, … (妙记 server-side; best accuracy)
- **Audio length**: single-call up to several hours (妙记 handled 3.45h); Gemini/OpenAI auto-chunk
- **Auto language detection** + **code-switching**: Chinese + English mixed handled cleanly
- **Formats**: MP3, WAV, M4A, MP4, OGG, FLAC, WebM, AAC (auto-converted to 16kHz mono mp3 before upload)

## Setup (one-time)

```bash
cd <skill-dir>           # e.g. ~/.claude/plugins/transcribe
python3 -m venv venv
./venv/bin/pip install tos requests          # 妙记 (default): TOS hosting + API
./venv/bin/pip install google-genai openai   # optional, for --provider gemini/openai
brew install ffmpeg                           # required (audio conversion + chunking)

# Credentials in the skill's .env (gitignored):
#   妙记 (default):
echo 'VOLC_API_KEY=...'           >> .env     # 妙记 x-api-key
echo 'VOLC_TOS_ACCESS_KEY=...'    >> .env     # Volcano TOS (hosts audio for 妙记 to fetch)
echo 'VOLC_TOS_SECRET_KEY=...'    >> .env
echo 'VOLC_TOS_BUCKET=...'        >> .env
echo 'VOLC_TOS_REGION=...'        >> .env     # e.g. cn-shanghai
echo 'VOLC_TOS_ENDPOINT=...'      >> .env     # e.g. tos-cn-shanghai.volces.com
#   fallbacks (optional):
echo 'GEMINI_API_KEY=...'         >> .env
echo 'OPENAI_API_KEY=...'         >> .env
```

How 妙记 hosting works: the skill converts the audio to a small 16kHz-mono mp3, uploads it to Volcano TOS, hands 妙记 a presigned URL, then deletes the object after transcription. 妙记 fetches from TOS intra-China (fast); the only cross-border leg is the upload, minimized by compression + parallel multipart.

## Quick Start

```bash
# Default 妙记 — ask the user for speaker count first
<skill-dir>/venv/bin/python <skill-dir>/transcribe_any.py meeting.m4a --speakers 2 --out_txt transcript.md

# 妙记 auto speaker detection (count unknown)
<skill-dir>/venv/bin/python <skill-dir>/transcribe_any.py interview.m4a --out_txt transcript.md

# Fallback providers
<skill-dir>/venv/bin/python <skill-dir>/transcribe_any.py audio.mp3 --provider gemini --diarize --out_txt transcript.md
<skill-dir>/venv/bin/python <skill-dir>/transcribe_any.py audio.mp3 --provider openai --out_txt transcript.md
```

> Replace `<skill-dir>` with the absolute path where the skill is installed.

## Workflow

### 1. Ask about speaker count (for default 妙记)
If the speaker count isn't obvious, ask the user. Pass `--speakers N` (or omit / `0` for auto).

### 2. Determine output file path
**ALWAYS save the transcript to a file.** Replace the audio extension with `_transcript.md`:
- `/path/to/meeting.m4a` → `/path/to/meeting_transcript.md`

### 3. Run transcription
```bash
<skill-dir>/venv/bin/python <skill-dir>/transcribe_any.py "/path/audio.m4a" --speakers N --out_txt "/path/audio_transcript.md"
```

## CLI Arguments

| Argument | Description | Default |
|----------|-------------|---------|
| `--provider` | `lark` (妙记), `gemini`, or `openai` | `lark` |
| `--speakers` | Expected speaker count for `lark` (0 = auto) | `0` |
| `--model` | Gemini model (ignored for `lark`/`openai`) | `gemini-3.5-flash` |
| `--diarize` | Speaker ID for `gemini` (implied for `lark`/`openai`) | False |
| `--language` | ISO-639-1 code (zh, en, ja) for gemini/openai | Auto-detect |
| `--out_txt` | Save the markdown transcript to a file (use a `.md` path) | None |
| `--out_json` | Save full response to JSON | None |

The skill prints (and `--out_txt` saves) a **markdown document**: a header with
metadata + the diarized transcript inside a fenced code block, so it renders
cleanly anywhere markdown is shown.

## Tunable Env Vars

| Env Var | Description | Default |
|---|---|---|
| `VOLC_API_KEY`, `VOLC_TOS_*` | 妙记 + TOS credentials (required for `lark`) | — |
| `LARK_MP3_BITRATE` | mp3 bitrate for upload (lower = faster upload) | `32k` |
| `LARK_SOURCE_LANG` | 妙记 source language | `zh_cn` |
| `LARK_UPLOAD_TASKS` | Parallel multipart upload connections | `8` |
| `CHUNK_*`, `CHUNK_PARALLELISM` | Gemini/OpenAI chunking knobs | see code |
| `GEMINI_API_KEY` / `OPENAI_API_KEY` | Fallback providers | — |

## Output Example

The output is a markdown document:

````
# meeting

> provider: lark · model: volc.lark.minutes · speakers: 2

## Transcript

```
[00:00:20 - 00:00:45] SPEAKER_1: 欢迎收听本期节目。
[00:00:45 - 00:01:05] SPEAKER_2: Thanks for having me.
```
````

## Fallback Providers (gemini / openai)

Both auto-split long audio at silence boundaries (ffmpeg `silencedetect`) and transcribe chunks in parallel, then reconcile speaker labels across chunks. This was the original engine before 妙记; use it when Volcano creds aren't available.

- **gemini** (default fallback): Gemini 3 Flash loops/fabricates timestamps on single-call audio > ~15 min, so chunking is what makes it usable. Good punctuation + code-switching; diarization is chunk-stitched (less accurate than 妙记).
- **openai** `gpt-4o-transcribe-diarize`: always diarized, granular turn detection; sometimes runs sentences together and mis-handles Chinese fillers.

## Troubleshooting

- **`妙记 provider unavailable` / missing creds:** ensure `tos requests` are installed in the venv and `VOLC_API_KEY` + `VOLC_TOS_*` are in `.env`. Fall back with `--provider gemini`.
- **Slow upload:** cross-border upload to a China TOS region can throttle; the skill compresses + uses parallel multipart. Lower `LARK_MP3_BITRATE` (e.g. `16k`) to shrink the upload further.
- **Unicode filename error:** `cp "中文名.m4a" /tmp/audio.m4a` then transcribe the copy.
- **ffmpeg not found:** required for audio conversion. `brew install ffmpeg`.

## Notes

- 妙记 wall time: ~100–150s for a 30–60 min file (single call); the 3.45h test ran in one pass.
- Gemini API cost: ~$0.20 for a 2-hour file. OpenAI: ~$0.90 for a 2-hour file.
Pliki w paczce (5)
  • .gitignore 1 KB
  • README.md 3 KB
  • SKILL.md 7 KB
  • transcribe_any.py 34 KB
  • volc_lark.py 12 KB

Wersje

RepozytoriumWynikLicencja
Ta strona · xingfanxia/ax-skills100MIT
fabioannovazzi/app_files100AGPL-3.0
seaworld008/commonly-used-high-value-skills100MIT
davila7/claude-code-templates100MIT
codingjoe/VoIP100AGPL-3.0
digital-stoic-org/agent-skills100MIT
pandysp/claude-plugins100MIT
letta-ai/skills100MIT
henkisdabro/wookstar-claude-plugins100MIT

Migawka bazy z 28.10.2026 · wersja paczki d0febe6ea0a9 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100video-transcription
    Transkrybuje wideo i audio do napisów SRT z rozpoznawaniem mówców przez API Soniox (domyślnie) lub AssemblyAI, dla MKV, MP4, MOV, M4A i MP3.
  • 100asr
    Transkrybuje pliki audio na tekst lokalnym rozpoznawaniem mowy.
  • 100whisper
    Transkrybuje nagrania audio na tekst modelem OpenAI Whisper lokalnie lub przez API: napisy SRT i VTT, podcasty, spotkania, notatki głosowe i rozpoznawanie mówców.
  • 90doubao-asr(豆包语音转写)
    Transkrybuje nagrane pliki audio na tekst modelem Doubao Seed-ASR 2.0 od ByteDance i Volcengine, z rozpoznawaniem języka chińskiego i rozdzielaniem mówców, dla plików m4a, mp3, wav, ogg i flac.
  • 100transcribe-audio
    Transkrybuje audio lub wideo do tekstu lokalnie uruchamianym modelem rozpoznawania mowy i pomaga skonfigurować lub zmienić lokalny model transkrypcji.
  • 100ali-asr
    Transkrybuje pliki audio i wideo lub publiczne adresy URL przez Alibaba Cloud DashScope: znaczniki czasu zdań, rozdzielanie mówców, poprawianie haseł i wiele języków, z wynikiem w JSON.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.