[FFmpeg-devel] [PATCH] libavutil/timestamp.h: Fix loss of precision in timestamps for silencedetect on long files
Marton Balint
cus at passwd.hu
Wed Feb 21 22:25:11 EET 2024
On Tue, 20 Feb 2024, Allan Cady via ffmpeg-devel wrote:
> When the silencedetect audio filter is run against long files, the
> output timestamps gradually lose precision as the scan proceeds further
> into the file. This is because the output format specifier ("%.6g" in
> libavutil/timestamp.h) limits the total field width to six significant
> digits. As the offset into the file increases, digits drop off the end,
> until eventually, for offsets greater than 100000 seconds (about 28
> hours), fractions of a second disappear altogether, and the timestamps
> are logged as whole seconds.
>
> This patch changes the format to "%.6f" for silencedetect, which will
> give microsecond precision for all timestamps regardless of offset.
>
> libavutil/timestamp.h exposes a macro, av_ts2timestr, as the public
> interface. This macro was used by silencedetect.c, as well as other
> source files. In order to fix the issue for silencedetect without
> affecting other files and tests, I have added a new macro,
> av_ts2timestr_fixed_precision, which uses the new format specifier.
> The original av_ts_make_time_string remains, with the original
> behavior.
I'd rather just to fix av_ts_make_string to not limit the number of
significant digits. Something like:
1) Print the number in decimal notation with at most 6 fractional digits.
2) Use less fractional digits if the first format would not fit into
AV_TS_MAX_STRING_SIZE.
3) Use scientific notation if the second format would not fit into
AV_TS_MAX_STRINT_SIZE.
Regards,
Marton
More information about the ffmpeg-devel
mailing list