Skip to content

Start typing. Errors match on their exact yt-dlp output.

to move, to open esc to close

yt-dlp SponsorBlock: Cut Sponsors Out Automatically

Tested on yt-dlp 2026.07.28 Updated

Quick answer

yt-dlp has SponsorBlock built in — no plugin, no extension. It can mark sponsor segments as chapters, or cut them out. Marking is the better default: instant, reversible, and it does not re-encode anything:

mark — nothing is re-cut
yt-dlp --sponsorblock-mark all --embed-chapters "URL"
remove — the segments are gone
yt-dlp --sponsorblock-remove sponsor,selfpromo,interaction "URL"

Mark and remove are not two intensities of one thing

Marking writes the segments into the file's chapter list. The video is untouched, so it costs nothing and the download is as fast as it would have been. Your player shows the chapters and you skip them yourself.

Removing re-cuts the file. That takes time proportional to its length, produces some loss at the cut points, and is irreversible — if a segment was submitted with the wrong timestamps, you have permanently lost that part of the video.

For an archive, mark. For a phone you are filling before a flight, remove.

The categories

CategoryWhat it coversSafe to remove?
sponsorPaid promotionYes
selfpromoMerch, Patreon, the creator's own productsYes
interaction"Like and subscribe"Yes
introTitle animationUsually
outroEnd cardsUsually
previewRecap of what is comingDepends on the video
fillerTangents and jokesSubjective — often removes real content
music_offtopicNon-music in a music videoFor music only
poi_highlightThe actual point of the videoNever — mark it

The combination worth using

Remove what is unambiguously advertising, mark everything else so it is visible but intact:

bash
yt-dlp --sponsorblock-remove "sponsor,selfpromo,interaction" \
  --sponsorblock-mark "intro,outro,preview,filler" \
  --embed-chapters \
  "URL"

--embed-chapters matters more than it looks: marking without it computes the segments and then has nowhere to write them, which is the usual reason marking "does nothing".

Naming what got marked

bash
yt-dlp --sponsorblock-mark all --embed-chapters \
  --sponsorblock-chapter-title "[SponsorBlock] %(category_names)l" \
  "URL"

Prefixing them makes SponsorBlock chapters visually distinct from the creator's own, which matters on videos that already have chapters.

In an archive job

Marking rather than removing is the right choice at archive scale, and not only for quality reasons — removing turns a fast copy into a re-encode on every video, which on a few hundred videos is hours:

bash
yt-dlp --download-archive archive.txt -i \
  --sponsorblock-mark all --embed-chapters \
  --sleep-requests 2 \
  -o "%(uploader)s/%(upload_date>%Y-%m-%d)s - %(title)s.%(ext)s" \
  "CHANNEL_URL"

Splitting on chapters

An unusual but useful combination: mark the segments, then write each chapter as its own file. The result is a folder where the sponsor is a separate file you can simply delete:

bash
yt-dlp --sponsorblock-mark all --split-chapters -o "chapter:%(title)s/%(section_title)s.%(ext)s" "URL"

Turning it off

If SponsorBlock is set in your config file, this overrides it for one run:

bash
yt-dlp --no-sponsorblock "URL"

Coverage, and its limits

The data is submitted by users, so it is excellent on large channels and thin on small ones. A video with no submitted segments produces no chapters and no error — that is the expected outcome, not a failure.

It also means occasional bad data: a segment submitted with wrong timestamps will cut the wrong thing. Community voting removes most of these, and it is one more reason marking is the safer default.

If it fails

  • Nothing happens. Usually no segments exist for that video. Check on sponsor.ajay.app; add --embed-chapters if you are marking.
  • Removal fails during postprocessing. It needs ffmpeg — ffmpeg exited with code 1.
  • Chapters are not visible in your player. mp4's chapter support is patchy. --merge-output-format mkv.
  • Content you wanted was cut. all included filler or poi_highlight. Name the categories explicitly.
  • Only on non-YouTube sites. Expected — the database covers YouTube.

Frequently asked

Where does the segment data come from?
The SponsorBlock project — a public database of segments submitted and voted on by users. yt-dlp queries their API by video id at download time. Nothing about you is sent beyond the id being requested.
Mark or remove?
Mark, unless you have a specific reason. Marking writes chapters and leaves the file untouched, so it is instant and reversible. Removing re-cuts the file — slower, and if a segment was wrongly submitted you have lost that part of the video.
Why did nothing happen?
Most likely the video has no submitted segments — coverage is good on large channels and thin on small ones. Add --embed-chapters as well: without it, marked chapters have nowhere to be written.
Does removing lose quality?
It re-encodes around the cut points, so there is some loss at the joins. The bulk of the file is copied rather than re-encoded, so it is not a full generation of loss — but it is not free either.