avfilter/drawtext: allow to format pts with strftime
Signed-off-by: Alex Agranovsky <alex@sighthound.com>
This commit is contained in:
parent
1f3a29e999
commit
cf28490e56
@ -5398,14 +5398,20 @@ A 1 character description of the current picture type.
|
|||||||
|
|
||||||
@item pts
|
@item pts
|
||||||
The timestamp of the current frame.
|
The timestamp of the current frame.
|
||||||
It can take up to two arguments.
|
It can take up to three arguments.
|
||||||
|
|
||||||
The first argument is the format of the timestamp; it defaults to @code{flt}
|
The first argument is the format of the timestamp; it defaults to @code{flt}
|
||||||
for seconds as a decimal number with microsecond accuracy; @code{hms} stands
|
for seconds as a decimal number with microsecond accuracy; @code{hms} stands
|
||||||
for a formatted @var{[-]HH:MM:SS.mmm} timestamp with millisecond accuracy.
|
for a formatted @var{[-]HH:MM:SS.mmm} timestamp with millisecond accuracy.
|
||||||
|
@code{gmtime} stands for the timestamp of the frame formatted as UTC time;
|
||||||
|
@code{localtime} stands for the timestamp of the frame formatted as
|
||||||
|
local time zone time.
|
||||||
|
|
||||||
The second argument is an offset added to the timestamp.
|
The second argument is an offset added to the timestamp.
|
||||||
|
|
||||||
|
If the format is set to @code{localtime} or @code{gmtime},
|
||||||
|
a third argument may be supplied: a strftime() format string.
|
||||||
|
By default, @var{YYYY-MM-DD HH:MM:SS} format will be used.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@subsection Examples
|
@subsection Examples
|
||||||
|
@ -824,6 +824,16 @@ static int func_pts(AVFilterContext *ctx, AVBPrint *bp,
|
|||||||
(int)(ms / 1000) % 60,
|
(int)(ms / 1000) % 60,
|
||||||
(int)ms % 1000);
|
(int)ms % 1000);
|
||||||
}
|
}
|
||||||
|
} else if (!strcmp(fmt, "localtime") ||
|
||||||
|
!strcmp(fmt, "gmtime")) {
|
||||||
|
struct tm tm;
|
||||||
|
time_t ms = (time_t)pts;
|
||||||
|
const char *timefmt = argc >= 3 ? argv[2] : "%Y-%m-%d %H:%M:%S";
|
||||||
|
if (!strcmp(fmt, "localtime"))
|
||||||
|
localtime_r(&ms, &tm);
|
||||||
|
else
|
||||||
|
gmtime_r(&ms, &tm);
|
||||||
|
av_bprint_strftime(bp, timefmt, &tm);
|
||||||
} else {
|
} else {
|
||||||
av_log(ctx, AV_LOG_ERROR, "Invalid format '%s'\n", fmt);
|
av_log(ctx, AV_LOG_ERROR, "Invalid format '%s'\n", fmt);
|
||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
@ -958,7 +968,7 @@ static const struct drawtext_function {
|
|||||||
{ "expr_int_format", 2, 3, 0, func_eval_expr_int_format },
|
{ "expr_int_format", 2, 3, 0, func_eval_expr_int_format },
|
||||||
{ "eif", 2, 3, 0, func_eval_expr_int_format },
|
{ "eif", 2, 3, 0, func_eval_expr_int_format },
|
||||||
{ "pict_type", 0, 0, 0, func_pict_type },
|
{ "pict_type", 0, 0, 0, func_pict_type },
|
||||||
{ "pts", 0, 2, 0, func_pts },
|
{ "pts", 0, 3, 0, func_pts },
|
||||||
{ "gmtime", 0, 1, 'G', func_strftime },
|
{ "gmtime", 0, 1, 'G', func_strftime },
|
||||||
{ "localtime", 0, 1, 'L', func_strftime },
|
{ "localtime", 0, 1, 'L', func_strftime },
|
||||||
{ "frame_num", 0, 0, 0, func_frame_num },
|
{ "frame_num", 0, 0, 0, func_frame_num },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user