diff options
author | Joe <rrbo@proton.me> | 2023-01-31 14:03:59 +0100 |
---|---|---|
committer | Joe <rrbo@proton.me> | 2023-01-31 14:03:59 +0100 |
commit | efa2957045fe9ea4421ea4a0c546f62a8a27fb58 (patch) | |
tree | 816b267a9d431e28744db41429358516ab0c461b /.config/mpv/scripts/show_chapters.lua | |
parent | up (diff) | |
download | dotfiles-bsd-efa2957045fe9ea4421ea4a0c546f62a8a27fb58.tar.gz dotfiles-bsd-efa2957045fe9ea4421ea4a0c546f62a8a27fb58.tar.bz2 dotfiles-bsd-efa2957045fe9ea4421ea4a0c546f62a8a27fb58.tar.xz dotfiles-bsd-efa2957045fe9ea4421ea4a0c546f62a8a27fb58.tar.zst dotfiles-bsd-efa2957045fe9ea4421ea4a0c546f62a8a27fb58.zip |
update
Diffstat (limited to '.config/mpv/scripts/show_chapters.lua')
-rw-r--r-- | .config/mpv/scripts/show_chapters.lua | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/.config/mpv/scripts/show_chapters.lua b/.config/mpv/scripts/show_chapters.lua new file mode 100644 index 0000000..643a51f --- /dev/null +++ b/.config/mpv/scripts/show_chapters.lua @@ -0,0 +1,145 @@ +-- show chapters and their time at the bottom left corner +-- the timings get proportionally adjusted at different speeds + +---------------------------------------- +CHAPTERS_TO_SHOW = 10 +HOTKEY = 'c' + +FONT_SCALE = 80 -- in % from osd-font-size +FONT_SCALE_inactive_chapters = 75 +FONT_ALPHA_inactive_chapters = 60 + +AUTOSTART_IN_PATHS = { + "^edl://", + "/med/p/podcasts", + "/abooks/" +} +---------------------------------------- + +local assdraw = require('mp.assdraw') + +function disp_time(time) + local hours = math.floor(time/3600) + local minutes = math.floor((time % 3600)/60) + local seconds = math.floor(time % 60) + + return string.format("%02d:%02d:%02d", hours, minutes, seconds) +end + +function time_2_seconds(time) + h,m,s = time:match('(.*):(.*):(.*)$') + + return h*3600 + m*60 + s +end + +function show_chapters() + if observation_active == false then + observation_active = true + mp.observe_property("chapter", "number", show_chapters) + mp.observe_property("speed", "number", show_chapters) + end + + local osd_w, osd_h, aspect = mp.get_osd_size() + local ass = assdraw:ass_new() + ass:new_event() + ass:an(1) + + -- font scale + ass:append('{\\fscx' .. tostring(FONT_SCALE) .. '}') + ass:append('{\\fscy' .. tostring(FONT_SCALE) .. '}') + + local ch_index = mp.get_property_number("chapter") + local ch_total = mp.get_property_osd("chapter-list/count") + + if ch_index and ch_index >= 0 then + ass:append("(" .. tostring(ch_index + 1) .. "/" .. tostring(ch_total) .. ")") + + shift = 1 + if ch_index == 0 then + start_from = 0 + else + shift = ch_total - CHAPTERS_TO_SHOW - ch_index - 1 + start_from = -1 + end + + if shift < 0 then + start_from = shift + end + + for i_ch = start_from, CHAPTERS_TO_SHOW + start_from do + if tonumber(ch_total) == ch_index + i_ch then + break + end + + -- from overshooting backwards + if ch_index + i_ch < 0 then + goto continue + end + + title = mp.get_property_osd("chapter-list/" .. tostring(ch_index + i_ch) .. "/title") + time = mp.get_property_osd("chapter-list/" .. tostring(ch_index + i_ch) .. "/time") + + ass:append("\\N") + + if i_ch == 0 then + ass:append("{\\alpha&H" .. '00' .. "}") + ass:append('{\\fscx' .. tostring(FONT_SCALE) .. '}') + ass:append('{\\fscy' .. tostring(FONT_SCALE) .. '}') + else + ass:append("{\\alpha&H" .. tostring(FONT_ALPHA_inactive_chapters) .. "}") + ass:append('{\\fscx' .. tostring(FONT_SCALE_inactive_chapters) .. '}') + ass:append('{\\fscy' .. tostring(FONT_SCALE_inactive_chapters) .. '}') + end + + -- removing paths + if string.sub(title, 1, 1) == '/' then + title = title:match('.+/(.*)$') + end + + speed = mp.get_property_number("speed") + if speed ~= 1.0 then + time = disp_time(time_2_seconds(time) / speed) + end + + ass:append('[' .. time .. "] " .. title) + + ::continue:: + end + end + + mp.set_osd_ass(osd_w, osd_h, ass.text) +end + +function started() + local pth = mp.get_property("path") + + if pth == nil then + return + end + + for i, i_path in pairs(AUTOSTART_IN_PATHS) do + if pth:find(i_path) then + running = true + show_chapters() + return + end + end +end + +function show_hide() + if running == true then + running = false + observation_active = false + mp.set_osd_ass(0, 0, "{}") + mp.unobserve_property(show_chapters) + else + running = true + show_chapters() + end +end + +observation_active = false + +mp.register_event("file-loaded", started) +mp.add_forced_key_binding(HOTKEY, 'show_hide', show_hide, {repeatable=true}) + |