9

Some YouTube content creators split their videos into chapters. A subset of them kindly offer the list of chapters titles on description video, with their starting timestamp. Sometimes they decide not to show them.

How can I get the list of chapters titles?

1

2 Answers 2

7

Onliner to do this using yt-dlp (better alternative to youtube-dl) and jq JSON processor:

yt-dlp --dump-json  videoIDorURL | jq --raw-output ".chapters[].title"

To get starting timestamps:

 | jq --raw-output ".chapters[].start_time" | awk '{printf("%d:%02d:%02d\n",($1/60/60%24),($1/60%60),($1%60))}'

With paste and process substitution you can combine both. This is a function you could add to your .bashrc/.zshrc:

function get_chapters_times() {
  paste <(yt-dlp --dump-json $1 | jq --raw-output ".chapters[].start_time" | awk '{printf("%d:%02d:%02d\n",($1/60/60%24),($1/60%60),($1%60))}') <(yt-dlp --dump-json $1 | jq --raw-output ".chapters[].title")
}

Will return:

$ get_chapters_times https://youtu.be/DxL2HoqLbyA
0:00:00 Intro
0:02:15 History
0:04:16 Ideal Engine
0:09:48 Entropy
0:11:03 Energy Spread
0:14:49 Air Conditioning
0:17:26 Life on Earth
0:19:35 The Past Hypothesis
0:21:43 Hawking Radiation
0:23:31 Heat Death of the Universe
0:24:52 Conclusion

Use yt-dlp --split-chapters to download each chapter.

0
-1

Here's a fancier one-liner inspired by Pablo's answer that does away with process substitution and having to define functions:
yt-dlp videoURL --dump-json | jq -r ".chapters[] | {start_time, title}" | awk -v count="2" '++count==4{$0=sprintf(" \"start\":%d:%02d:%02d",($2/60/60%24),($2/60%60),($2%60));count=0} 1' | awk -F '":' '{print $2}' | gsed -r -e '/^\s*$/d' -e 's/^ "|"$//g' | paste -d " " - -
The awks and gsed could probably be merged into each other at the cost of more complexity.

If using yt-dlp, you may also benefit from --embed-chapters (alias: --add-chapters) argument.

New contributor
Unknown is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .