From 4e2f3ce4b9c2d0b6b3da1eaa55212246d62fbaaa Mon Sep 17 00:00:00 2001 From: nanahi <130121847+na-na-hi@users.noreply.github.com> Date: Thu, 19 Feb 2026 23:00:36 -0500 Subject: [PATCH] command: add track-list/N/demux-duration property --- DOCS/interface-changes/stats-page-5.txt | 1 + DOCS/man/input.rst | 3 +++ demux/demux_lavf.c | 1 + demux/stheader.h | 3 +++ player/command.c | 1 + 5 files changed, 9 insertions(+) diff --git a/DOCS/interface-changes/stats-page-5.txt b/DOCS/interface-changes/stats-page-5.txt index 0f2d6dc790..e7f5da1992 100644 --- a/DOCS/interface-changes/stats-page-5.txt +++ b/DOCS/interface-changes/stats-page-5.txt @@ -1 +1,2 @@ add `track_info_selected_only` script option for stats +add `track-list/N/demux-duration` property diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst index 7870daa1d6..be190cb78c 100644 --- a/DOCS/man/input.rst +++ b/DOCS/man/input.rst @@ -3516,6 +3516,9 @@ Property list ``track-list/N/demux-par`` Pixel aspect ratio. + ``track-list/N/demux-duration`` + Track duration as indicated by the container. + ``track-list/N/format-name`` Short name for format from ffmpeg. If the track is audio, this will be the name of the sample format. If the track is video, this will be the diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index f23027f761..d1be000dd5 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -827,6 +827,7 @@ static void handle_new_stream(demuxer_t *demuxer, int i) avcodec_parameters_copy(sh->codec->lav_codecpar, codec); sh->codec->native_tb_num = st->time_base.num; sh->codec->native_tb_den = st->time_base.den; + sh->codec->duration = st->duration * av_q2d(st->time_base); if (st->disposition & AV_DISPOSITION_DEFAULT) sh->default_track = true; diff --git a/demux/stheader.h b/demux/stheader.h index 54aa4e2c7a..665d124327 100644 --- a/demux/stheader.h +++ b/demux/stheader.h @@ -137,6 +137,9 @@ struct mp_codec_params { // STREAM_SUB double frame_based; // timestamps are frame-based (and this is the // fallback framerate used for timestamps) + + // STREAM_VIDEO + STREAM_AUDIO + STREAM_SUB + double duration; }; #endif /* MPLAYER_STHEADER_H */ diff --git a/player/command.c b/player/command.c index b73d863230..b476047be1 100644 --- a/player/command.c +++ b/player/command.c @@ -2092,6 +2092,7 @@ static int get_track_entry(int item, int action, void *arg, void *ctx) {"demux-bitrate", SUB_PROP_INT(p.bitrate), .unavailable = p.bitrate <= 0}, {"demux-rotation", SUB_PROP_INT(p.rotate), .unavailable = p.rotate <= 0}, {"demux-par", SUB_PROP_DOUBLE(par), .unavailable = par <= 0}, + {"demux-duration", SUB_PROP_PTS(p.duration), .unavailable = p.duration <= 0}, {"format-name", SUB_PROP_STR(p.format_name), .unavailable = !p.format_name}, {"replaygain-track-peak", SUB_PROP_FLOAT(rg.track_peak), .unavailable = !has_rg},