transcribe-video — Claude Code skill for video transcripts
Creates subtitle files and plain-text transcripts from audio or video with AWS Transcribe. Use it to caption clips or make spoken content searchable.
npx skills add rameerez/claude-code-startup-skills --skill transcribe-video -a claude-codeWhat transcribe-video does
The skill extracts audio from a video with ffmpeg, uploads it to a temporary S3 bucket, then starts an AWS Transcribe job. It saves .srt and .vtt subtitles beside the original file, along with a .txt transcript without timestamps.
You need ffmpeg and a configured aws CLI with credentials that allow s3:* and transcribe:* operations. After transcription, the skill removes the bucket, the Transcribe job, and temporary files. If cleanup does not finish, objects left in S3 can continue to use storage and incur charges.
What it helps with
- create
.srtand.vttsubtitles from a video - turn an audio recording into a text transcript
- pull spoken words from a video for notes
- make video content searchable by transcript
Example prompts for the agent
- Create subtitles and a transcript for
meeting.mp4. - Transcribe
interview.mp3ines-ES. - Generate
.srt,.vtt, and.txtfiles fordemo.mp4.
How to install transcribe-video
1Skills CLI (Vercel)
npx skills add rameerez/claude-code-startup-skills --skill transcribe-video -a claude-code2Manually: put the files in place
~/.claude/skills/transcribe-video/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/transcribe-video/
1Skills CLI (Vercel)
npx skills add rameerez/claude-code-startup-skills --skill transcribe-video -a codex2Manually: put the files in place
.agents/skills/transcribe-video/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add rameerez/claude-code-startup-skills --skill transcribe-video -a cursor2Manually: put the files in place
.cursor/skills/transcribe-video/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install rameerez/claude-code-startup-skills transcribe-video2Manually: put the files in place
.github/skills/transcribe-video/SKILL.md1Skills CLI (Vercel)
npx skills add rameerez/claude-code-startup-skills --skill transcribe-video -a gemini-cli2Platform CLI
gemini skills install https://github.com/rameerez/claude-code-startup-skills --path skills/transcribe-videoManually: put the files in place
.devin/skills/transcribe-video/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add rameerez/claude-code-startup-skills --skill transcribe-video -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about transcribe-video
How do I install transcribe-video in Claude Code?
Run npx skills add rameerez/claude-code-startup-skills --skill transcribe-video -a claude-code. The skill file is placed at ~/.claude/skills/transcribe-video/SKILL.md.
What does transcribe-video do?
It sends audio from a video or audio file to AWS Transcribe and produces .srt and .vtt subtitles plus a plain-text .txt transcript.
What does transcribe-video need to run?
You need ffmpeg and a configured aws CLI. The AWS credentials must allow s3:* and transcribe:* operations.
Source text
SKILL.md · MIT
---
name: transcribe-video
description: Generate subtitles (SRT/VTT) and plain text transcripts from video or audio files using AWS Transcribe. Use when creating captions, extracting spoken content, generating transcripts for notes, or making video content searchable.
argument-hint: "[file] [language-code]"
allowed-tools: Bash(ffmpeg:*), Bash(aws:*), Bash(ls:*), Bash(rm:*), Bash(which:*)
---
# Video Transcription Skill
Generate subtitles and transcripts from `$ARGUMENTS` (a video or audio file path, optionally followed by a language code like `en-US` or `es-ES`) using AWS Transcribe.
Outputs `.srt`, `.vtt`, and `.txt` files next to the source file.
## Process
1. **Verify prerequisites** - check `ffmpeg` and `aws` CLI are installed and configured
2. **Extract audio** from the video as MP3 using ffmpeg
3. **Create temporary S3 bucket**, upload audio
4. **Run AWS Transcribe** job with SRT and VTT subtitle output
5. **Download results** and generate plain text transcript
6. **Clean up all AWS resources** - delete S3 bucket, Transcribe job, and temp files. No recurring costs.
## Prerequisites
- `ffmpeg` installed (`brew install ffmpeg`)
- `aws` CLI installed and configured with valid credentials (`brew install awscli && aws configure`)
- AWS credentials need permissions for: `s3:*` (create/delete buckets), `transcribe:*` (start/delete jobs)
## Step-by-Step
### Step 1: Extract audio
```bash
ffmpeg -i "input.mp4" -vn -acodec mp3 -q:a 2 "/tmp/transcribe-audio.mp3" -y
```
### Step 2: Create temp S3 bucket and upload
```bash
BUCKET="tmp-transcribe-$(date +%s)"
aws s3 mb "s3://$BUCKET" --region us-east-1
aws s3 cp "/tmp/transcribe-audio.mp3" "s3://$BUCKET/audio.mp3"
```
### Step 3: Start transcription job
```bash
JOB_NAME="tmp-job-$(date +%s)"
aws transcribe start-transcription-job \
--transcription-job-name "$JOB_NAME" \
--language-code en-US \
--media-format mp3 \
--media "MediaFileUri=s3://$BUCKET/audio.mp3" \
--subtitles "Formats=srt,vtt" \
--output-bucket-name "$BUCKET" \
--region us-east-1
```
**Language codes:** `en-US`, `es-ES`, `fr-FR`, `de-DE`, `pt-BR`, `ja-JP`, `zh-CN`, `it-IT`, `ko-KR`, etc. Default to `en-US` if not specified.
### Step 4: Poll until complete
```bash
while true; do
STATUS=$(aws transcribe get-transcription-job \
--transcription-job-name "$JOB_NAME" \
--region us-east-1 \
--query 'TranscriptionJob.TranscriptionJobStatus' \
--output text)
if [ "$STATUS" = "COMPLETED" ] || [ "$STATUS" = "FAILED" ]; then break; fi
sleep 5
done
```
### Step 5: Download subtitle files
Save `.srt` and `.vtt` next to the original file:
```bash
aws s3 cp "s3://$BUCKET/$JOB_NAME.srt" "/path/to/input.srt"
aws s3 cp "s3://$BUCKET/$JOB_NAME.vtt" "/path/to/input.vtt"
```
### Step 6: Generate plain text transcript
Download the JSON result and extract the full transcript text:
```bash
aws s3 cp "s3://$BUCKET/$JOB_NAME.json" "/tmp/transcribe-result.json"
```
Then use a tool to extract the `.results.transcripts[0].transcript` field from the JSON and save it as a `.txt` file next to the original.
### Step 7: Clean up everything
**IMPORTANT:** Always clean up to avoid recurring S3 storage costs.
```bash
# Delete S3 bucket and all contents
aws s3 rb "s3://$BUCKET" --force --region us-east-1
# Delete the transcription job
aws transcribe delete-transcription-job --transcription-job-name "$JOB_NAME" --region us-east-1
# Delete temp audio file
rm -f "/tmp/transcribe-audio.mp3" "/tmp/transcribe-result.json"
```
## Real-World Results (Reference)
From actual transcription runs:
| Video | Duration | Audio Size | Transcribe Time | Subtitle Segments |
|-------|----------|------------|-----------------|-------------------|
| X/Twitter clip | 2:40 | 2.5 MB | ~20 seconds | 83 |
| Screen recording | 18:45 | 11.4 MB | ~60 seconds | 500+ |
### Key Insights
1. **AWS Transcribe is fast** - even 19-minute videos complete in about a minute
2. **Short-form content** (tweets, reels) transcribes almost instantly
3. **Cost is negligible** - AWS Transcribe charges ~$0.024/min, so a 19-min video costs ~$0.46
4. **Cleanup is critical** - always delete the S3 bucket to avoid storage charges
5. **SRT is most compatible** - works with most video players and editors; VTT is better for web
## Output Files
```
original-video.mp4
original-video.srt # Subtitles with timestamps (most compatible)
original-video.vtt # Web-optimized subtitles (for HTML5 <track>)
original-video.txt # Plain text transcript (no timestamps)
```
## After Transcription
1. **Verify all output files exist**: `ls -lh /path/to/original-video.{srt,vtt,txt}`
2. Report the number of subtitle segments and total duration
3. Confirm all AWS resources have been cleaned up (no S3 buckets, no Transcribe jobs remaining)
© rameerez · MIT · rameerez/claude-code-startup-skills