[FFmpeg-devel] [PATCH v5 24/25] fftools/ffmpeg: Introduce subtitle filtering and new frame-based subtitle encoding

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Sat Jun 25 16:00:41 EEST 2022


Soft Works:
> 
> 
> ________________________________________
> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> on behalf of Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> Sent: Saturday, June 25, 2022 1:42 PM
> To: ffmpeg-devel at ffmpeg.org
> Subject: Re: [FFmpeg-devel] [PATCH v5 24/25] fftools/ffmpeg: Introduce subtitle filtering and new frame-based subtitle encoding
> 
> Michael Niedermayer:
>> On Sat, Jun 25, 2022 at 09:57:56AM +0000, softworkz wrote:
>>> From: softworkz <softworkz at hotmail.com>
>>>
>>> This commit actually enables subtitle filtering in ffmpeg by
>>> sending and receiving subtitle frames to and from a filtergraph.
>>>
>>> The heartbeat functionality from the previous sub2video implementation
>>> is removed and now provided by the 'subfeed' filter.
>>> The other part of sub2video functionality is retained by
>>> auto-insertion of the new graphicsub2video filter.
>>>
>>> Justification for changed test refs:
>>>
>>> - sub2video
>>>   The previous results were incorrect. The command line for this test
>>>   specifies -r 5 (5 frames per second), which is now fulfilled by the
>>>   additional frames in the reference output.
>>>   Example: The first subtitle time is 499000, the second is 15355000,
>>>   which means 0.5s and 15.35s with a difference of 14.85s.
>>>   15s * 5fps = 75 frames and that's now the exact number of video
>>>   frames between these two subtitle events.
>>>
>>> - sub2video_basic
>>>   The previous results had some incorrect output because multiple
>>>   frames had the same dts
>>>   The non-empty content frames are visually identical, the different
>>>   CRC is due to the different blending algorithm that is being used.
>>>
>>> - sub2video_time_limited
>>>   Subtitle frames are emitted to the filter graphs at a 5 fps rate
>>>   by default. The time limit for this test is 15s * 5fps = 75 frames
>>>   which matches the count in the new ref.
>>>
>>> - sub-dvb
>>>   Running ffprobe -show_frames on the source file shows that there
>>>   are 7 subtitle frames with 0 rects in the source at the start
>>>   and 2 at the end. This translates to the 14 and 4 additional
>>>   entries in the new test results.
>>>
>>> - filter-overlay-dvdsub-2397
>>>   Overlay results have slightly different CRCs due to different
>>>   blending implementation
>>>
>>> - sub-scc
>>>   The first entry is no longer in the output because it is before
>>>   the actual start time and the strim filter removes such entries
>>>   now (like for video and audio)
>>>
>>> Signed-off-by: softworkz <softworkz at hotmail.com>
>>> ---
>>>  fftools/ffmpeg.c                          |  613 +++++-----
>>>  fftools/ffmpeg.h                          |   17 +-
>>>  fftools/ffmpeg_filter.c                   |  270 +++--
>>>  fftools/ffmpeg_hw.c                       |    2 +-
>>>  fftools/ffmpeg_opt.c                      |   28 +-
>>>  tests/ref/fate/filter-overlay-dvdsub-2397 |  182 +--
>>>  tests/ref/fate/sub-dvb                    |  162 +--
>>>  tests/ref/fate/sub-scc                    |    1 -
>>>  tests/ref/fate/sub2video                  | 1091 +++++++++++++++++-
>>>  tests/ref/fate/sub2video_basic            | 1238 +++++++++++++++++++--
>>>  tests/ref/fate/sub2video_time_limited     |   78 +-
>>>  11 files changed, 3010 insertions(+), 672 deletions(-)
>>
>> seems to break fate
>>
>> Input #0, ass, from 'fate-suite//sub/1ededcbd7b.ass':
>>   Duration: N/A, bitrate: N/A
>>   Stream #0:0: Subtitle: ass
>> Codec AVOption threads (set the number of threads) specified for input file #0 (fate-suite//sub/1ededcbd7b.ass) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some decoder which was not actually used for any stream.
>> Codec AVOption thread_type (select multithreading type) specified for input file #0 (fate-suite//sub/1ededcbd7b.ass) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some decoder which was not actually used for any stream.
>> Stream mapping:
>>   Stream #0:0 -> #0:0 (ass (ssa) -> ass (ssa))
>> cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
>> subtitle input filter: decoding size 1280x720
>> [out_0_0 @ 0x557cab64bbc0] Subtitle format change from 1 to 3
>> Assertion c > 0 failed at libavutil/mathematics.c:61
> 
> That's an av_assert2-assert. softworkz probably didn't test these.
> 
> 
> Yup. To be honest, I wasn't even aware that I'm supposed to. It seems patchwork doesn't do either?
> 
> Do I need a different configure or make fate?
> 

The supported way to set it is to pass --assert-level=2 to configure.
(You can also modify config.h by adding "#define ASSERT_LEVEL 2"; if you
have not used assert-level during configure, you should have no
ASSERT_LEVEL in config.h, but better check this.)

- Andreas


More information about the ffmpeg-devel mailing list