Subtitle Basics
yt-dlp provides extensive support for downloading, processing, and embedding subtitles from various video sources. This guide covers all subtitle-related features and options.
Basic Subtitle Operations
Download Subtitles
# Download available subtitles
yt-dlp --write-subs "https://example.com/video"
# Download auto-generated subtitles
yt-dlp --write-auto-subs "https://example.com/video"
# Download both manual and auto-generated
yt-dlp --write-subs --write-auto-subs "https://example.com/video"
List Available Subtitles
# Show all available subtitle languages
yt-dlp --list-subs "https://example.com/video"
Language Selection
Specific Languages
# Download specific language
yt-dlp --write-subs --sub-langs en "https://example.com/video"
# Download multiple languages
yt-dlp --write-subs --sub-langs en,es,fr "https://example.com/video"
# Download all available languages
yt-dlp --write-subs --sub-langs all "https://example.com/video"
Language Patterns
# Use regex patterns for languages
yt-dlp --write-subs --sub-langs "en.*" "https://example.com/video"
# Exclude specific languages
yt-dlp --write-subs --sub-langs "all,-live_chat" "https://example.com/video"
# Exclude auto-generated
yt-dlp --write-subs --sub-langs "all,-.*auto.*" "https://example.com/video"
Subtitle Formats
Format Selection
# Prefer SRT format
yt-dlp --write-subs --sub-format srt "https://example.com/video"
# Multiple format preferences
yt-dlp --write-subs --sub-format "srt/ass/vtt/best" "https://example.com/video"
# Best available format
yt-dlp --write-subs --sub-format best "https://example.com/video"
Supported Formats
- SRT: SubRip Text format (most compatible)
- ASS: Advanced SubStation Alpha (styled subtitles)
- VTT: WebVTT format (web-optimized)
- TTML: Timed Text Markup Language
- JSON: Raw subtitle data
Embedding Subtitles
Embed in Video File
# Embed subtitles in video
yt-dlp --embed-subs "https://example.com/video"
# Embed specific languages
yt-dlp --embed-subs --sub-langs en,es "https://example.com/video"
# Write and embed subtitles
yt-dlp --write-subs --embed-subs "https://example.com/video"
Container Compatibility
# Embed in MP4 (limited format support)
yt-dlp --embed-subs --merge-output-format mp4 "https://example.com/video"
# Embed in MKV (supports all subtitle formats)
yt-dlp --embed-subs --merge-output-format mkv "https://example.com/video"
# Embed in WebM
yt-dlp --embed-subs --merge-output-format webm "https://example.com/video"
Live Chat and Comments
YouTube Live Chat
# Download live chat as subtitles
yt-dlp --write-subs --sub-langs live_chat "https://youtube.com/watch?v=VIDEO_ID"
# Exclude live chat from all subtitles
yt-dlp --write-subs --sub-langs "all,-live_chat" "https://youtube.com/watch?v=VIDEO_ID"
Comments as Subtitles
# Write comments to infojson
yt-dlp --write-comments "https://example.com/video"
# Get comments even for quick extraction
yt-dlp --get-comments "https://example.com/video"
Subtitle Processing
Format Conversion
# Convert subtitles to different format
yt-dlp --write-subs --convert-subs srt "https://example.com/video"
# Convert to ASS for styling
yt-dlp --write-subs --convert-subs ass "https://example.com/video"
# Convert to VTT for web use
yt-dlp --write-subs --convert-subs vtt "https://example.com/video"
Subtitle Organization
# Custom subtitle output template
yt-dlp --write-subs \
-o "%(title)s.%(ext)s" \
-o "subtitle:%(title)s.%(lang)s.%(ext)s" \
"https://example.com/video"
# Organize by language
yt-dlp --write-subs \
-o "subtitle:subs/%(lang)s/%(title)s.%(ext)s" \
"https://example.com/video"
Advanced Subtitle Features
Platform-Specific Features
# YouTube with auto-translation
yt-dlp --write-auto-subs --sub-langs "en.*" "https://youtube.com/watch?v=VIDEO_ID"
# Twitch chat replay
yt-dlp --write-subs --sub-langs "rechat" "https://twitch.tv/videos/VIDEO_ID"
Subtitle Extraction from Manifests
# Extract from HLS manifests
yt-dlp --write-subs "https://example.com/video.m3u8"
# Extract from DASH manifests
yt-dlp --write-subs "https://example.com/video.mpd"
Batch Subtitle Operations
Playlist Subtitles
# Download subtitles for entire playlist
yt-dlp --write-subs --sub-langs en \
-o "%(playlist)s/%(title)s.%(ext)s" \
"https://youtube.com/playlist?list=PLAYLIST_ID"
# Organize subtitles separately
yt-dlp --write-subs \
-o "videos/%(title)s.%(ext)s" \
-o "subtitle:subs/%(title)s.%(lang)s.%(ext)s" \
"https://youtube.com/playlist?list=PLAYLIST_ID"
Subtitle Metadata
Language Information
# Include language metadata
yt-dlp --write-info-json --write-subs "https://example.com/video"
Custom Subtitle Processing
# Post-process subtitles with custom script
yt-dlp --write-subs \
--exec "after_move:python process_subs.py %(filepath)q" \
"https://example.com/video"
Troubleshooting Subtitles
Common Issues
- No subtitles available: Check with
--list-subs - Format not supported: Try different
--sub-format - Embedding fails: Check container format compatibility
- Live chat too large: Filter or limit languages
Debug Subtitle Issues
# Verbose subtitle information
yt-dlp --write-subs --verbose "https://example.com/video"
# Check available formats
yt-dlp --list-subs --list-formats "https://example.com/video"
Subtitle Configuration
Configuration File Example
# ~/.config/yt-dlp/config
--write-subs
--sub-langs en,es
--sub-format srt
--convert-subs srt
Conditional Subtitle Download
# Only download if subtitles exist
yt-dlp --write-subs --ignore-no-formats-error "https://example.com/video"