VocalFuse is a Fuse Intelligence product.

TRANSCRIPTION · YOUTUBE · 2026

YouTube transcript with timestamps: keep them or strip them

Every YouTube caption track ships with timing data — the question is whether your copy keeps it. The built-in transcript panel displays timestamps on every line, but what happens when you copy depends on your browser and where you paste. This guide covers the reliable ways to get a timestamped transcript (generator exports, yt-dlp, the Python API), the format each produces, when to keep timestamps versus strip them, and how to turn a timestamped transcript into YouTube chapters or SRT subtitles.

Keeping timestamps: what actually preserves them

The panel copy quirk first, because it burns everyone once. Open the watch page, click “…more” under the title, scroll to the bottom of the expanded description, and select Show transcript (the panel lives there since the October 2025 layout update). The panel shows every line with its [MM:SS] timestamp. Select all (Ctrl+A / Cmd+A), copy — and depending on your browser and paste target, the timestamps either ride along as bracketed [0:42] prefixes or vanish into a wall of prose. There is no setting that guarantees either outcome, so treat panel-copy as a convenience, not a pipeline.

The reliable keep-them routes all go through files that were born timed. Every caption track YouTube serves is a timed subtitle file under the hood, so extraction is instant and lossless:

Route Timestamp output Best for
Paste-a-URL generatorTimestamped text or SRT/VTT/JSON download — youtubetotranscript.com includes timestamps by default, NoteGPT and Tactiq return timestamped transcripts, MeetWave exports 7 formatsOne-off keeps, no setup, any browser
yt-dlpNative SRT/VTT files — exact cues, exact timingScripted pipelines, bulk, archives
youtube-transcript-api (Python)Per-snippet start seconds + duration — format any way you likeApps, analysis, RAG ingestion
YouTube Studio (own videos)Original .srt/.vtt caption files, unmodifiedYour own uploads
Local Whisper (no captions)SRT with word-accurate cues from the audio itselfCaption-less videos, private footage

For a single video you want on disk with timestamps intact, yt-dlp is the two-flag answer:

# caption track as an SRT file - no video download
yt-dlp --write-subs --write-auto-subs --sub-langs "en.*" \
  --convert-subs srt --skip-download "VIDEO_URL"

Why these flags and not the shorter versions in older tutorials: --write-subs pulls creator-uploaded captions (the good ones) and --write-auto-subs falls back to YouTube's machine captions when no manual track exists — requesting only one silently returns nothing on many videos. --sub-langs "en.*" matters because YouTube tags auto-captions with a region (en-US, en-GB) or -orig, and the plain en form quietly misses them — the single most common “no subtitles found” report. --convert-subs srt normalizes YouTube's native VTT into SRT (FFmpeg needed). Run --list-subs first when in doubt. As of 2026, stick to SRT and VTT outputs: the legacy json3/ttml/srv conversions have documented extraction bugs.

Python route, for anything you would put in code — the library returns each snippet with its start time, so timestamp preservation is structural:

from youtube_transcript_api import YouTubeTranscriptApi

ytt_api = YouTubeTranscriptApi()
transcript = ytt_api.fetch("VIDEO_ID")          # video ID, not URL
for snippet in transcript:                       # FetchedTranscriptSnippet
    mm, ss = divmod(int(snippet.start), 60)
    print(f"[{mm}:{ss:02d}] {snippet.text}")

Pin 1.2.x — the pre-1.0 get_transcript() static call raises AttributeError on current installs. Snippet start is the timestamp in seconds; duration is how long the snippet stays on screen (it can overlap the next snippet). Works fine from residential IPs; cloud IPs hit RequestBlocked at scale.

Stripping timestamps: when clean prose wins

Timestamps are noise for most reading jobs — summarizing, quoting into an LLM, show notes, blog drafts. Three clean ways to remove them:

1. The panel's own toggle. The three-dot menu inside the transcript panel has Toggle timestamps — switch it off, then Ctrl+A / Ctrl+C for text-only copy. Some browsers paste the brackets anyway; check your clipboard.

2. A one-line strip on any file. If you already have the timestamped copy or an SRT, strip the timing with the tool you have open:

# bracketed [0:42] prefixes from a panel copy
sed -E 's/^\[[0-9]+:[0-9]+\]\s*//' transcript.txt

