[FFmpeg-devel] [PATCH v11 00/14] Subtitle Filtering

Soft Works softworkz at hotmail.com
Thu Sep 30 23:07:05 EEST 2021


v11 Update:

- FEATURE-COMPLETE!
  No more features or filters will be added to this
  patchset
- Added subscale filter
  Provides high-quality scaling and rearranging 
  functionality for graphical subtitles.
  This has been the last missing bit for making this
  a useful and versatile toolset for subtitle manipulation
- The common ass utility functions remain to reside
  in avutil, but in this version, they are marked as
  avpriv_ and no longer public like in the previous
  version.
- A number of detail fixes are included, but there
  haven't been significant changes to the core
  implementation in the past few versions.
  I'm quite confident about the current state.
- As a final step I'll be going to create a wiki page
  presenting a comprehensive collection of usage examples,
  showing off the whole range of new capabilities 
  and also providing proof that it is working universally
  in a wide range of use cases.
  
v10 Update: INVALID

- Incorrect patch sequence sent.
 
v9 Update:

- Addressed all review comments (thanks Andreas!)
- Move ass utility functions to avutil as public API
- Handle subtitle decoding via new decode API
  (removed av_decode_subtitle3)
- Change 'subtitle_header' to use refcounted buffers
- Allow mapping subtitle streams to filter graph
  and direct outputs simultaneously
- Added explanation and justification for test changes
  to commit message 
  
--------------------------------------------------------------

This patchset introduces filtering support for subtitles.

Besides the ground work, this patchset includes a range
of new filters for subtitle processing:

- subscale (S -> S)
  Provides high-quality scaling and rearranging 
  functionality for graphical subtitles.
  
- graphicsubs2text (S -> S)
  Convert graphic subtitles to text subtitles via OCR
  
- censor {S -> S)
  Allows censoring word in subtitles by a configurable
  word list
  
- show_speaker {S -> S)
  Prepend the speaker names to text lines
  (those are often available in ass subs)  
  
- split_cc (V -> VS)
  Splits out Closed-Caption data as a subtitle stream
  for filtering and encoding
  
- overlay_graphicsubs (VS -> V)
  Overlay graphic subtitles onto a video stream

- graphicsub2video {S -> V)
  Converts graphic subtitles to (transparent) video frames
  
- overlay_textsubs {VS -> V)
  Overlay text subtitles onto a video stream.
  
- textsubs2video {S -> V)
  Converts text subtitles to video frames
  
- textmod {S -> S)
  Modify subtitle text in a number of ways

- stripstyles {S -> S)
  Remove all inline styles from subtitle events

Regards,
softworkz

