[FFmpeg-devel] [PATCH v2 0/4] Initial region (styling) support for TTML

Jan Ekström jeebjp at gmail.com
Mon Apr 19 12:38:09 EEST 2021


On Wed, Apr 14, 2021 at 9:57 AM Jan Ekström <jeebjp at gmail.com> wrote:
>
> Now sets alignment, font size, font family and the region's position
> and size according to the ASS styles passed to the encoder. Regions are
> relatively important in TTML, since the spec-defined default region is in
> raster location (similar to the default with HTML) - it starts from the
> top left corner and covers the whole screen.
>
> Mapping of the ASS script resolution to the cell resolution and using cells as
> sizing metric is not perfect, but while TTML does have a pixel based reference
> sizing by means of setting an extent to the root tt element, it is specifically
> disallowed in the EBU-TT profile, as well as apparently generally frowned upon
> as opposed to defining the cell resolution. In general, mapping to cell resolution
> seems to give "close enough" results, though.
>
> FATE test output still passes https://github.com/skynav/ttt/ validation,
> and visually the result can be verified against such renderers as
> http://sandflow.com/imsc1_1/index.html .
>
> Changes from v1:
> * Removal of unnecessary intermediate AVBprints by printing elements in three
>   steps instead of attempting to do a single one. A bit less pretty, but lets
>   us write straight into the actual output buffer.
> * Removal of some local scopes. Seems like I'd been utilizing them as a
>   convenient way of having variable definitions after initial sanity checks.
> * Merging of script play X/Y resolution being zero or smaller checks into just
>   <= 0 checks.
> * Utilization of extradata buffers as-is after verifying that the buffer ends
>   with a null. Removes the requirement to copy strings out of the extradata into
>   the lavf context, and thus the deinit/free function was no longer necessary.
>
> The diff can be checked as follows on my git repository:
> https://github.com/jeeb/ffmpeg/compare/ttml_add_default_region_v1..ttml_add_default_region_v2
> (more easily readable due to file limiting with the following command:
> git diff ttml_add_default_region_v1..ttml_add_default_region_v2 -- libavcodec/ttmlenc.* libavformat/ttmlenc.*
> )
>
> Jan
>
> Jan Ekström (4):
>   avcodec/ttmlenc: split header writing into its own function
>   avformat/ttmlenc: enable writing out additional header values
>   avcodec/ttmlenc: add initial support for regions and styles
>   avcodec/ttmlenc: add support for region positioning and sizing
>
>  libavcodec/ttmlenc.c       | 267 ++++++++++++++++++++++++++++++++++---
>  libavcodec/ttmlenc.h       |   6 +
>  libavformat/ttmlenc.c      |  70 +++++++++-
>  tests/ref/fate/sub-ttmlenc |  88 +++++++-----
>  4 files changed, 371 insertions(+), 60 deletions(-)
>
> --
> 2.30.2
>

If there is no further interest, I will start applying this set in a
day or two, as this actually makes subtitles look like you'd expect
them to look like :)  (due to the TTML default region starting from
the top left corner).

Jan


More information about the ffmpeg-devel mailing list