stats.lua: display file tags

This adds file tags to display along with the title, including
album/artist etc. for music, and series etc. for some videos.
The list of tags to display is identical to the tags printed to
the terminal and is controlled by the --display-tags option.

To filter out overlength tags (such as long comments and lyrics) and
files with too many tags, add file_tag_max_length and file_tag_max_count
options so that tags longer than this length are not displayed, and only
the first few tags are displayed.

Also makes tags show on page 5 only.
This commit is contained in:
nanahi 2024-04-17 06:27:04 -04:00 committed by Kacper Michajłow
parent 65fef73c2b
commit d2bd77ada0
3 changed files with 32 additions and 7 deletions

View File

@ -7169,10 +7169,10 @@ Miscellaneous
-------------
``--display-tags=tag1,tags2,...``
Set the list of tags that should be displayed on the terminal. Tags that
are in the list, but are not present in the played file, will not be shown.
If a value ends with ``*``, all tags are matched by prefix (though there
is no general globbing). Just passing ``*`` essentially filtering.
Set the list of tags that should be displayed on the terminal and stats.
Tags that are in the list, but are not present in the played file, will not
be shown. If a value ends with ``*``, all tags are matched by prefix (though
there is no general globbing). Just passing ``*`` essentially filtering.
The default includes a common list of tags, call mpv with ``--list-options``
to see it.

View File

@ -93,6 +93,16 @@ Configurable Options
respective duration. This can result in overlapping text when multiple
scripts decide to print text at the same time.
``file_tag_max_length``
Default: 128
Only show file tags shorter than this length, in bytes.
``file_tag_max_count``
Default: 16
Only show the first specified amount of file tags.
``term_width_limit``
Default: -1

View File

@ -31,6 +31,8 @@ local o = {
ass_formatting = true,
persistent_overlay = false, -- whether the stats can be overwritten by other output
filter_params_max_length = 100, -- show one filter per line if list exceeds this length
file_tag_max_length = 128, -- only show file tags shorter than this length in bytes
file_tag_max_count = 16, -- only show the first x file tags
show_frame_info = false, -- whether to show the current frame info
term_width_limit = -1, -- overwrites the terminal width
term_height_limit = -1, -- overwrites the terminal height
@ -641,13 +643,26 @@ local function add_header(s)
end
local function add_file(s, print_cache)
local function add_file(s, print_cache, print_tags)
append(s, "", {prefix="File:", nl="", indent=""})
append_property(s, "filename", {prefix_sep="", nl="", indent=""})
if mp.get_property_osd("filename") ~= mp.get_property_osd("media-title") then
append_property(s, "media-title", {prefix="Title:"})
end
if print_tags then
local tags = mp.get_property_native("display-tags")
local tags_displayed = 0
for _, tag in ipairs(tags) do
local value = mp.get_property("metadata/by-key/" .. tag)
if tag ~= "Title" and tags_displayed < o.file_tag_max_count
and value and value:len() < o.file_tag_max_length then
append(s, value, {prefix=string.gsub(tag, "_", " ") .. ":"})
tags_displayed = tags_displayed + 1
end
end
end
local editions = mp.get_property_number("editions")
local edition = mp.get_property_number("current-edition")
local ed_cond = (edition and editions > 1)
@ -1140,7 +1155,7 @@ local function default_stats()
local stats = {}
eval_ass_formatting()
add_header(stats)
add_file(stats, true)
add_file(stats, true, false)
add_video_out(stats)
add_video(stats)
add_audio(stats)
@ -1287,7 +1302,7 @@ local function track_info()
append(h, "", {prefix=format("%s:%s", desc, scroll_hint()), nl="", indent=""})
h = {table.concat(h)}
table.insert(c, o.nl .. o.nl)
add_file(c)
add_file(c, false, true)
for i, track in ipairs(mp.get_property_native("track-list")) do
if track['selected'] then
add_track(c, track, i - 1)