From cf8efe32351c745903cc3b3bf0b8bc0f33d5cfd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Marqui=CC=81nez=20Ferra=CC=81ndiz?= Date: Wed, 19 Nov 2014 23:33:28 +0100 Subject: options: add --ytdl-format option for youtube-dl format It's passed with the '--format' option to youtube-dl. If it isn't set, we don't pass '--format best' so that youtube-dl can use the options from its configuration file. Signed-off-by: wm4 --- DOCS/man/options.rst | 6 ++++++ options/options.c | 2 ++ options/options.h | 2 ++ player/lua/ytdl_hook.lua | 15 ++++++++++++--- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index b10db21a75..226259b2c2 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -435,6 +435,12 @@ Program Behavior (Note: this is the replacement for the now removed libquvi support.) +``--ytdl-format=`` + 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 + available formats can be found with the command + ``youtube-dl --list-formats URL``. + Video ----- diff --git a/options/options.c b/options/options.c index 6dbf4164e2..7f78d884a6 100644 --- a/options/options.c +++ b/options/options.c @@ -131,6 +131,7 @@ const m_option_t mp_opts[] = { OPT_KEYVALUELIST("lua-opts", lua_opts, M_OPT_GLOBAL), 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_FLAG("load-scripts", auto_load_scripts, CONF_GLOBAL), #endif @@ -612,6 +613,7 @@ const struct MPOpts mp_default_opts = { #if HAVE_LUA .lua_load_osc = 1, .lua_load_ytdl = 0, + .lua_ytdl_format = NULL, #endif .auto_load_scripts = 1, .loop_times = -1, diff --git a/options/options.h b/options/options.h index 5885f689f8..752d1f4801 100644 --- a/options/options.h +++ b/options/options.h @@ -62,6 +62,8 @@ typedef struct MPOpts { char **lua_opts; int lua_load_osc; int lua_load_ytdl; + char *lua_ytdl_format; + int auto_load_scripts; struct m_obj_settings *audio_driver_list, *ao_defs; diff --git a/player/lua/ytdl_hook.lua b/player/lua/ytdl_hook.lua index 8f3c319758..143ca4fe7a 100644 --- a/player/lua/ytdl_hook.lua +++ b/player/lua/ytdl_hook.lua @@ -55,16 +55,25 @@ mp.add_hook("on_load", 10, function () url = url:sub(8) end + local format = mp.get_property("options/ytdl-format") + -- subformat workaround local subformat = "srt" if url:find("crunchyroll.com") then subformat = "ass" end - local es, json = exec({ + local command = { ytdl.path, "-J", "--flat-playlist", "--all-subs", - "--sub-format", subformat, "--no-playlist", "--", url - }) + "--sub-format", subformat, "--no-playlist" + } + if (format ~= "") then + table.insert(command, "--format") + table.insert(command, format) + end + table.insert(command, "--") + table.insert(command, url) + local es, json = exec(command) if (es < 0) or (json == nil) or (json == "") then msg.warn("youtube-dl failed, trying to play URL directly ...") -- cgit v1.2.3