From patchwork Tue Oct 25 09:13:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 34845 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4a86:b0:9d:28a3:170e with SMTP id fn6csp2684165pzb; Tue, 25 Oct 2022 02:14:01 -0700 (PDT) X-Google-Smtp-Source: AMsMyM42yY1Akv3K3m5tA0YszHHwM1Q1H+RId25m9Cfjuq4/1RDIVJtvnMIi8RDwXJbPG7bkvBbq X-Received: by 2002:a17:906:db0d:b0:77b:a7cd:8396 with SMTP id xj13-20020a170906db0d00b0077ba7cd8396mr33083914ejb.264.1666689241114; Tue, 25 Oct 2022 02:14:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666689241; cv=none; d=google.com; s=arc-20160816; b=WV0PasIw+0RDXM1k3Kk9QewyCTEdoYgjML7hUZHRF2FN235QMR5s/HbvswfUWXsGNv a8itteLXn9J4rJf2l8yosY9QB2ClxQQItWy2XwyvFR4AwOKqGtol1gdKCgGBfQ9nf3WY yXof29zSIxiWuaiwbbwNcKKWC8fSGsBndBr/Mjosm67KxWl35qfAaK221GeBrG0T3iE8 ieOAYNHEEv0ts6ZPgtT7tkgPRVbWlAsnzY3F3loL+1q17h8/TmcgtU2vrViH4YqzUaRR trcH+39FozNI5Wrjp9heP7WC+rt0NWImEBKpePWU9ExuXO+XK4eZPFguYHxVuprSQRAs hyNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:to:mime-version:fcc:date:from:references :in-reply-to:message-id:dkim-signature:delivered-to; bh=vJYj2RcEHmMo/0UNt4M/icHY0KYyH8fDN3hIDn9GUBo=; b=lxCTim8DaxlAgK+I5y6CVR2+ib2/1dwRb30X3jl4psdS80XaDyDmlcj24AtpXAMarL R554jLjbYoRDKXpfxmY71kVUo5GbN/9PakCPuYLx2aAoDYUBOo5V+LoIO1GZLft186so HmEzKA49yPkbT6wpuoxrT2DlSlehEtFbWpS4GWdyZdVi5awbUrWknwJMs1Co/16XaLS8 /Ybp86AyUdrhdR6egeWYPwMzAjCw4g8pTciFUKQntVh84Vp0dGwT/9COWOd3ZkQ7oNIf d9haD4dKZwp9PKIT3wMNp1OtSG97ibZevHcE7xMKe3N0SNfmwNSjfqpNlj4NGEBAvRwN e/Og== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=NlEyyNt5; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id gb26-20020a170907961a00b00783645da4e5si2387953ejc.582.2022.10.25.02.14.00; Tue, 25 Oct 2022 02:14:01 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=NlEyyNt5; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2EBD768BA9B; Tue, 25 Oct 2022 12:13:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5FA2468B3E9 for ; Tue, 25 Oct 2022 12:13:50 +0300 (EEST) Received: by mail-pj1-f42.google.com with SMTP id t10-20020a17090a4e4a00b0020af4bcae10so11312766pjl.3 for ; Tue, 25 Oct 2022 02:13:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:from:to:cc:subject:date :message-id:reply-to; bh=DpslbN3DtvLyJr3cR8sU5SpEmtVfcxMszpROCv7oIl8=; b=NlEyyNt5eaPHv+9bBxuCoSoAaDAN6hsgvqIzutXcIX88e7omRy6w2kdxv005EPz0Yv BFsObz3PHxwObpNAGc+TUkZGFPL+nk5RtAG2aTS80t4xGAY+PoA/0FgRCMROD7KJR9eb 0tyCTJXjwt2J0apnuDmSOy5IRi+0m573V/lEwkRtAbmQ8YvPDtKTUABSCzVRnXkUcNkN /kymMd5OWqpkmhUeuOctjit6oTAVhGXKonS2+S08bM6127+F1BM6HRecZ9j7wCryZEJR MVJUws6HKyNeLySqBlNSD274tT81qsKJ+ag+gTAIinVrdV1SDc2MCC3Wl604NSPGg5/J 4rGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DpslbN3DtvLyJr3cR8sU5SpEmtVfcxMszpROCv7oIl8=; b=KLWXU54mtA+t0zAasPU1EUHkjdB1Pc6oxi04q0QaNA+iQAt1hfgLtXfgEOxHXp604W CWlVyBKIsySddsRarQqVcz8n1fK2YpDhpM+3rm3ChvlDDU1d1BDv5z2CQ3SIrGArW2DF hbgXtyjTXQ1I5hBkooFwS3lQmknHP8qcLqNW4IEMPprJoRSp6ZlrhJZHGNLljWApBoIb T9mCuNEOnyzG7GmXwMSyFclBIh9tqtz95Xe0h8pWthrremGwDvzgCICWE8r6y1kIPAT1 aHj1caimdO1XOQsoVLuAKCX7zidYDPoflWMM1odLjLfPmZW1V6MZYAM7jBmcNxwJmgwY uQKQ== X-Gm-Message-State: ACrzQf2Og6yelqBQSM6r30KjYOOC87kaIm24Uh7jp+Kfyh1qxZV1aJZ9 Fo2F3fXJcXXgYOB1NUZTOkxdKVsTJNc= X-Received: by 2002:a17:902:b942:b0:178:4a7e:da04 with SMTP id h2-20020a170902b94200b001784a7eda04mr37759763pls.8.1666689228231; Tue, 25 Oct 2022 02:13:48 -0700 (PDT) Received: from [127.0.0.1] (master.gitmailbox.com. [34.83.118.50]) by smtp.gmail.com with ESMTPSA id t21-20020a634455000000b0046497308480sm909258pgk.77.2022.10.25.02.13.46 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 25 Oct 2022 02:13:47 -0700 (PDT) Message-Id: In-Reply-To: References: From: ffmpegagent Date: Tue, 25 Oct 2022 09:13:21 +0000 Fcc: Sent MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH v9 00/25] Subtitle Filtering 2022 X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: softworkz Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: nHwFKG1L3J7w Subtitle Filtering 2022 ======================= This is a substantial update to the earlier subtitle filtering patch series. A primary goal has been to address others' concerns as much as possible on one side and to provide more clarity and control over the way things are working. Clarity is is specifically important to allow for a better understanding of the need for a subtitle start pts value that can be different from the frame's pts value. This is done by refactoring the subtitle timing fields in AVFrame, adding a frame field to indicate repeated subtitle frames, and finally the full removal of the heartbeat functionality, replaced by a new 'subfeed' filter that provides different modes for arbitrating subtitle frames in a filter graph. Finally, each subtitle filter's documentation has been amended by a section describing the filter's timeline behavior (in v3 update). Subtitle Filtering Demos ======================== I published a demonstration of subtitle filtering capabilities with OCR, text and bitmap subtitle manipulation involved: Demo 1: Text-Manipulation with Bitmap Subtitles [https://github.com/softworkz/SubtitleFilteringDemos/tree/master/Demo1] v9 == * Cleared the cc recipient list * Resending after e-mail error v8 == * Rebased and adapted to upstream changes v7 == * Revert loglevel change * snull: propagate format * fftools/ffmpeg: ensure monotonic (frame-)pts values for subtitles v6 - Fix assertion errors ========================= * text2graphicsub: fix null point on uninit after error * strim: propagate width and height * avfilter: add default propagation time_base from inlink to outlink v5 - Conversion to Graphic Subtitles, and other enhancements ============================================================ * I'm glad to announce that Traian (@tcoza) has joined the project and contributed a new 'text2graphicsub' filter to convert text subtitles to graphic subtitles, which can in turn be encoded as dvd, dvb or x-subs (and any other encoder for graphic subs that might be added in the future). This filter closes the last open "gap" in subtitle processing. * stripstyles filter: now allows very fine-grained control over which ASS style codes should be preserved or stripped * stripstyles: do not drop dialog margin values * subfeed filter: eliminates duplicate frames with duplicate start times when 'fix_overlap' is specified * textmod: do not drop effect values * graphicsub2text: reduce font size jitter * ass_split: add function to selectively preserve elements when splitting * add strim, snull and ssink and further unify subtitle frame handling with audio and video * ffmpeg_filter: get simple filter notation working for subtitles v4 - Quality Improvements ========================= * finally an updated version * includes many improvements from internal testing * all FATE tests passed * all example commands from the docs verified to work * can't list all the detail changes.. * I have left out the extra commits which can be handled separately, just in case somebody wonders why these are missing: * avcodec/webvttenc: Don't encode drawing codes and empty lines * avcodec/webvttenc: convert hard-space tags to   * avutil/ass_split: Add parsing of hard-space tags (\h) * avutil/ass_split: Treat all content in curly braces as hidden * avutil/ass_split: Fix ass parsing of style codes with comments v3 - Rebase =========== due to merge conflicts - apologies. Changes in v2 ============= * added .gitattributes file to enforce binary diffs for the test refs that cannot be applied when being sent via e-mail * perform filter graph re-init due to subtitle "frame size" change only when the size was unknown before and not set via -canvas_size * overlaytextsubs: Make sure to request frames on the subtitle input * avfilter/splitcc: Start parsing cc data on key frames only * avcodec/webvttenc: Don't encode ass drawing codes and empty lines * stripstyles: fix mem leak * gs2t: improve color detection * gs2t: empty frames must not be skipped * subfeed: fix name * textmod: preserve margins * added .gitattributes file to enforce binary diffs for the test refs that cannot be applied when being sent via e-mail * perform filter graph re-init due to subtitle "frame size" change only when the size was unknown before and not set via -canvas_size * avcodec/dvbsubdec: Fix conditions for fallback to default resolution * Made changes suggested by Andreas * Fixed failing command line reported by Michael Changes from previous version v24: AVFrame ======= * Removed sub_start_time The start time is now added to the subtitle start_pts during decoding The sub_end_time field is adjusted accordingly * Renamed sub_end_time to duration which it is effectively after removing the start_time * Added a sub-struct 'subtitle_timing' to av frame Contains subtitle_pts renamed to 'subtitle_timing.start_pts' and 'subtitle_timing.duration' * Change both fields to (fixed) time_base AV_TIMEBASE * add repeat_sub field provides a clear indication whether a subtitle frame is an actual subtitle event or a repeated subtitle frame in a filter graph Heartbeat Removal ================= * completely removed the earlier heartbeat implementation * filtering arbitration is now implemented in a new filter: 'subfeed' * subfeed will be auto-inserted for compatiblity with sub2video command lines * the new behavior is not exactly identical to the earlier behavior, but it basically allows to achieve the same results * there's a small remainder, now named subtitle kickoff which serves to get things (in the filter graph) going right from the start New 'subfeed' Filter ==================== * a versatile filter for solving all kinds of problems with subtile frame flow in filter graphs * Can be inserted at any position in a graph * Auto-inserted for sub2video command lines (in repeat-mode) * Allows duration fixup delay input frames with unknown duration and infer duration from start of subsequent frame * Provides multiple modes of operation: * repeat mode (default) Queues input frames Outputs frames at a fixed (configurable) rate Either sends a matching input frame (repeatedly) or empty frames otherwise * scatter mode similar to repeat mode, but splits input frames by duration into small segments with same content * forward mode No fixed output rate Useful in combination with duration fixup or overlap fixup ffmpeg Tool Changes =================== * delay subtitle output stream initialization (like for audio and video) This is needed for example when a format header depends on having received an initial frame to derive certain header values from * decoding: set subtitle frame size from decoding context * re-init graph when subtitle size changes * always insert subscale filter for sub2video command lines (to ensure correct scaling) Subtitle Encoding ================= * ignore repeated frames for encoding based on repeat_sub field in AVFrame * support multi-area encoding for text subtitles Subtitle OCR can create multiple areas at different positions. Previously, the texts were always squashed into a single area ('subtitle rect'), which was not ideal. Multiple text areas are now generally supported: * ASS Encoder Changed to use the 'receive_packet' encoding API A single frame with multiple text areas will create multiple packets now * All other text subtitle encoders A newline is inserted between the text from multiple areas graphicsub2text (OCR) ===================== * enhanced preprocessing * using elbg algorithm for color quantization * detection and removal of text outlines * map-based identification of colors per word (text, outline, background) * add option for duration fixup * add option to dump preprocessing bitmaps * Recognize formatting and apply as ASS inline styles * per word(!) * paragraph alignment * positioning * font names * font size * font style (italic, underline, bold) * text color, outline color Other Filter Changes ==================== * all: Make sure to forward all link properties (time base, frame rate, w, h) where appropriate * overlaytextsubs: request frames on the subtitle input * overlaytextsubs: disable read-order checking * overlaytextsubs: improve implementation of render_latest_only * overlaytextsubs: ensure equal in/out video formats * splitcc: derive framerate from realtime_latency * graphicsub2video: implement caching of converted frames * graphicsub2video: use 1x1 output frame size as long as subtitle size is unknown (0x0) Plus a dozen of things I forgot.. softworkz (25): avcodec,avutil: Move enum AVSubtitleType to avutil, add new and deprecate old values avutil/frame: Prepare AVFrame for subtitle handling avcodec/subtitles: Introduce new frame-based subtitle decoding API avcodec/libzvbi: set subtitle type avfilter/subtitles: Update vf_subtitles to use new decoding api avcodec,avutil: Move ass helper functions to avutil as avpriv_ and extend ass dialog parsing avcodec/subtitles: Replace deprecated enum values fftools/play,probe: Adjust for subtitle changes avfilter/subtitles: Add subtitles.c for subtitle frame allocation avfilter/avfilter: Handle subtitle frames avfilter/avfilter: Fix hardcoded input index avfilter/sbuffer: Add sbuffersrc and sbuffersink filters avfilter/overlaygraphicsubs: Add overlaygraphicsubs and graphicsub2video filters avfilter/overlaytextsubs: Add overlaytextsubs and textsubs2video filters avfilter/textmod: Add textmod, censor and show_speaker filters avfilter/stripstyles: Add stripstyles filter avfilter/splitcc: Add splitcc filter for closed caption handling avfilter/graphicsub2text: Add new graphicsub2text filter (OCR) avfilter/subscale: Add filter for scaling and/or re-arranging graphical subtitles avfilter/subfeed: add subtitle feed filter avfilter/text2graphicsub: Added text2graphicsub subtitle filter avfilter/snull,strim: Add snull and strim filters avcodec/subtitles: Migrate subtitle encoders to frame-based API fftools/ffmpeg: Introduce subtitle filtering and new frame-based subtitle encoding avcodec/dvbsubdec: Fix conditions for fallback to default resolution configure | 10 +- doc/filters.texi | 807 ++++++++++++++ fftools/ffmpeg.c | 604 +++++----- fftools/ffmpeg.h | 17 +- fftools/ffmpeg_filter.c | 268 ++++- fftools/ffmpeg_hw.c | 2 +- fftools/ffmpeg_mux_init.c | 28 +- fftools/ffmpeg_opt.c | 1 + fftools/ffplay.c | 102 +- fftools/ffprobe.c | 47 +- libavcodec/Makefile | 56 +- libavcodec/ass.h | 151 +-- libavcodec/ass_split.h | 191 ---- libavcodec/assdec.c | 4 +- libavcodec/assenc.c | 191 +++- libavcodec/avcodec.c | 8 + libavcodec/avcodec.h | 34 +- libavcodec/ccaption_dec.c | 20 +- libavcodec/codec_internal.h | 12 - libavcodec/decode.c | 60 +- libavcodec/dvbsubdec.c | 53 +- libavcodec/dvbsubenc.c | 96 +- libavcodec/dvdsubdec.c | 2 +- libavcodec/dvdsubenc.c | 103 +- libavcodec/encode.c | 61 +- libavcodec/internal.h | 18 + libavcodec/jacosubdec.c | 2 +- libavcodec/libaribb24.c | 2 +- libavcodec/libzvbi-teletextdec.c | 17 +- libavcodec/microdvddec.c | 7 +- libavcodec/movtextdec.c | 3 +- libavcodec/movtextenc.c | 126 ++- libavcodec/mpl2dec.c | 2 +- libavcodec/pgssubdec.c | 2 +- libavcodec/realtextdec.c | 2 +- libavcodec/samidec.c | 2 +- libavcodec/srtdec.c | 2 +- libavcodec/srtenc.c | 116 +- libavcodec/subviewerdec.c | 2 +- libavcodec/tests/avcodec.c | 5 +- libavcodec/textdec.c | 4 +- libavcodec/ttmlenc.c | 114 +- libavcodec/utils.c | 185 ++- libavcodec/webvttdec.c | 2 +- libavcodec/webvttenc.c | 94 +- libavcodec/xsubdec.c | 2 +- libavcodec/xsubenc.c | 88 +- libavfilter/Makefile | 18 + libavfilter/allfilters.c | 19 + libavfilter/avfilter.c | 42 +- libavfilter/avfilter.h | 11 + libavfilter/avfiltergraph.c | 5 + libavfilter/buffersink.c | 54 + libavfilter/buffersink.h | 7 + libavfilter/buffersrc.c | 72 ++ libavfilter/buffersrc.h | 1 + libavfilter/formats.c | 16 + libavfilter/formats.h | 3 + libavfilter/internal.h | 19 +- libavfilter/sf_graphicsub2text.c | 1137 +++++++++++++++++++ libavfilter/sf_snull.c | 61 + libavfilter/sf_splitcc.c | 395 +++++++ libavfilter/sf_stripstyles.c | 237 ++++ libavfilter/sf_subfeed.c | 412 +++++++ libavfilter/sf_subscale.c | 884 +++++++++++++++ libavfilter/sf_text2graphicsub.c | 634 +++++++++++ libavfilter/sf_textmod.c | 710 ++++++++++++ libavfilter/subtitles.c | 63 ++ libavfilter/subtitles.h | 44 + libavfilter/trim.c | 60 +- libavfilter/vf_overlaygraphicsubs.c | 765 +++++++++++++ libavfilter/vf_overlaytextsubs.c | 680 +++++++++++ libavfilter/vf_subtitles.c | 67 +- libavutil/Makefile | 4 + {libavcodec => libavutil}/ass.c | 115 +- libavutil/ass_internal.h | 135 +++ {libavcodec => libavutil}/ass_split.c | 179 ++- libavutil/ass_split_internal.h | 254 +++++ libavutil/frame.c | 206 +++- libavutil/frame.h | 85 +- libavutil/subfmt.c | 45 + libavutil/subfmt.h | 115 ++ libavutil/version.h | 5 +- tests/ref/fate/filter-overlay-dvdsub-2397 | 181 ++- tests/ref/fate/sub-dvb | 162 +-- tests/ref/fate/sub-scc | 1 - tests/ref/fate/sub2video | 1092 +++++++++++++++++- tests/ref/fate/sub2video_basic | 1238 +++++++++++++++++++-- tests/ref/fate/sub2video_time_limited | 78 +- 89 files changed, 12454 insertions(+), 1582 deletions(-) delete mode 100644 libavcodec/ass_split.h create mode 100644 libavfilter/sf_graphicsub2text.c create mode 100644 libavfilter/sf_snull.c create mode 100644 libavfilter/sf_splitcc.c create mode 100644 libavfilter/sf_stripstyles.c create mode 100644 libavfilter/sf_subfeed.c create mode 100644 libavfilter/sf_subscale.c create mode 100644 libavfilter/sf_text2graphicsub.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_overlaygraphicsubs.c create mode 100644 libavfilter/vf_overlaytextsubs.c rename {libavcodec => libavutil}/ass.c (59%) create mode 100644 libavutil/ass_internal.h rename {libavcodec => libavutil}/ass_split.c (71%) create mode 100644 libavutil/ass_split_internal.h create mode 100644 libavutil/subfmt.c create mode 100644 libavutil/subfmt.h base-commit: 882a17068fd8e62c7d38c14e6fb160d7c9fc446a Published-As: https://github.com/ffstaging/FFmpeg/releases/tag/pr-ffstaging-18%2Fsoftworkz%2Fsubmit_subfiltering-v9 Fetch-It-Via: git fetch https://github.com/ffstaging/FFmpeg pr-ffstaging-18/softworkz/submit_subfiltering-v9 Pull-Request: https://github.com/ffstaging/FFmpeg/pull/18 Range-diff vs v8: 1: bc849a23dd = 1: bc849a23dd avcodec,avutil: Move enum AVSubtitleType to avutil, add new and deprecate old values 2: 95e9b5f39f = 2: 95e9b5f39f avutil/frame: Prepare AVFrame for subtitle handling 3: 3598ec3b9a = 3: 3598ec3b9a avcodec/subtitles: Introduce new frame-based subtitle decoding API 4: 76ed737a8e = 4: 76ed737a8e avcodec/libzvbi: set subtitle type 5: 20430719d3 = 5: 20430719d3 avfilter/subtitles: Update vf_subtitles to use new decoding api 6: abfe4c9562 = 6: abfe4c9562 avcodec,avutil: Move ass helper functions to avutil as avpriv_ and extend ass dialog parsing 7: 4acdb3ace6 = 7: 4acdb3ace6 avcodec/subtitles: Replace deprecated enum values 8: e03ce50b84 = 8: e03ce50b84 fftools/play,probe: Adjust for subtitle changes 9: 2ea0e71303 = 9: 2ea0e71303 avfilter/subtitles: Add subtitles.c for subtitle frame allocation 10: e7055c7520 = 10: e7055c7520 avfilter/avfilter: Handle subtitle frames 11: 0b31d69884 = 11: 0b31d69884 avfilter/avfilter: Fix hardcoded input index 12: 066b754236 = 12: 066b754236 avfilter/sbuffer: Add sbuffersrc and sbuffersink filters 13: 2dce3f8101 = 13: 2dce3f8101 avfilter/overlaygraphicsubs: Add overlaygraphicsubs and graphicsub2video filters 14: 14d291dbae = 14: 14d291dbae avfilter/overlaytextsubs: Add overlaytextsubs and textsubs2video filters 15: 15a8984fb7 = 15: 15a8984fb7 avfilter/textmod: Add textmod, censor and show_speaker filters 16: 5433d2751a = 16: 5433d2751a avfilter/stripstyles: Add stripstyles filter 17: 39bb78e449 = 17: 39bb78e449 avfilter/splitcc: Add splitcc filter for closed caption handling 18: 80f4c93633 = 18: 80f4c93633 avfilter/graphicsub2text: Add new graphicsub2text filter (OCR) 19: 4e6888ca87 = 19: 4e6888ca87 avfilter/subscale: Add filter for scaling and/or re-arranging graphical subtitles 20: 5874f5c452 = 20: 5874f5c452 avfilter/subfeed: add subtitle feed filter 21: 938d0ef0cc = 21: 938d0ef0cc avfilter/text2graphicsub: Added text2graphicsub subtitle filter 22: 99e5c11952 = 22: 99e5c11952 avfilter/snull,strim: Add snull and strim filters 23: 300c14faaa = 23: 300c14faaa avcodec/subtitles: Migrate subtitle encoders to frame-based API 24: 6046dde125 = 24: 6046dde125 fftools/ffmpeg: Introduce subtitle filtering and new frame-based subtitle encoding 25: c5487d7ef2 = 25: bb11798974 avcodec/dvbsubdec: Fix conditions for fallback to default resolution