# SRT cues -> prose (drop cue blocks, keep text lines)
sed -E '/^[0-9]+$/,/-->.*$/d; s/^[0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3} -->.*$//' caps.srt

3. Export TXT at the source. Every generator tool has a timestamps-off checkbox or a plain-TXT export that never had them — cheaper than stripping, and yt-dlp itself can emit the track and you post-process once. For your own uploads, YouTube Studio's captions editor downloads the raw files; strip there.

Keep the timestamped version somewhere anyway. The moment you need to cite a claim, cut a clip, or sync text to video, you want the timed copy — regenerating it costs another round trip, and auto-caption timing can differ between fetches.

Turning timestamps into YouTube chapters (and SRT)

A timestamped transcript is the raw material for two publishable artifacts. First, YouTube chapters: a timestamped transcript's line starts give you exact section boundaries. Paste into the description as timestamp + space + title lines — YouTube's rules are unforgiving and fail silently:

  • First timestamp must be exactly 0:00 — it is the trigger that turns the list into chapters (0:01 disables the whole feature)
  • At least 3 timestamps, in ascending order
  • Every chapter 10+ seconds long; colons only, seconds two digits (2:05 works, 2:5 does not)
  • Timestamps go in the description, not a pinned comment (pinned-comment timestamps stay clickable links, but do not create chapters)
  • Under an hour use m:ss; over an hour use h:mm:ss — and stay consistent within one list

Chapters also feed Google's Key Moments — search results can surface the individual chapter cards, so title chapters after the questions people actually search (“How to export 4K in Premiere” beats “Part 3”).

Second, SRT subtitles: the timestamped SRT you exported uploads directly to YouTube Studio's caption editor for your own videos, and drops into Premiere, DaVinci, or CapCut as a subtitle layer. One caution when the source is auto-generated captions: the machine track carries no punctuation and mishears proper nouns, so fix the text before the SRT bakes those errors into your editor timeline. Creator-uploaded tracks are markedly better — prefer them whenever both exist.

No captions at all? About one video in ten has no track (new uploads, music videos, creators who disabled captions). Transcribe the audio itself — see the three working methods, or run the local pipeline below, which outputs an SRT with word-accurate timing from the audio itself.

The local route: timestamps from the audio itself

When the caption track is missing — or the footage is unreleased, internal, or otherwise not something you'd paste into a public tool — a speech-recognition engine has to listen to the audio. The local pipeline makes timestamped transcripts with nothing uploading:

# 1. pull just the audio, 16 kHz mono WAV (what Whisper-class engines expect)
yt-dlp -x --audio-format wav --postprocessor-args "-ar 16000 -ac 1" \
  -o "audio.%(ext)s" "https://www.youtube.com/watch?v=VIDEO_ID"

# 2. transcribe locally - SRT (timed) + TXT (prose) in one pass
whisper-cli -m ggml-large-v3-turbo.bin -f audio.wav -l en -osrt -otxt

