Skip to content
Content
Skill

/transcribe-video

Extract transcript or subtitles from a local video file. Use this skill whenever the user asks to transcribe a video, extract speech-to-text, get subtitles, or wants a text version of what's said in a video. Also trigger on "提取字幕", "视频转文字", "语音转文字", "transcribe", "extract audio

From plugin
video-skills
153 skills

Claude Code

$ npx -y skills add feiskyer/video-skills --skill transcribe-video --agent claude-code

SKILL.md

transcribe-video.SKILL.md
name: transcribe-video
metadata:
  version: "1.0.3"
description: Extract transcript or subtitles from a local video file. Use this skill whenever the user asks to transcribe a video, extract speech-to-text, get subtitles, or wants a text version of what's said in a video. Also trigger on "提取字幕", "视频转文字", "语音转文字", "transcribe", "extract audio text", or when the user references getting a script/transcript from any video file (mp4, mkv, mov, avi, webm). This skill is for LOCAL video files — for YouTube or other online URLs, use the download-video skill first to get the file, then transcribe it.

Transcribe Video

Extract transcript text from a local video file. The skill checks for embedded subtitles first (faster and more accurate), and only falls back to API-based speech recognition if none are found.

Step 1: Identify the video file

Confirm the video file path with the user. Supported formats: mp4, mkv, mov, avi, webm, and any format ffmpeg can handle.

Step 2: Check for embedded subtitles

ffprobe -v quiet -select_streams s -show_entries stream=index,codec_name:stream_tags=language,title -of json "<video_path>"
  • If subtitle streams exist → go to **Step 3a** (extract embedded subtitles)
  • If no subtitle streams → go to **Step 3b** (API transcription)

Step 3a: Extract embedded subtitles

If multiple subtitle tracks exist, prefer the one matching the video's primary language or ask the user which track to use.

# Extract as SRT (stream index 0 for first subtitle track; adjust if needed)
ffmpeg -i "<video_path>" -map 0:s:0 -c:s srt "<output_path>.srt" -y

After extraction, convert SRT to clean text:

  • Remove sequence numbers
  • Remove timestamp lines (lines matching `\d{2}:\d{2}:\d{2}`)
  • Remove HTML-like tags (`<i>`, `</i>`, etc.)
  • Join remaining non-empty lines

Save the clean transcript to `<video_name>.txt` next to the video file. Done — skip Step 3b.

Step 3b: API-based transcription

Use the bundled transcription script. It reads credentials from `~/.transcribe_video.env`.

Prerequisites check

1. Verify the env file exists:

   test -f ~/.transcribe_video.env && echo "OK" || echo "MISSING"

2. If MISSING, tell the user to create `~/.transcribe_video.env` with:

   OPENAI_API_KEY=your-key-here
   # Optional Base URL:
   # OPENAI_API_BASE=https://<base-url>/v1/
   # Optional Model Name:
   # TRANSCRIBE_MODEL=gpt-4o-transcribe

Wait for the user to confirm before proceeding.

3. Verify dependencies:

   python3 -c "from openai import OpenAI; from dotenv import load_dotenv; print('OK')" 2>&1

Install or update in the active virtual environment: `python -m pip install --upgrade -r <skill_directory>/requirements.txt`. Use Python 3.11 or newer.

Run transcription

python3 <skill_directory>/scripts/transcribe.py "<video_path>"

The script extracts audio (WAV, 16kHz mono), sends it to the API, and saves the transcript to `<video_name>.txt` next to the video file.

Whisper and diarization models return segment timestamps; other transcription models return plain text. The script selects `verbose_json`, `diarized_json`, or `json` to match the model and reads the SDK's typed segment objects.

Step 4: Report results

Tell the user:

  • Where the transcript file was saved
  • How many lines / approximate word count
  • Whether it came from embedded subtitles or API transcription
  • Display the first few lines as a preview
Read more
@feiskyer
Ships withvideo-skills

Skills for working with videos - download, transcribe, and narrate.

Stars on GitHub

Momentum

stars in total
15
Star history of feiskyer/video-skills on GitHub, a chart by star-history.com

Other skills on video-skills.

download-video

download-video

Download videos from 1000+ websites (YouTube, Bilibili, Twitter/X, TikTok, Vimeo, Instagram, Twitch, etc.) using yt-dlp. Use this…

narrate-video

narrate-video

Generate professional voiceover narration for a video with audio-video sync using Azure TTS by default, or Gemini 3.1 Flash TTS…

More skills from other plugins.

prompt-lookup

prompt-lookup

Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…

@gh-f@gh-fInstall Skill
ppt-master

ppt-master

AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…

@hugohe3@hugohe3Install Skill
morph-ppt

morph-ppt

Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…

officecli13d33k
@iofficeai@iofficeaiInstall Skill

Questions about transcribe-video.

Which coding agents can use transcribe-video?
transcribe-video installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.