Hi,add %{localtime_ms}, %{gmtime_ms} functions to the drawtext filter. Same as %{localtime}/%{gmtime} but with additional millisecond part.
sorry for delay, second version including review remarks: -get timing once -also add gmtime_ms instead of just localtime_ms Thanks, Thilo
From 07c940d63df392a592a72dc23fb48f6682284c65 Mon Sep 17 00:00:00 2001 From: Thilo Borgmann <thilo.borgm...@mail.de> Date: Thu, 9 Dec 2021 19:57:18 +0100 Subject: [PATCH v2] lavfi/drawtext: Add localtime_ms for millisecond precision Suggested-By: ffm...@fb.com --- doc/filters.texi | 8 ++++++++ libavfilter/vf_drawtext.c | 15 +++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 78faf76..db75632 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -10949,10 +10949,18 @@ It can be used to add padding with zeros from the left. The time at which the filter is running, expressed in UTC. It can accept an argument: a strftime() format string. +@item gmtime_ms +Same as @code{gmtime} but with millisecond precision. +It can accept an argument: a strftime() format string. + @item localtime The time at which the filter is running, expressed in the local time zone. It can accept an argument: a strftime() format string. +@item localtime_ms +Same as @code{localtime} but with millisecond precision. +It can accept an argument: a strftime() format string. + @item metadata Frame metadata. Takes one or two arguments. diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c index 382d589..65da1ec 100644 --- a/libavfilter/vf_drawtext.c +++ b/libavfilter/vf_drawtext.c @@ -1045,15 +1045,24 @@ static int func_strftime(AVFilterContext *ctx, AVBPrint *bp, char *fct, unsigned argc, char **argv, int tag) { const char *fmt = argc ? argv[0] : "%Y-%m-%d %H:%M:%S"; + int64_t unow; time_t now; struct tm tm; - time(&now); - if (tag == 'L') + unow = av_gettime(); + now = unow / 1000000; + if (tag == 'L' || tag == 'm') localtime_r(&now, &tm); else tm = *gmtime_r(&now, &tm); av_bprint_strftime(bp, fmt, &tm); + + if (tag == 'M' || tag == 'm') { + char ms[5] = {0}; + int64_t dnow = (unow - ((int64_t)now) * 1000000) / 1000; + snprintf(ms, 5, ".%03d", (int)dnow); + av_bprint_append_data(bp, ms, 4); + } return 0; } @@ -1152,7 +1161,9 @@ static const struct drawtext_function { { "pict_type", 0, 0, 0, func_pict_type }, { "pts", 0, 3, 0, func_pts }, { "gmtime", 0, 1, 'G', func_strftime }, + { "gmtime_ms", 0, 1, 'M', func_strftime }, { "localtime", 0, 1, 'L', func_strftime }, + { "localtime_ms", 0, 1, 'm', func_strftime }, { "frame_num", 0, 0, 0, func_frame_num }, { "n", 0, 0, 0, func_frame_num }, { "metadata", 1, 2, 0, func_metadata }, -- 1.8.3.2
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".