From 377a7c058eec7ac914ca90872b502dacfe8dfc27 Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Thu, 10 Aug 2023 20:20:02 +0200 Subject: [PATCH] add mpv script to skip sponsorblock segments --- .config/mpv/scripts/sbskip.lua.cgt | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .config/mpv/scripts/sbskip.lua.cgt diff --git a/.config/mpv/scripts/sbskip.lua.cgt b/.config/mpv/scripts/sbskip.lua.cgt new file mode 100644 index 0000000..e621ad6 --- /dev/null +++ b/.config/mpv/scripts/sbskip.lua.cgt @@ -0,0 +1,32 @@ +; +; vim: filetype=fennel + +;; MPV script to skip SponsorBlock segments added by yt-dlp's `--sponsorblock-mark=all` option + +;; list of SponsorBlock segment types NOT to skip +(local blacklist [:Highlight]) + +;; chapters alredy skipped this file +;; table of chapter id => true +(var skipped {}) + +(fn on-chapter-change [_ chapter#] + (when (and chapter# (not (. skipped chapter#))) + (let [chapter-list (mp.get_property_native :chapter-list) + chapter (. chapter-list (+ chapter# 1)) + next (. chapter-list (+ chapter# 2)) + seg-type (string.match chapter.title "%[SponsorBlock%]: (.*)")] + ;; when the pattern matches and the type isn't blacklisted... + (when (and seg-type (not (accumulate [has false + _ type (ipairs blacklist) + &until has] + (= type seg-type)))) + (mp.osd_message (.. "[sbskip] skip: " seg-type) 4) + ;; add to skipped to not skip chapter again + (tset skipped chapter# true) + ;; set time to start of next chapter or end of video + (mp.set_property :time-pos (if next next.time + (mp.get_property_native :duration))))))) + +(mp.observe_property :chapter :number on-chapter-change) +(mp.register_event :file-loaded #(set skipped {})) ;; reset skipped chapters on file load