Course transcripts: turn a video course into notes
How to get the transcript of every lesson in a video course, build revision notes you can search, and use an LLM to summarise without inventing content.
A video course is a bad revision format. You cannot search it, you cannot skim it, and finding the two minutes where the lecturer explained the thing you have forgotten means scrubbing through a 50-minute video. Text fixes all three. This guide covers getting the transcript of every lesson in a course playlist, turning those transcripts into notes you will actually revise from, and using a language model over them without it inventing material the course never covered.
Free courses on YouTube are the case this works for. Paid platforms — Coursera, Udemy, a university VLE — are covered at the end, and the answer there is different.
What a course transcript gives you that the video does not
Search, skim, and quotable citations. Those are the three, and they are worth the twenty minutes of setup.
| You want to | With video | With transcripts |
|---|---|---|
| Find where a term was defined | Scrub through 12 hours | One search across the course |
| Revise a lesson | Rewatch 40 minutes | Read 6,000 words in 10 minutes |
| Check what the lecturer actually said | Rewatch and take notes | Copy the sentence |
| Know if a topic is covered at all | Read every title and hope | Search the full text of every lesson |
| Ask a model to explain a concept | Not possible | Paste the relevant lesson |
The reading-speed arithmetic is the whole argument. Speech runs at 130 to 160 words per minute; reading runs at 250 to 300. A 12-hour course is roughly 110,000 words, which is a long book — but you never read a course front to back. You read the four lessons you are weak on, and you search the rest.
Extract a course playlist
Most YouTube courses are published as a playlist in lesson order, which is what makes them straightforward to work with: the playlist order is the curriculum order.
- Open the course playlist and confirm it is the full course. Check the video count against the syllabus in the description — a playlist with 14 videos against an 18-lecture syllabus is missing something.
- Copy the playlist URL. Only the
list=PL...portion matters; a watch URL carrying&list=works equally well. - Set the video cap above the lesson count. This is your ceiling on both runtime and cost.
- Set the language to the language the course is taught in.
- Turn timestamps on if you want to link a note back to the moment in the video. For pure revision notes, plain text is smaller and easier to work with.
- Run it once and save the raw output. Do all your processing on the saved file, not by re-running.
Keep the playlist order. Courses are sequential — lesson 7 assumes lesson 6 — and a set of transcripts shuffled out of order loses the thing that made it a course rather than a pile of videos. Extraction returns rows in playlist order; number your files as you write them out so the order survives:
i=0
jq -c 'select(.success)' course.jsonl | while read -r row; do
i=$((i+1))
title=$(printf '%s' "$row" | jq -r .title)
printf '# %s\n\n%s\n' "$title" "$(printf '%s' "$row" | jq -r .fullText)" \
> "$(printf 'lessons/%02d.md' "$i")"
done
Some course playlists include a trailer, a channel promo or a Q&A stream between lessons. Those come back as transcripts too. Skim the title list once and delete what is not a lesson before you build anything on top.
What each lesson looks like as text
Each lesson comes back as one continuous string: no paragraphs, no headings, approximate punctuation. Machine-generated captions in particular are a run-on stream. It is readable, and it is not yet notes.
A short worked example of the shape:
so if we go back to what we said about gradient descent the key
thing is the learning rate um if you set it too high you overshoot
the minimum and if it's too low you'll be here all day right so
let's look at what happens when
Three things to fix before this becomes useful:
- Filler. “um”, “you know”, “right so” — dense in lecture speech, noise in notes.
- No structure. A 40-minute lesson has four or five topic shifts and no marker for any of them.
- Missing referents. “What happens when this changes” refers to something on screen. Text cannot recover it.
That last one is the real limit and it does not go away. A maths course where the lecturer works through derivations on a board loses most of its content in transcription. A course that is mostly explanation and discussion loses very little. Check one lesson before you build a workflow on top of twenty.
Build revision notes from the transcripts
Notes you revise from are shorter than the transcript, structured, and in your own words. The transcript is raw material, not the product. A structure that works:
| Layer | Contents | Length per lesson |
|---|---|---|
| Full transcript | Untouched, searchable | 4,000–8,000 words |
| Lesson summary | The argument in your own words | 200–400 words |
| Definitions | Every term the lecturer defined, with the sentence they defined it in | 5–15 lines |
| Open questions | Anything you did not follow, with a timestamp | 2–5 lines |
Only the second layer takes real effort, and it is the layer that does the learning. Writing a summary in your own words is the revision. A summary generated for you is a document you have read, which is not the same thing.
The definitions layer is worth extracting mechanically, because lecturers use predictable phrasing:
grep -o -i -E '[^.]*\b(is defined as|we call this|is called|the definition of|refers to)\b[^.]*' \
lessons/*.md
That is a rough net and it catches false positives. It also catches nearly every real definition in a course, which is a better starting point than a blank page.
For questions you could not answer during the lesson, record them with the timestamp link so you can go back to the exact moment rather than the lesson:
Q: why does the loss go up before it goes down here?
https://www.youtube.com/watch?v=VIDEO_ID&t=1420s
The t parameter is seconds from the start, and timestamped output gives you a start value per segment to derive it from.
Feed a course into a language model without it making things up
Give the model the transcript and tell it to answer only from that text. The failure mode is a model that answers from its training data instead, giving you a plausible answer that the course never made — which is exactly what you cannot detect when you are the one still learning the material.
Three habits that prevent it:
- One lesson at a time, in the prompt. Retrieval over a whole course is a system to build; pasting one lesson is a thing to do now. A 6,000-word lesson fits comfortably in any current context window.
- Constrain it explicitly. “Answer using only the transcript below. If the transcript does not cover it, say so.” Then check that it does say so, by asking something the lesson definitely did not cover.
- Ask it to quote. Requiring a supporting sentence from the transcript for each claim makes fabrication visible, because you can search the transcript for the sentence.
Prompts worth having for a lesson transcript:
| Goal | Prompt shape |
|---|---|
| Structure | “Split this lesson into topic sections with a heading for each and the first line of each section.” |
| Terminology | “List every term this lesson defines, with the definition quoted from the transcript.” |
| Testing yourself | “Write eight short-answer questions this lesson answers. Do not include the answers.” |
| Finding gaps | “What does this lesson assume the listener already knows?” |
| Cross-lesson | “These are the summaries of lessons 1–12. Which concepts appear in more than three?” |
That last one is where a whole-course extraction pays off. Summarise each lesson separately, then reason over the summaries — a two-stage pass that both fits in context and produces better answers than one enormous prompt, because the model is not selectively skimming 110,000 words.
Two things not to do. Do not ask a model to generate flashcards and then revise from them without reading the transcript — you will memorise the model’s phrasing of a point rather than the point. And do not trust a summary of a lesson whose transcript is full of “as you can see here”: the model does not know either, and it will fill the gap.
Limitations
Honest list, including the cases where this approach does not work at all:
- Paid course platforms are out of scope. Coursera, Udemy, edX, Pluralsight and university VLEs sit behind authentication, and their terms generally prohibit bulk extraction. Most of them provide a transcript panel next to the player — use it. This guide is about publicly published video.
- Lessons without captions return nothing. If the uploader disabled captions and no automatic track exists, there is no transcript to retrieve. Nothing can produce one from published data.
- Private and unlisted playlists return no videos. If it does not open in a logged-out browser, it cannot be extracted.
- Board work, slides and code on screen are lost. Maths-heavy and live-coding courses lose the majority of their content in transcription. Test one lesson first.
- Automatic captions get technical terms wrong. Names, libraries and notation are where errors concentrate, and in a course those are the words that matter most.
- No speaker separation. Lessons with a teaching assistant or student questions come back as one stream.
- A course playlist is not always a course. Trailers, re-uploads and stream recordings sit inside them. Curate the list by hand once.
- Reading transcripts is not watching lectures. For material you have never seen, watching is better. Transcripts are for revision, search and reference — the second and third pass, not the first.
Can I get transcripts from Coursera or Udemy this way?
No. Those courses are behind a login and their terms of service generally prohibit bulk downloading. Both platforms show a transcript panel beside the player for personal use, and that is the supported route. The approach in this guide applies to video that is publicly published.
Do I need a YouTube API key?
No. The official Data API does not return auto-generated captions, which is what most course uploads have. Transcript extraction reads the publicly served caption data instead — no key, no OAuth, no quota.
Will the transcripts be in the right order?
Yes, if you keep playlist order, which is lesson order for any properly assembled course. Number the files as you write them out; sorting later by title or upload date will scramble a course, because lesson titles rarely sort correctly and re-uploads carry recent dates.
How much text is a typical course?
Roughly 9,000 words per hour of video at normal speaking pace. A 12-hour course is around 110,000 words — a 350-page book. Per lesson it is 4,000 to 8,000 words, which is the unit you should work with.
Can I use this to make flashcards?
The transcript is a good source for them and a poor substitute for making them. Extracting definitions and dates mechanically works well. Generating question-and-answer pairs with a model and revising from those without reading the lesson gives you fluency in the model’s summary rather than the material.
What if the course is a single long video rather than a playlist?
Then you need one transcript, not a playlist run, and the timestamped version matters more — a six-hour single-video course is navigated by its chapter markers, and the timestamps are how you map a search hit onto a chapter.
Is it legal to save course transcripts?
Retrieving publicly published captions for your own study is ordinary personal use. Republishing a lecturer’s transcript, or selling notes derived from it, is a copyright question and the answer is generally no without permission. Keep it to your own revision, cite what you quote, and link back to the video.
This page describes the problem. The hosted tool solves it at scale — bulk input, structured output, and no charge for videos that return nothing.
Run it on Apify