[FFmpeg-devel] [PATCH] avformat/matroskaenc: Allow changing the time stamp precision via option
James Almer
jamrial at gmail.com
Fri May 21 01:37:02 EEST 2021
On 5/20/2021 7:33 PM, Michael Fabian 'Xaymar' Dirks wrote:
> On 2021-05-21 00:30, Michael Fabian 'Xaymar' Dirks wrote:
>> On 2021-05-21 00:25, James Almer wrote:
>>> On 5/20/2021 7:20 PM, Lynne wrote:
>>>> May 20, 2021, 20:08 by jamrial at gmail.com:
>>>>
>>>>> On 5/20/2021 3:00 PM, Michael Fabian 'Xaymar' Dirks wrote:
>>>>>
>>>>>> On 2021-05-20 19:26, James Almer wrote:
>>>>>>
>>>>>>> On 5/20/2021 2:18 PM, michael.dirks at xaymar.com wrote:
>>>>>>>
>>>>>>>> From: Michael Fabian 'Xaymar' Dirks <michael.dirks at xaymar.com>
>>>>>>>>
>>>>>>>> Adds "timestamp_precision" to the available option for
>>>>>>>> Matroska/WebM
>>>>>>>> muxing. The option enables users and developers to change the
>>>>>>>> precision
>>>>>>>> of the time stamps in the Matroska/WebM container up to 1
>>>>>>>> nanosecond,
>>>>>>>> which can aid with the proper detection of constant and variable
>>>>>>>> rate
>>>>>>>> content.
>>>>>>>>
>>>>>>>> Work-around fix for: 259, 6406, 7927, 8909 and 9124.
>>>>>>>>
>>>>>>>> Signed-off-by: Michael Fabian 'Xaymar' Dirks
>>>>>>>> <michael.dirks at xaymar.com>
>>>>>>>> ---
>>>>>>>> doc/muxers.texi | 8 ++++++++
>>>>>>>> libavformat/matroskaenc.c | 28 ++++++++++++++++++++--------
>>>>>>>> 2 files changed, 28 insertions(+), 8 deletions(-)
>>>>>>>>
>>>>>>>> diff --git a/doc/muxers.texi b/doc/muxers.texi
>>>>>>>> index e1c6ad0829..d9f7badae1 100644
>>>>>>>> --- a/doc/muxers.texi
>>>>>>>> +++ b/doc/muxers.texi
>>>>>>>> @@ -1583,6 +1583,14 @@ bitmap is stored bottom-up. Note that
>>>>>>>> this option does not flip the bitmap
>>>>>>>> which has to be done manually beforehand, e.g. by using the
>>>>>>>> vflip filter.
>>>>>>>> Default is @var{false} and indicates bitmap is stored top down.
>>>>>>>> + at item timestamp_precision
>>>>>>>> +Sets the timestamp precision up to 1 nanosecond for
>>>>>>>> Matroska/WebM, which can
>>>>>>>> +improve detection of constant rate content in demuxers. Note
>>>>>>>> that some poorly
>>>>>>>> +implemented demuxers may require a timestamp precision of 1
>>>>>>>> millisecond, so
>>>>>>>> +increasing it past that point may result in playback issues.
>>>>>>>> Higher precision
>>>>>>>> +also reduces the maximum possible timestamp significantly.
>>>>>>>> +Default is @var{1/1000000000} (1 nanosecond).
>>>>>>>>
>>>>>>>
>>>>>>> Like i said, the default must be the one defined in the spec.
>>>>>>> This version not only would need FATE test updates, it also like
>>>>>>> you described makes all new files by default have a lot of
>>>>>>> overhead from having one block per cluster.
>>>>>>>
>>>>>>
>>>>>> I am aware of what you said and I am also aware of Lynne said. I
>>>>>> do not know who has the actual final say in this, all I know is
>>>>>> that the maintainers for matroskaenc.c are "David Conrad" and
>>>>>> "Andreas Rheinhardt" - both of which have not commented on this yet.
>>>>>>
>>>>>
>>>>> Lynne agreed on IRC that it can remain as 1ms.
>>>>>
>>>> If there's a chance it could be changed to 1us (the common internal
>>>> lavf timebase),
>>>> I'd like for it to be, but not without a small partial study of
>>>> compatibility with common
>>>> implementations.
>>>> Specifically, the one case I've heard where non-1ms timebases had
>>>> issues was with VLC's
>>>> demuxer, where apparently giving an external .mks file as subtitles
>>>> with a non-1ms timebase
>>>> caused the player to OOM. If this is/was still true, for shame, for
>>>> shame.
>>>
>>> 1us is incompatible with the default value for cluster_time_limit.
>>> It's in fact incompatible with any value for it, since it will force
>>> one block per cluster.
>>> If the user wants that, then they are free to set 1us, but the
>>> default of one option should not invalidate the default of another.
>>> It's the entire point the warning exists for and is printed.
>>>
>>>>
>>>> Also, the patch is missing some error-checking. WebM hard-requires a
>>>> 1ms timebase.
>>>> You should likely error out if the demuxer acts in WebM mode and the
>>>> timebase is set
>>>> to a different value.
>>>
>>> Good catch.
>>
>> I may be misreading the WebM specification, but it only says it SHOULD
>> be set 1.000.000 nanoseconds, not MUST, which going by the rest of the
>> wording does not mean it is required, just very very recommended.
>> Perhaps a warning for WebM would be better than an error-exit?
>>
> I was misreading the specification. Shouldn't try to read technical
> documentation when tired. Will add the error-exit, ignore the patch sent
> before Lynnes message arrived here.
No, apparently you were right. In
https://www.webmproject.org/docs/container/ there's a line that says
"The TimecodeScale element SHOULD be set to a default of 1.000.000
nanoseconds.", which means it's recommended but not required. Or is
there another source for the spec?
Also, the spec uses TimecodeScale and TimestampScale interchangeably,
which makes things a bit confusing.
>>>
>>>>
>>>> As for the whole "1ms is good enough for everything!", well, it's
>>>> not for 960fps VFR video
>>>> and that's all I'm going to say. Where you get 960fps VFR videos?
>>>> Smartphones.
>>>> Even a cheap one from 5 years ago can shoot at 240fps. They're
>>>> really common, and
>>>> depending on what strategy you use to convert the video, rounding
>>>> jitter can result in some
>>>> horrible slow-mo conversions.
>>>>
>>>>
>>>>> Probably should have said it here, but i guess neither him
>>>>>
>>>> she. Try to remember, this hasn't been the first time.
>>>
>>> Sorry, i just default to that in general. Will try to not make that
>>> mistake again.
>>
>
More information about the ffmpeg-devel
mailing list