diff --git a/DOCS/man/en/options.rst b/DOCS/man/en/options.rst index e1134ef864..8ed9ba8066 100644 --- a/DOCS/man/en/options.rst +++ b/DOCS/man/en/options.rst @@ -1880,6 +1880,29 @@ numbers would be more intuitive, but are not easily implementable because container formats usually use time stamps for identifying frames.) + ``%w{X}`` + Specify the current playback time using the format string ``X``. The + nested time format string is contained within ``{`` and ``}``. + ``%p`` is like ``%w{%H:%M:%S}``, and ``%P`` is like ``%w{%H:%M:%S.%T}``. + + Valid format specifiers: + ``%H`` + hour (padded with 0 to two digits) + ``%h`` + hour (not padded) + ``%M`` + minutes (00-59) + ``%m`` + total minutes (includes hours, unlike ``%M``) + ``%S`` + seconds (00-59) + ``%s`` + total seconds (includes hours and minutes) + ``%f`` + like ``%s``, but as float + ``%T`` + milliseconds (000-999) + ``%tX`` Specify the current local date/time using the format ``X``. This format specifier uses the UNIX ``strftime()`` function internally, and inserts diff --git a/mpvcore/screenshot.c b/mpvcore/screenshot.c index b7697e913b..0afa88182b 100644 --- a/mpvcore/screenshot.c +++ b/mpvcore/screenshot.c @@ -186,6 +186,23 @@ static char *create_fname(struct MPContext *mpctx, char *template, talloc_free(t); break; } + case 'w': { + if (template[0] != '{') + goto error_exit; + template++; + char *end = strchr(template, '}'); + if (!end) + goto error_exit; + char *fmt = talloc_strndup(res, template, end - template); + char *s = mp_format_time_fmt(fmt, get_current_time(mpctx)); + if (!s) + goto error_exit; + append_filename(&res, s); + talloc_free(s); + talloc_free(fmt); + template = end + 1; + break; + } case 't': { char tfmt = *template; if (!tfmt)