From media
Audio/video transcription - Whisper, Deepgram, AssemblyAI comparison and usage
npx claudepluginhub willsigmon/sigstack --plugin mediaThis skill is limited to using the following tools:
Choose the right transcription service for your use case.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Automates semantic versioning and release workflow for Claude Code plugins: bumps versions in package.json, marketplace.json, plugin.json; verifies builds; creates git tags, GitHub releases, changelogs.
Choose the right transcription service for your use case.
| Service | Price/min | Speed | Diarization | Real-time |
|---|---|---|---|---|
| Whisper API | $0.006 | Slow | No (+extra) | No |
| Deepgram | $0.0043 | 20s/hr | Yes | Yes |
| AssemblyAI | $0.0025 | Fast | +$0.02/hr | Yes |
from openai import OpenAI
client = OpenAI()
with open("audio.mp3", "rb") as f:
transcript = client.audio.transcriptions.create(
model="whisper-1", file=f
)
print(transcript.text)
from deepgram import DeepgramClient, PrerecordedOptions
dg = DeepgramClient(api_key="...")
options = PrerecordedOptions(model="nova-3", diarize=True)
response = dg.listen.rest.v1.transcribe_file(
{"buffer": open("audio.mp3", "rb")}, options
)
import assemblyai as aai
aai.settings.api_key = "..."
transcriber = aai.Transcriber()
transcript = transcriber.transcribe("audio.mp3")
print(transcript.text)
options = PrerecordedOptions(diarize=True)
# Response includes speaker labels automatically
config = aai.TranscriptionConfig(speaker_labels=True)
# +$0.02/hr additional
# Need separate diarization service like pyannote
from pyannote.audio import Pipeline
pipeline = Pipeline.from_pretrained("pyannote/speaker-diarization")
import asyncio
async def transcribe_batch(files):
tasks = [transcribe(f) for f in files]
return await asyncio.gather(*tasks)
Use when: Podcast transcription, meeting notes, video subtitles, voice content indexing