transcribe-maker
SkillMediaTranscribe audio / video to SRT / WebVTT / JSON / plain text via OpenAI Whisper or the GPT-4o transcribe models. Auto-detects language or accepts --lang ISO-639-1. $0.003-0.006/min. Pairs with subtitle-burner. API limit 25 MB/call. Use when: 'transcribe this video', 'subtitles from audio', 'speech to text', 'распознай речь', 'сделай субтитры из видео', 'whisper'.
Use transcribe-maker in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add transcribe-maker and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the transcribe-maker skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
What this skill tells your AI
The instructions your AI receives, as published by mikefluff/skills in skills/transcribe-maker/SKILL.md and read by Ahel’s review.
Distinct from voiceover-maker:
- voiceover-maker generates SPEECH from text. This goes the OPPOSITE direction: speech → text.
- Both wrap an OpenAI audio API endpoint.
Distinct from subtitle-burner:
- subtitle-burner takes an existing subtitle file and burns it into video. THIS skill GENERATES the subtitle file. Chain them:
transcribe-maker→subtitle-burner.
This skill does NOT:
- Translate the transcript (Whisper supports it via separate endpoint; not exposed in v1 — use OpenAI's
/v1/audio/translationsdirectly if needed) - Identify speakers / diarize (Whisper doesn't natively diarize — use deepgram or assemblyai for that)
- Process files >25 MB (Whisper API limit — split with ffmpeg first)
- Run locally (uses OpenAI API; for offline use whisper.cpp directly)
- Edit / clean up transcript (raw Whisper output may have minor errors — manual cleanup needed for production captions)
ROLE
Read audio/video input → call OpenAI Whisper API with the requested format → save subtitle / transcript file.
PIPELINE
-
Resolve input:
--input <path>— audio (.mp3, .wav, .m4a) or video (.mp4, .mov, .webm) (required)
-
Pick output format:
--format srt(default) — forsubtitle-burnerconsumption--format vtt— WebVTT (YouTube / HTML5<track>)--format text— plain transcript, no timestamps--format json— Whisper raw JSON (simple)--format verbose_json— JSON with word-level timestamps + segments
-
Resolve language (optional):
--lang en/--lang ru/--lang deetc. — ISO-639-1 hint- Auto-detect if omitted
-
Pre-flight:
- Check OPENAI_API_KEY set
- Check file ≤25 MB
- Cost estimate via ffprobe
-
Execute — POST to OpenAI
/v1/audio/transcriptions. -
Save:
- Default:
<input-stem>.<format>next to source - Custom:
--output <path>
- Default:
MODES
Required
transcribe-maker --input <path>
Optional
--format srt|vtt|json|text|verbose_json(defaultsrt)--model whisper-1|gpt-4o-transcribe|gpt-4o-mini-transcribe(defaultwhisper-1)--lang <ISO-639-1>— language hint (default: auto-detect)--temperature <0-1>— Whisper sampling temp (default 0; deterministic)--output <path>— explicit output path--yes— skip cost confirmation--check— verify env + connectivity--cost-only— print estimated cost + exit
PICKING A MODEL
The choice is decided by the output format, not by quality — only whisper-1
emits subtitles.
| Need | Model | Cost/min |
|---|---|---|
| SRT / VTT / word-level timestamps | whisper-1 | $0.006 |
| Plain transcript, highest accuracy | gpt-4o-transcribe | $0.006 |
| Plain transcript, bulk / cheapest | gpt-4o-mini-transcribe | $0.003 |
The GPT-4o transcribe models return json/text only. Asking one of them for srt
fails fast with a message rather than handing subtitle-burner something it
cannot burn. So anything feeding the subtitle pipeline stays on whisper-1; the
GPT-4o tiers are for transcripts a human or an LLM will read.
REFERENCES (load on demand)
| File | When to load |
|---|---|
| references/formats.md | Output format details, when to pick each, Whisper segment behavior |
| references/preprocessing.md | When file >25MB: how to split / compress with ffmpeg |
| references/troubleshoot.md | When transcription has errors, language mis-detected, timestamps drift |
EXAMPLES
See examples/before-after.md — 3 calibration runs: tutorial video to SRT, Russian podcast to text transcript, multilingual interview with word-level timestamps.
CONSTRAINTS
-
OpenAI API key required. Set via
/skills-keys add OPENAI_API_KEY .... -
File size limit: 25 MB. Whisper API hard limit. For larger files:
- Audio: re-encode to lower bitrate (
ffmpeg -i input.wav -b:a 64k input.mp3) - Video: extract audio only (
ffmpeg -i video.mp4 -vn -acodec copy audio.aac) - Long files: split with ffmpeg into <25 MB chunks, transcribe each, concatenate
- Audio: re-encode to lower bitrate (
-
Cost: ~$0.006/min. A 60-min podcast = ~$0.36. Very affordable for most use cases.
-
Language auto-detect is good but not perfect. For multilingual content, pass
--langexplicitly for best results. -
Whisper has known weaknesses:
- Names / proper nouns sometimes wrong
- Technical jargon often substituted with phonetic alternatives
- Very quiet audio → hallucination of plausible-but-wrong text
- Background music interference
-
Always proofread for production use. Raw Whisper output is ~95% accurate for clean speech; 80-90% for noisy/accented/technical content.
-
No speaker diarization. Whisper transcribes ALL speech but doesn't tag who's speaking. For multi-speaker tagging: use Deepgram / AssemblyAI (not in scope for v1).
-
SRT format includes timestamps. Word-level timestamps via
--format verbose_json. Sentence-level via--format srtorvtt. -
For burning captions on video: chain with
subtitle-burner:transcribe-maker --input video.mp4 --format srt --output captions.srt --execute subtitle-burner burn ./video.mp4 --subtitle ./captions.srt --style modern -
Never print API keys.
INVOCATION HINTS
When the user says any of:
- "transcribe this video / audio", "subtitles from audio", "speech to text"
- "распознай речь", "сделай субтитры из видео", "превратить аудио в текст"
- "whisper this", "extract dialogue from video"
If the user wants final burned-in captions: suggest chaining with subtitle-burner.
If the user has only audio: transcribe works the same. If only video: works (transcribes audio track).
Defaults: --format srt --temperature 0 (best for captions). For plain transcript / blog post draft: --format text. For analytics / word-level alignment: --format verbose_json.
This skill is distinct from:
voiceover-maker— text → speech (opposite direction)subtitle-burner— burns existing subtitles onto video; this produces themaudio-mix-maker— mixing, not recognitionmusic-prompt— generates music, not transcription
Signals
- GitHub stars
- 21
- Forks
- 1
- Last commit
- Sep 2026
Ahel review
K1binfo
installs-packages (in references/preprocessing.md)
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Item type
- skill
- Key
transcribe-maker- Source
- github.com/mikefluff/skills