summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThiago Kenji Okada <thiago.mast3r@gmail.com>2015-02-22 17:32:42 -0300
committerwm4 <wm4@nowhere>2015-02-25 22:32:48 +0100
commit633147c9596177d42d9651aaf101a426d754cb7c (patch)
tree6fe2f5f9b362e667a148df5867c3b12e2986866d
parente85bcc12233ee08b7609382372dd80482fd016f2 (diff)
downloadmpv-633147c9596177d42d9651aaf101a426d754cb7c.tar.bz2
mpv-633147c9596177d42d9651aaf101a426d754cb7c.tar.xz
ytdl: add "--ytdl-params" option
This option allows the user to pass non-supported options directly to youtube-dl, such as "--proxy URL", "--username USERNAME" and '--password PASSWORD". There is no sanity checking so it's possible to break things (i.e. if you pass "--version" mpv exits with random JSON error). Signed-off-by: wm4 <wm4@nowhere>
-rw-r--r--DOCS/man/options.rst12
-rw-r--r--options/options.c2
-rw-r--r--options/options.h1
-rw-r--r--player/lua/ytdl_hook.lua7
4 files changed, 22 insertions, 0 deletions
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index c647f38228..2327817976 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -454,6 +454,18 @@ Program Behavior
``bestvideo+bestaudio``.
(Default: ``best``)
+``--ytdl-raw-options=<key>=<value>[,<key>=<value>[,...]]``
+ Pass arbitraty options to youtube-dl. Parameter and argument should be
+ passed as a key-value pair. Options without argument must include ``=``.
+
+ There is no sanity checking so it's possible to break things (i.e.
+ passing invalid parameters to youtube-dl).
+
+ .. admonition:: Example
+
+ ``--ytdl-raw-options=username=user,password=pass``
+ ``--ytdl-raw-options=force-ipv6=``
+
Video
-----
diff --git a/options/options.c b/options/options.c
index 5276a6f6bf..1dd9eaffb2 100644
--- a/options/options.c
+++ b/options/options.c
@@ -133,6 +133,7 @@ const m_option_t mp_opts[] = {
OPT_FLAG("osc", lua_load_osc, CONF_GLOBAL),
OPT_FLAG("ytdl", lua_load_ytdl, CONF_GLOBAL),
OPT_STRING("ytdl-format", lua_ytdl_format, CONF_GLOBAL),
+ OPT_KEYVALUELIST("ytdl-raw-options", lua_ytdl_raw_options, CONF_GLOBAL),
OPT_FLAG("load-scripts", auto_load_scripts, CONF_GLOBAL),
#endif
@@ -716,6 +717,7 @@ const struct MPOpts mp_default_opts = {
.lua_load_osc = 1,
.lua_load_ytdl = 1,
.lua_ytdl_format = NULL,
+ .lua_ytdl_raw_options = NULL,
#endif
.auto_load_scripts = 1,
.loop_times = 1,
diff --git a/options/options.h b/options/options.h
index 52bf0fa221..15ff9cb8ca 100644
--- a/options/options.h
+++ b/options/options.h
@@ -68,6 +68,7 @@ typedef struct MPOpts {
int lua_load_osc;
int lua_load_ytdl;
char *lua_ytdl_format;
+ char **lua_ytdl_raw_options;
int auto_load_scripts;
diff --git a/player/lua/ytdl_hook.lua b/player/lua/ytdl_hook.lua
index f757e5a28b..7b0e9222e9 100644
--- a/player/lua/ytdl_hook.lua
+++ b/player/lua/ytdl_hook.lua
@@ -80,6 +80,7 @@ mp.add_hook("on_load", 10, function ()
end
local format = mp.get_property("options/ytdl-format")
+ local raw_options = mp.get_property_native("options/ytdl-raw-options")
-- subformat workaround
local subformat = "ass/srt/best"
@@ -92,6 +93,12 @@ mp.add_hook("on_load", 10, function ()
table.insert(command, "--format")
table.insert(command, format)
end
+ for param, arg in pairs(raw_options) do
+ table.insert(command, "--" .. param)
+ if (arg ~= "") then
+ table.insert(command, arg)
+ end
+ end
table.insert(command, "--")
table.insert(command, url)
local es, json = exec(command)