softworkz (14):
  global: Prepare AVFrame for subtitle handling
  global: Move ass helper functions to avutil as avpriv_ and extend ass
    dialog parsing
  fftools/play,probe: Adjust for subtitle changes
  avfilter/subtitles: Add subtitles.c for subtitle frame allocation
  avfilter/avfilter: Handle subtitle frames
  avfilter/sbuffer: Add sbuffersrc and sbuffersink filters
  avfilter/overlay_graphicsubs: Add overlay_graphicsubs and
    graphicsub2video filters
  fftools/ffmpeg: Replace sub2video with subtitle frame filtering
  avfilter/overlay_textsubs: Add overlay_textsubs and textsubs2video
    filters
  avfilter/textmod: Add textmod, censor and show_speaker filters
  avfilter/stripstyles: Add stripstyles filter
  avfilter/split_cc: Add split_cc filter for closed caption handling
  avfilter/graphicsub2text: Add new graphicsub2text filter (OCR)
  avfilter/subscale: Add filter for scaling and/or re-arranging
    graphical subtitles

 configure                                     |   7 +-
 doc/filters.texi                              | 662 +++++++++++++
 fftools/ffmpeg.c                              | 507 +++++-----
 fftools/ffmpeg.h                              |  14 +-
 fftools/ffmpeg_filter.c                       | 209 +++--
 fftools/ffmpeg_hw.c                           |   2 +-
 fftools/ffmpeg_opt.c                          |   3 +-
 fftools/ffplay.c                              | 102 +--
 fftools/ffprobe.c                             |  48 +-
 libavcodec/Makefile                           |  56 +-
 libavcodec/ass.h                              | 129 +--
 libavcodec/assdec.c                           |   2 +-
 libavcodec/assenc.c                           |   2 +-
 libavcodec/avcodec.c                          |  19 -
 libavcodec/avcodec.h                          |  75 +-
 libavcodec/ccaption_dec.c                     |  19 +-
 libavcodec/decode.c                           |  53 +-
 libavcodec/jacosubdec.c                       |   2 +-
 libavcodec/microdvddec.c                      |   7 +-
 libavcodec/movtextdec.c                       |   3 +-
 libavcodec/movtextenc.c                       |  20 +-
 libavcodec/mpl2dec.c                          |   2 +-
 libavcodec/pgssubdec.c                        |   1 +
 libavcodec/realtextdec.c                      |   2 +-
 libavcodec/samidec.c                          |   2 +-
 libavcodec/srtdec.c                           |   2 +-
 libavcodec/srtenc.c                           |  16 +-
 libavcodec/subviewerdec.c                     |   2 +-
 libavcodec/textdec.c                          |   4 +-
 libavcodec/ttmlenc.c                          |  15 +-
 libavcodec/utils.c                            |  11 +
 libavcodec/webvttdec.c                        |   2 +-
 libavcodec/webvttenc.c                        |  16 +-
 libavfilter/Makefile                          |  14 +
 libavfilter/allfilters.c                      |  13 +
 libavfilter/avfilter.c                        |  30 +-
 libavfilter/avfiltergraph.c                   |   5 +
 libavfilter/buffersink.c                      |  63 ++
 libavfilter/buffersink.h                      |  15 +
 libavfilter/buffersrc.c                       |  72 ++
 libavfilter/buffersrc.h                       |   1 +
 libavfilter/formats.c                         |  14 +
 libavfilter/formats.h                         |   3 +
 libavfilter/internal.h                        |   1 +
 libavfilter/sf_graphicsub2text.c              | 323 +++++++
 libavfilter/sf_split_cc.c                     | 298 ++++++
 libavfilter/sf_stripstyles.c                  | 211 +++++
 libavfilter/sf_subscale.c                     | 867 ++++++++++++++++++
 libavfilter/sf_textmod.c                      | 719 +++++++++++++++
 libavfilter/subtitles.c                       |  63 ++
 libavfilter/subtitles.h                       |  44 +
 libavfilter/vf_overlay_graphicsubs.c          | 724 +++++++++++++++
 libavfilter/vf_overlay_textsubs.c             | 609 ++++++++++++
 libavfilter/vf_subtitles.c                    |  50 +-
 libavformat/utils.c                           |   1 +
 libavutil/Makefile                            |   6 +
 {libavcodec => libavutil}/ass.c               |  73 +-
 libavutil/ass_internal.h                      | 139 +++
 {libavcodec => libavutil}/ass_split.c         |  30 +-
 .../ass_split_internal.h                      |  24 +-
 libavutil/frame.c                             | 191 +++-
 libavutil/frame.h                             |  93 +-
 libavutil/subfmt.c                            | 240 +++++
 libavutil/subfmt.h                            | 185 ++++
 tests/ref/fate/filter-overlay-dvdsub-2397     | 181 ++--
 tests/ref/fate/sub-dvb                        | 162 ++--
 tests/ref/fate/sub2video                      |   1 -
 tests/ref/fate/sub2video_basic                |  93 +-
 tests/ref/fate/sub2video_time_limited         |   4 +-
 69 files changed, 6571 insertions(+), 1007 deletions(-)
 create mode 100644 libavfilter/sf_graphicsub2text.c
 create mode 100644 libavfilter/sf_split_cc.c
 create mode 100644 libavfilter/sf_stripstyles.c
 create mode 100644 libavfilter/sf_subscale.c
 create mode 100644 libavfilter/sf_textmod.c
 create mode 100644 libavfilter/subtitles.c
 create mode 100644 libavfilter/subtitles.h
 create mode 100644 libavfilter/vf_overlay_graphicsubs.c
 create mode 100644 libavfilter/vf_overlay_textsubs.c
 rename {libavcodec => libavutil}/ass.c (73%)
 create mode 100644 libavutil/ass_internal.h
 rename {libavcodec => libavutil}/ass_split.c (94%)
 rename libavcodec/ass_split.h => libavutil/ass_split_internal.h (89%)
 create mode 100644 libavutil/subfmt.c
 create mode 100644 libavutil/subfmt.h

-- 
2.30.2.windows.1



More information about the ffmpeg-devel mailing list