From 605e1fb76667802408412128393ceecb4a932180 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 21 Feb 2020 14:47:50 +0100 Subject: ytdl_hook, edl: add fps, samplerate codec parameters Well, didn't help much in the case I was interested it. --- DOCS/edl-mpv.rst | 7 +++++++ demux/demux_edl.c | 2 ++ player/lua/ytdl_hook.lua | 11 +++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/DOCS/edl-mpv.rst b/DOCS/edl-mpv.rst index 999e75694a..78da44a8bf 100644 --- a/DOCS/edl-mpv.rst +++ b/DOCS/edl-mpv.rst @@ -291,6 +291,13 @@ This has the following parameters: ``w``, ``h`` For video codecs: expected video size. See ``codec`` for details. +``fps`` + For video codecs: expected video framerate, as integer. (The rate is usually + only crudely reported, and it makes no sense to expect exact values.) + +``samplerate`` + For audio codecs: expected sample rate, as integer. + The ``delay_open`` header is not part of the core EDL format. It may be changed or removed at any time, depending on mpv's internal requirements. diff --git a/demux/demux_edl.c b/demux/demux_edl.c index 6deba77b9f..256b304f3a 100644 --- a/demux/demux_edl.c +++ b/demux/demux_edl.c @@ -270,6 +270,8 @@ static struct tl_root *parse_edl(bstr str, struct mp_log *log) sh->codec->codec = "null"; sh->codec->disp_w = get_param_int(&ctx, "w", 0); sh->codec->disp_h = get_param_int(&ctx, "h", 0); + sh->codec->fps = get_param_int(&ctx, "fps", 0); + sh->codec->samplerate = get_param_int(&ctx, "samplerate", 0); tl->delay_open = true; } else { mp_err(log, "Unknown header: '%.*s'\n", BSTR_P(f_type)); diff --git a/player/lua/ytdl_hook.lua b/player/lua/ytdl_hook.lua index 05e7624221..3420054dd6 100644 --- a/player/lua/ytdl_hook.lua +++ b/player/lua/ytdl_hook.lua @@ -403,9 +403,16 @@ local function formats_to_edl(json, formats, use_all_formats) for _, sub in ipairs(tracks) do -- A single track that is either audio or video. Delay load it. local codec = map_codec_to_mpv(sub.codec) + local props = "" + if sub.media_type == "video" then + props = props .. ",w=" .. as_integer(track.width) + .. ",h=" .. as_integer(track.height) + .. ",fps=" .. as_integer(track.fps) + elseif sub.media_type == "audio" then + props = props .. ",samplerate=" .. as_integer(track.asr) + end hdr[#hdr + 1] = "!delay_open,media_type=" .. sub.media_type .. - ",codec=" .. (codec or "null") .. ",w=" .. - as_integer(track.width) .. ",h=" .. as_integer(track.height) + ",codec=" .. (codec or "null") .. props -- Add bitrate information etc. for better user selection. local byterate = 0 -- cgit v1.2.3