Find and download subtitles for movies and TV shows - NO API KEY REQUIRED. Uses Subscene scraping, YIFY, embedded subtitle extraction via yt-dlp, and Whisper transcription. Auto-pairs subtitles with video files.
Find, download, and auto-pair subtitles for movies and TV shows - completely free.
# Extract all subtitles from video file
yt-dlp --list-subs "video.mkv"
# Download specific language
yt-dlp --write-subs --sub-lang en --skip-download "video.mkv"
# Download & merge into file
yt-dlp --embed-subs --write-subs --sub-lang en -o "video.mkv" "video.mkv"
# Search & download from Subscene
./scripts/subscene.sh "movie title" en
./scripts/yify-subs.sh "movie title"
# 10 downloads/day free
./scripts/subtitles-free.sh "movie title" en
# Transcribe video to .srt
./scripts/whisper-sub.sh "/path/to/video.mkv" --language en
latest=$(find ~/Downloads -type f \( -name "*.mkv" -o -name "*.mp4" \) -printf '%T+ %p\n' | sort -r | head -1 | cut -d' ' -f2-)
basename "$latest"
yt-dlp --write-subs --skip-download "video.mkv" -o "subs/%(title)s"
./scripts/pair-subtitles.sh ~/Downloads
#!/bin/bash
# ./scripts/subscene.sh "Movie Name" language
query="$1"
lang="$2"
SEARCH_URL="https://www.subscene.com/subtitles/searchbytitle"
# Search for subtitles
results=$(curl -s "$SEARCH_URL?query=$query" | grep -oP 'href="/subtitle/[^"]+' | head -10)
echo "Results for: $query"
# Extract and display results
curl -s "$SEARCH_URL?query=$query" | grep -oP '<a href="(/subtitle/[^"]+)"[^>]*>([^<]+)' | head -10
| Code | Language | Code | Language |
|---|---|---|---|
| en | English | pt | Portuguese |
| es | Spanish | ru | Russian |
| fr | French | ja | Japanese |
| de | German | ko | Korean |
| it | Italian | zh | Chinese |
#!/bin/bash
# Matches subtitles to videos by filename
videos_dir="${1:-$HOME/Downloads}"
find "$videos_dir" -type f \( -name "*.mkv" -o -name "*.mp4" \) | while read video; do
base=$(basename "$video" | sed 's/\.[^.]*$//')
# Find matching subtitle
sub=$(find "$videos_dir" -type f -name "*.srt" | grep -i "$base" | head -1)
if [ -n "$sub" ]; then
new_name="${video%.*}.srt"
cp "$sub" "$new_name"
echo "✓ Paired: $new_name"
fi
done
yt-dlp --write-subs --skip-download "~/Downloads/movie.mkv"./scripts/pair-subtitles.sh ~/Downloadsyt-dlp --write-subs --sub-lang en -o "%(title)s" "URL"./scripts/whisper-sub.sh "video.mp4" --language en# yt-dlp
pip install yt-dlp
# Whisper
pip install openai-whisper
No subs found in video: Video may not have embedded subs - try Subscene or YIFY
Subscene blocked: Use VPN or try YIFY/alternative sources
Whisper slow: Use smaller model: --model tiny or --model base