The -osrt output is subtitle-grade timing (finer than the caption panel's line timing); -otxt gives you the stripped prose version of the same transcript in the same pass — both problems solved once. faster-whisper runs ~2× on CPU via INT8; WhisperX adds word-level timestamps and speaker diarization.

Prefer an app to a pipeline? VocalFuse runs a Whisper-class engine locally on Windows: drop in any audio or video file (download the audio with yt-dlp first for YouTube), get a timestamped, punctuated transcript with speaker labels, and export TXT/SRT/VTT. Nothing uploads — there is no per-minute meter because the engine runs on your PC (free tier, Basic $5/mo dictation, Pro $10/mo adds AI notes and summaries).

Timestamp formats cheat sheet

Context Format Example
Transcript panel / copy[M:SS] or [H:MM:SS] bracketed[1:42] here is the trick
SRT cuesHH:MM:SS,mmm (comma) with arrow00:01:42,000 --> 00:01:45,500
VTT cuesHH:MM:SS.mmm (period)00:01:42.000 --> 00:01:45.500
YouTube chaptersM:SS or H:MM:SS, first must be 0:000:00 Intro / 1:42 The trick
Python APIfloat seconds per snippetstart=102.4, duration=3.1

Conversion is mechanical between them — the timing data is identical, only the representation differs. Pick by destination: chapters for descriptions, SRT for editors and caption uploads, VTT for web players, bracketed text for citing moments in notes.

Related reading

YouTube transcript — the full guide

Every route to a transcript: the panel, generators, export formats, and the API.

YouTube transcript guide

YouTube chapters from transcripts

Chapters, SRT cues, and the RSS transcript tag for podcast-style feeds.

Podcast chapters guide

Transcribe a video with no captions

Copy the track, yt-dlp the file, or run Whisper locally — commands included.

Three working methods

Publish transcripts for SEO

Where the timestamped text goes on the page so Google indexes the content.

Transcript publishing guide

Explore related AI note taking guides

YouTube transcript with timestamps — FAQ

How do I copy a YouTube transcript and keep the timestamps?

The built-in panel shows timestamps on every line (expanded description, "Show transcript" since October 2025), but whether Ctrl+A / Ctrl+C keeps the bracketed [MM:SS] prefixes depends on your browser — there is no setting that guarantees it. The reliable routes preserve timing by design: a paste-a-URL generator with a timestamped text or SRT/VTT/JSON export, yt-dlp downloading the track as an SRT file, or the youtube-transcript-api Python library, which returns every snippet with its start time in seconds.

Why does yt-dlp say no subtitles when I know the video has captions?

Usually the language tag. YouTube tags auto-generated captions with a region — en-US, en-GB, or -orig — and the plain --sub-langs en form misses them; use "en.*" instead. Also request both tracks: --write-subs (creator-uploaded) plus --write-auto-subs (machine) — asking for only one silently returns nothing on many videos. Run --list-subs first when in doubt, and add --convert-subs srt (FFmpeg required) to get SubRip instead of YouTube's native VTT.

How do I get a YouTube transcript without timestamps?

Three ways. The panel's three-dot menu has a Toggle timestamps switch — flip it off before copying (some browsers paste the brackets anyway). A one-line strip removes them from any copy: sed -E 's/^\[[0-9]+:[0-9]+\]\s*//' transcript.txt. Or export plain TXT at the source — every generator tool has a timestamps-off mode or TXT download that never carried them.

Can I turn a timestamped transcript into YouTube chapters?

Yes — a timestamped transcript's line starts are exact chapter boundaries. Paste into the video description as "timestamp + space + title" lines. YouTube's rules fail silently: the first timestamp must be exactly 0:00 (0:01 disables the whole feature), at least three timestamps in ascending order, every chapter 10+ seconds, colons only with two-digit seconds, and the list goes in the description — pinned-comment timestamps stay clickable but never create chapters. Chapters can also surface as Google Key Moments cards, so title them after real search questions.

What timestamp format does SRT use compared to the transcript panel?

The panel shows bracketed [M:SS] or [H:MM:SS]. SRT cues are HH:MM:SS,mmm with a comma and an arrow between start and end (00:01:42,000 --> 00:01:45,500); VTT is identical but with a period (00:01:42.000). The Python API returns float seconds per snippet (start=102.4). The timing data is the same underneath — only the representation differs — so conversion is mechanical.

How do I get a timestamped transcript of a video with no captions?

Transcribe the audio locally — no extractor can read a track that does not exist. Download just the audio with yt-dlp (yt-dlp -x --audio-format wav --postprocessor-args "-ar 16000 -ac 1"), then run whisper-cli -m ggml-large-v3-turbo.bin -f audio.wav -l en -osrt -otxt: one pass gives both the timed SRT and the stripped prose TXT. Nothing uploads, no meter, and word-level timing from Whisper is typically finer than caption-track line timing.

Are timestamps in YouTube transcripts accurate?

Close enough to navigate, not frame-exact. Each caption cue marks when the line appears on screen, and the snippet's duration can overlap the next cue, so a line's timestamp is its on-screen start rather than the precise spoken moment. For subtitle-grade timing — or timing on videos with no captions at all — a local Whisper-class engine generates cues from the audio itself, and WhisperX adds word-level timestamps on top.

Can I upload the timestamped SRT back to YouTube?

Yes, for your own videos. YouTube Studio's captions editor accepts .srt and .vtt uploads, and a transcript-derived SRT drops straight in — or into Premiere, DaVinci, or CapCut as a subtitle layer. One caution: if the SRT was built from auto-generated captions, it carries the machine track's missing punctuation and misheard proper nouns — clean the text before it bakes into your editor timeline. Creator-uploaded tracks are markedly better; prefer them whenever both exist.