mirror of
https://github.com/mpv-player/mpv
synced 2025-01-02 04:42:10 +00:00
ytdl_hook: add option to exclude URLs from being parsed
This is more of a niche usecase than --ytdl-format and --ytdl-raw-options, so a simple script option should be enough. Either create lua-settings/ytdl_hook.conf with 'exclude=example.com,sub.example.com' option or "--script-opts=ytdl_hook-exclude=example.com,sub.example.com"
This commit is contained in:
parent
b1165ce3a2
commit
042e98f4c9
@ -531,6 +531,26 @@ Program Behavior
|
||||
|
||||
If the script can't do anything with an URL, it will do nothing.
|
||||
|
||||
The `exclude` script option accepts a comma-separated list of URL patterns
|
||||
which mpv should not use with youtube-dl. The patterns are matched after
|
||||
the ``http(s)://`` part of the URL.
|
||||
|
||||
``^`` matches the beginning of the URL, ``$`` matches its end, and you
|
||||
should use ``%`` before any of the characters ``^$()%,.[]*+-?`` to match
|
||||
that character.
|
||||
|
||||
.. admonition:: Example
|
||||
|
||||
``--script-opts=ytdl_hook-exclude='^youtube%.com'`` will exclude any
|
||||
URL that starts with ``http://youtube.com`` or
|
||||
``https://youtube.com``.
|
||||
``--script-opts=ytdl_hook-exclude='%.mkv$,%.mp4$'`` will exclude any
|
||||
URL that ends with ``.mkv`` or ``.mp4``.
|
||||
|
||||
See more `lua patterns here`__.
|
||||
__ https://www.lua.org/manual/5.1/manual.html#5.4.1
|
||||
|
||||
|
||||
``--ytdl-format=<best|worst|mp4|webm|...>``
|
||||
Video format/quality that is directly passed to youtube-dl. The possible
|
||||
values are specific to the website and the video, for a given url the
|
||||
|
@ -1,9 +1,15 @@
|
||||
local utils = require 'mp.utils'
|
||||
local msg = require 'mp.msg'
|
||||
local options = require 'mp.options'
|
||||
|
||||
local o = {
|
||||
exclude = ""
|
||||
}
|
||||
|
||||
local ytdl = {
|
||||
path = "youtube-dl",
|
||||
searched = false
|
||||
searched = false,
|
||||
blacklisted = {}
|
||||
}
|
||||
|
||||
local chapter_list = {}
|
||||
@ -93,6 +99,27 @@ local function extract_chapters(data, video_length)
|
||||
return ret
|
||||
end
|
||||
|
||||
local function is_blacklisted(url)
|
||||
if o.blacklist == "" then return false end
|
||||
if #ytdl.blacklisted == 0 then
|
||||
local joined = o.blacklist
|
||||
while joined:match(',?[^,]+') do
|
||||
local _, e, domain = joined:find(',?([^,]+)')
|
||||
table.insert(ytdl.blacklisted, domain)
|
||||
joined = joined:sub(e+1)
|
||||
end
|
||||
end
|
||||
if #ytdl.blacklisted > 0 then
|
||||
url = url:match('https?://(.+)')
|
||||
for _, exclude in ipairs(ytdl.blacklisted) do
|
||||
if url:match(exclude) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function edl_track_joined(fragments, protocol, is_live)
|
||||
if not (type(fragments) == "table") or not fragments[1] then
|
||||
msg.debug("No fragments to join into EDL")
|
||||
@ -244,9 +271,8 @@ end
|
||||
mp.add_hook("on_load", 10, function ()
|
||||
local url = mp.get_property("stream-open-filename")
|
||||
local start_time = os.clock()
|
||||
|
||||
if (url:find("http://") == 1) or (url:find("https://") == 1)
|
||||
or (url:find("ytdl://") == 1) then
|
||||
if (url:find("ytdl://") == 1) or
|
||||
((url:find("https?://") == 1) and not is_blacklisted(url)) then
|
||||
|
||||
-- check for youtube-dl in mpv's config dir
|
||||
if not (ytdl.searched) then
|
||||
|
Loading…
Reference in New Issue
Block a user