Convert YouTube Transcript to SRT: Step-by-Step Guide
Learn how to convert YouTube transcripts to SRT subtitle format for video editing, translation, and accessibility. Includes online tools, manual methods, and automation scripts.
Key Takeaways
- SRT is the most widely supported subtitle format for video editing
- NoteLM.ai and yt-dlp can export YouTube transcripts directly as SRT
- SRT format: sequence number, timestamps (HH:MM:SS,mmm), text, blank line
- Keep subtitles under 42 characters per line, max 2 lines
- Use UTF-8 encoding to ensure special characters display correctly
- FFmpeg can burn subtitles directly into video files
To convert a YouTube transcript to SRT format, use a tool like NoteLM.ai that offers direct SRT export, or download the transcript and convert it using online converters or scripts. SRT (SubRip Text) is the most widely used subtitle format, compatible with virtually all video editors and players.
What Is SRT Format?
SRT (SubRip Text) is a simple, widely-supported subtitle file format.
SRT File Structure
1
00:00:00,000 --> 00:00:04,500
Welcome to this tutorial on YouTube transcripts
2
00:00:04,500 --> 00:00:08,200
Today we'll cover how to convert them to SRT
3
00:00:08,200 --> 00:00:12,800
This format works with most video editorsSRT Components Explained
| Component | Example | Purpose |
|---|---|---|
| Sequence number | 1, 2, 3... | Order of subtitles |
| Timestamp start | 00:00:00,000 | When subtitle appears |
| Timestamp end | 00:00:04,500 | When subtitle disappears |
| Arrow | --> | Separates start/end times |
| Text | Any text | The subtitle content |
| Blank line | (empty) | Separates entries |
Timestamp Format
HH:MM:SS,mmm
│ │ │ │
│ │ │ └── Milliseconds (000-999)
│ │ └───── Seconds (00-59)
│ └──────── Minutes (00-59)
└─────────── Hours (00+)Why Convert to SRT?
Video Editing Compatibility
| Video Editor | SRT Support |
|---|---|
| Adobe Premiere Pro | ✅ Native import |
| Final Cut Pro | ✅ Native import |
| DaVinci Resolve | ✅ Native import |
| iMovie | ⚠️ Via conversion |
| CapCut | ✅ Native import |
| Filmora | ✅ Native import |
Other Uses
- Accessibility: Add captions to any video platform
- Translation: Base file for subtitle translation
- Archiving: Standard format for subtitle libraries
- Burning in: Hardcode subtitles into video
Method 1: Direct SRT Export (Easiest)
Tools like NoteLM.ai export YouTube transcripts directly as SRT files.
Step-by-Step Instructions
Result
You'll get a properly formatted SRT file:
1
00:00:00,000 --> 00:00:03,500
Welcome to this video
2
00:00:03,500 --> 00:00:07,200
Today I'll show you something amazing
3
00:00:07,200 --> 00:00:11,000
Let's get started with the first stepMethod 2: yt-dlp (Command Line)
Download subtitles directly in SRT format using yt-dlp.
Installation
# pip
pip install yt-dlp
# Mac
brew install yt-dlp
# Windows
choco install yt-dlpDownload as SRT
# Download auto-generated subtitles as SRT
yt-dlp --write-auto-sub --sub-lang en --convert-subs srt --skip-download "VIDEO_URL"
# Download manual subtitles as SRT
yt-dlp --write-sub --sub-lang en --convert-subs srt --skip-download "VIDEO_URL"
# Download both if available
yt-dlp --write-auto-sub --write-sub --sub-lang en --convert-subs srt --skip-download "VIDEO_URL"Output
Creates file: Video Title [VIDEO_ID].en.srt
Batch Processing
# Download SRT for all videos in a playlist
yt-dlp --write-auto-sub --sub-lang en --convert-subs srt --skip-download "PLAYLIST_URL"Method 3: Manual Conversion
Convert a plain text transcript to SRT format manually or with scripts.
Plain Text to SRT (Python Script)
import re
def text_to_srt(input_file, output_file):
"""Convert timestamped text to SRT format."""
with open(input_file, 'r') as f:
lines = f.readlines()
srt_content = []
counter = 1
for line in lines:
# Match pattern: [0:00] or (0:00) or 0:00 - followed by text
match = re.match(r'[\[\(]?(\d+):(\d+)[\]\)]?\s*[-–]?\s*(.+)', line.strip())
if match:
minutes, seconds, text = match.groups()
minutes, seconds = int(minutes), int(seconds)
# Calculate timestamps
start_total = minutes * 60 + seconds
end_total = start_total + 4 # Default 4 second duration
start_time = f"{start_total//3600:02d}:{(start_total%3600)//60:02d}:{start_total%60:02d},000"
end_time = f"{end_total//3600:02d}:{(end_total%3600)//60:02d}:{end_total%60:02d},000"
srt_content.append(f"{counter}")
srt_content.append(f"{start_time} --> {end_time}")
srt_content.append(text.strip())
srt_content.append("") # Blank line
counter += 1
with open(output_file, 'w') as f:
f.write('\n'.join(srt_content))
# Usage
text_to_srt('transcript.txt', 'output.srt')Manual Conversion Steps
[sequence number]
[start time] --> [end time]
[text]
[blank line]Timestamp Conversion Examples
| Original | SRT Format |
|---|---|
| 0:00 | 00:00:00,000 |
| 1:30 | 00:01:30,000 |
| 10:45 | 00:10:45,000 |
| 1:05:30 | 01:05:30,000 |
Method 4: Online Converters
Web-based tools that convert between subtitle formats.
Popular Converters
| Tool | Input Formats | Output Formats | Free |
|---|---|---|---|
| Subtitle Edit Online | TXT, VTT, ASS | SRT, VTT, ASS | ✅ |
| GoTranscript | TXT | SRT | ✅ |
| Rev.com Converter | VTT, SCC | SRT | ✅ |
| Happyscribe | TXT, VTT | SRT | ✅ |
Using Online Converters
SRT Formatting Best Practices
Optimal Subtitle Length
| Guideline | Recommendation |
|---|---|
| Characters per line | 42 max |
| Lines per subtitle | 2 max |
| Duration | 1-7 seconds |
| Reading speed | 15-20 char/sec |
Splitting Long Text
Before (too long):
1
00:00:00,000 --> 00:00:05,000
This is a very long subtitle that contains too much text and will be difficult for viewers to read in timeAfter (properly split):
1
00:00:00,000 --> 00:00:02,500
This is a very long subtitle
that contains too much text
2
00:00:02,500 --> 00:00:05,000
and will be difficult for viewers
to read in timeAdding Formatting
SRT supports basic HTML-style formatting:
1
00:00:00,000 --> 00:00:04,000
<b>Bold text</b>
2
00:00:04,000 --> 00:00:08,000
<i>Italic text</i>
3
00:00:08,000 --> 00:00:12,000
<u>Underlined text</u>
4
00:00:12,000 --> 00:00:16,000
<font color="#FF0000">Red text</font>Using SRT Files
Import into Video Editors
Adobe Premiere Pro:
- 1.File → Import → Select .srt file
- 2.Drag to timeline
- 3.Edit in Captions panel
DaVinci Resolve:
- 1.File → Import → Subtitle
- 2.Select .srt file
- 3.Edit in Subtitles track
Final Cut Pro:
- 1.File → Import → Captions
- 2.Select .srt file
- 3.Attach to video in timeline
Burn Subtitles into Video (FFmpeg)
# Soft subtitles (can be toggled)
ffmpeg -i video.mp4 -i subtitles.srt -c copy -c:s mov_text output.mp4
# Hard subtitles (burned in)
ffmpeg -i video.mp4 -vf "subtitles=subtitles.srt" output_burned.mp4
# Styled hard subtitles
ffmpeg -i video.mp4 -vf "subtitles=subtitles.srt:force_style='FontSize=24,FontName=Arial'" output_styled.mp4Troubleshooting
Common SRT Errors
Error: Subtitles not showing
- Check timestamp format (must use comma: 00:00:00,000)
- Ensure blank line between entries
- Verify file encoding is UTF-8
Error: Timing is off
- Timestamps may need offset adjustment
- Check if video was trimmed
Error: Special characters display wrong
- Save file as UTF-8 with BOM
- Avoid special characters not in target font
Fixing Timestamp Format
# Fix common timestamp issues
import re
def fix_srt_timestamps(content):
# Replace periods with commas in timestamps
content = re.sub(r'(\d{2}:\d{2}:\d{2})\.(\d{3})', r'\1,\2', content)
# Add missing hours
content = re.sub(r'^(\d{2}:\d{2}),(\d{3})', r'00:\1,\2', content, flags=re.MULTILINE)
return contentFrequently Asked Questions
`srt 1 00:00:00,000 --> 00:00:03,000 JOHN: Hello everyone 2 00:00:03,000 --> 00:00:06,000 MARY: Hi John, thanks for having me `Conclusion
Quick reference:
- Easiest: NoteLM.ai → Download SRT
- Automation: yt-dlp with --convert-subs srt
- Manual: Python script or online converter
SRT files work with virtually all video editors and players, making them the best choice for subtitle projects.
Get SRT Files from YouTube →
Written By
The NoteLM team specializes in AI-powered video summarization and learning tools. We are passionate about making video content more accessible and efficient for learners worldwide.
Sources & References
Was this article helpful?