[FFmpeg-devel] [PATCH] avformat/matroskaenc: Allow changing the time stamp precision via option

James Almer jamrial at gmail.com
Fri May 21 02:04:14 EEST 2021


On 5/20/2021 7:57 PM, Michael Fabian 'Xaymar' Dirks wrote:
> On 2021-05-21 00:37, James Almer wrote:
>> 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.
>>
> Directly above it:
> 
> Muxers should treat all guidelines marked SHOULD in this section as 
> MUST. This will foster consistency across WebM files in the real world.

Oh FFS, don't use rfc2119 keywords verbatim in your spec if you're not 
compliant with it.

> 
> I missed it as well as it just didn't look important at first.

Thanks for clearing that out.

> 
>>>>>
>>>>>>
>>>>>> 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