mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
lavc/libaribcaption.c: add ARIB caption decoder using libaribcaption
This patch add another ARIB caption decoder using libaribcaption external library. Unlike libaribb24, it supports 3 types of subtitle outputs: * text: plain text * ass: ASS formatted text * bitmap: bitmap image Default subtitle type is ass as same as libaribb24. Advantages compared with libaribb24 on ASS subtitle are: * Subtitle positioning. * Multi-rect subtitle: some captions are displayed at different position at a time. * More stability and reproducibility. To compile with this feature: * libaribcaption external library has to be pre-installed. https://github.com/xqq/libaribcaption * configure with `--enable-libaribcaption` option. `--enable-libaribb24` and `--enable-libaribcaption` options are not exclusive. If both enabled, libaribcaption precedes as order listed in `libavcodec/allcodecs.c`. Signed-off-by: rcombs <rcombs@rcombs.me>
This commit is contained in:
parent
38bb137e99
commit
b6138633cd
@ -2,6 +2,7 @@ Entries are sorted chronologically from oldest to youngest within each release,
|
|||||||
releases are sorted from youngest to oldest.
|
releases are sorted from youngest to oldest.
|
||||||
|
|
||||||
version <next>:
|
version <next>:
|
||||||
|
- libaribcaption decoder
|
||||||
|
|
||||||
version 6.0:
|
version 6.0:
|
||||||
- Radiance HDR image support
|
- Radiance HDR image support
|
||||||
|
4
configure
vendored
4
configure
vendored
@ -218,6 +218,7 @@ External library support:
|
|||||||
--enable-lcms2 enable ICC profile support via LittleCMS 2 [no]
|
--enable-lcms2 enable ICC profile support via LittleCMS 2 [no]
|
||||||
--enable-libaom enable AV1 video encoding/decoding via libaom [no]
|
--enable-libaom enable AV1 video encoding/decoding via libaom [no]
|
||||||
--enable-libaribb24 enable ARIB text and caption decoding via libaribb24 [no]
|
--enable-libaribb24 enable ARIB text and caption decoding via libaribb24 [no]
|
||||||
|
--enable-libaribcaption enable ARIB text and caption decoding via libaribcaption [no]
|
||||||
--enable-libass enable libass subtitles rendering,
|
--enable-libass enable libass subtitles rendering,
|
||||||
needed for subtitles and ass filter [no]
|
needed for subtitles and ass filter [no]
|
||||||
--enable-libbluray enable BluRay reading using libbluray [no]
|
--enable-libbluray enable BluRay reading using libbluray [no]
|
||||||
@ -1805,6 +1806,7 @@ EXTERNAL_LIBRARY_LIST="
|
|||||||
ladspa
|
ladspa
|
||||||
lcms2
|
lcms2
|
||||||
libaom
|
libaom
|
||||||
|
libaribcaption
|
||||||
libass
|
libass
|
||||||
libbluray
|
libbluray
|
||||||
libbs2b
|
libbs2b
|
||||||
@ -3331,6 +3333,7 @@ libaom_av1_decoder_deps="libaom"
|
|||||||
libaom_av1_encoder_deps="libaom"
|
libaom_av1_encoder_deps="libaom"
|
||||||
libaom_av1_encoder_select="extract_extradata_bsf"
|
libaom_av1_encoder_select="extract_extradata_bsf"
|
||||||
libaribb24_decoder_deps="libaribb24"
|
libaribb24_decoder_deps="libaribb24"
|
||||||
|
libaribcaption_decoder_deps="libaribcaption"
|
||||||
libcelt_decoder_deps="libcelt"
|
libcelt_decoder_deps="libcelt"
|
||||||
libcodec2_decoder_deps="libcodec2"
|
libcodec2_decoder_deps="libcodec2"
|
||||||
libcodec2_encoder_deps="libcodec2"
|
libcodec2_encoder_deps="libcodec2"
|
||||||
@ -6569,6 +6572,7 @@ enabled libaom && require_pkg_config libaom "aom >= 1.0.0" aom/aom_co
|
|||||||
enabled libaribb24 && { check_pkg_config libaribb24 "aribb24 > 1.0.3" "aribb24/aribb24.h" arib_instance_new ||
|
enabled libaribb24 && { check_pkg_config libaribb24 "aribb24 > 1.0.3" "aribb24/aribb24.h" arib_instance_new ||
|
||||||
{ enabled gpl && require_pkg_config libaribb24 aribb24 "aribb24/aribb24.h" arib_instance_new; } ||
|
{ enabled gpl && require_pkg_config libaribb24 aribb24 "aribb24/aribb24.h" arib_instance_new; } ||
|
||||||
die "ERROR: libaribb24 requires version higher than 1.0.3 or --enable-gpl."; }
|
die "ERROR: libaribb24 requires version higher than 1.0.3 or --enable-gpl."; }
|
||||||
|
enabled libaribcaption && require_pkg_config libaribcaption "libaribcaption >= 0.1.0" "aribcaption/aribcaption.h" aribcc_context_alloc
|
||||||
enabled lv2 && require_pkg_config lv2 lilv-0 "lilv/lilv.h" lilv_world_new
|
enabled lv2 && require_pkg_config lv2 lilv-0 "lilv/lilv.h" lilv_world_new
|
||||||
enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
|
enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
|
||||||
enabled libass && require_pkg_config libass "libass >= 0.11.0" ass/ass.h ass_library_init
|
enabled libass && require_pkg_config libass "libass >= 0.11.0" ass/ass.h ass_library_init
|
||||||
|
@ -353,6 +353,156 @@ Enabled by default.
|
|||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
@section libaribcaption
|
||||||
|
|
||||||
|
Yet another ARIB STD-B24 caption decoder using external @dfn{libaribcaption}
|
||||||
|
library.
|
||||||
|
|
||||||
|
Implements profiles A and C of the Japanse ARIB STD-B24 standard,
|
||||||
|
Brazilian ABNT NBR 15606-1, and Philippines version of ISDB-T.
|
||||||
|
|
||||||
|
Requires the presence of the libaribcaption headers and library
|
||||||
|
(@url{https://github.com/xqq/libaribcaption}) during configuration.
|
||||||
|
You need to explicitly configure the build with @code{--enable-libaribcaption}.
|
||||||
|
If both @dfn{libaribb24} and @dfn{libaribcaption} are enabled, @dfn{libaribcaption}
|
||||||
|
decoder precedes.
|
||||||
|
|
||||||
|
@subsection libaribcaption Decoder Options
|
||||||
|
|
||||||
|
@table @option
|
||||||
|
|
||||||
|
@item -sub_type @var{subtitle_type}
|
||||||
|
Specifies the format of the decoded subtitles.
|
||||||
|
|
||||||
|
@table @samp
|
||||||
|
@item bitmap
|
||||||
|
Graphical image.
|
||||||
|
@item ass
|
||||||
|
ASS formatted text.
|
||||||
|
@item text
|
||||||
|
Simple text based output without formatting.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
The default is @dfn{ass} as same as @dfn{libaribb24} decoder.
|
||||||
|
Some present players (e.g., @dfn{mpv}) expect ASS format for ARIB caption.
|
||||||
|
|
||||||
|
@item -caption_encoding @var{encoding_scheme}
|
||||||
|
Specifies the encoding scheme of input subtitle text.
|
||||||
|
|
||||||
|
@table @samp
|
||||||
|
@item auto
|
||||||
|
Automatically detect text encoding.
|
||||||
|
@item jis
|
||||||
|
8bit-char JIS encoding defined in ARIB STD B24.
|
||||||
|
This encoding used in Japan for ISDB captions.
|
||||||
|
@item utf8
|
||||||
|
UTF-8 encoding defined in ARIB STD B24.
|
||||||
|
This encoding is used in Philippines for ISDB-T captions.
|
||||||
|
@item latin
|
||||||
|
Latin character encoding defined in ABNT NBR 15606-1.
|
||||||
|
This encoding is used in South America for SBTVD / ISDB-Tb captions.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
The default is @dfn{ass} as same as @dfn{libaribb24} decoder.
|
||||||
|
Some present players (e.g., @dfn{mpv}) expect ASS format for ARIB caption.
|
||||||
|
|
||||||
|
@item -font @var{font_name[,font_name2,...]}
|
||||||
|
Specify comma-separated list of font family names to be used for @dfn{bitmap}
|
||||||
|
or @dfn{ass} type subtitle rendering.
|
||||||
|
Only first font name is used for @dfn{ass} type subtitle.
|
||||||
|
|
||||||
|
If not specified, use internaly defined default font family.
|
||||||
|
|
||||||
|
@item -ass_single_rect @var{boolean}
|
||||||
|
ARIB STD-B24 specifies that some captions may be displayed at different
|
||||||
|
positions at a time (multi-rectangle subtitle).
|
||||||
|
Since some players (e.g., old @dfn{mpv}) can't handle multiple ASS rectangles
|
||||||
|
in a single AVSubtitle, or multiple ASS rectangles of indeterminate duration
|
||||||
|
with the same start timestamp, this option can change the behavior so that
|
||||||
|
all the texts are displayed in a single ASS rectangle.
|
||||||
|
|
||||||
|
The default is @var{false}.
|
||||||
|
|
||||||
|
If your player cannot handle AVSubtitles with multiple ASS rectangles properly,
|
||||||
|
set this option to @var{true} or define @env{ASS_SINGLE_RECT=1} to change
|
||||||
|
default behavior at compilation.
|
||||||
|
|
||||||
|
@item -replace_fullwidth_ascii @var{boolean}
|
||||||
|
Specify whether to replace MSZ (Middle Size, half width) fullwidth
|
||||||
|
alphanumerics with halfwidth alphanumerics.
|
||||||
|
|
||||||
|
The default is @var{true}.
|
||||||
|
|
||||||
|
@item -force_outline_text @var{boolean}
|
||||||
|
Specify whether always render outline text for all characters regardless of
|
||||||
|
the indication by charactor style.
|
||||||
|
|
||||||
|
The default is @var{false}.
|
||||||
|
|
||||||
|
@item -outline_width @var{number} (0.0 - 3.0)
|
||||||
|
Specify width for outline text, in dots (relative).
|
||||||
|
|
||||||
|
The default is @var{1.5}.
|
||||||
|
|
||||||
|
@item -ignore_background @var{boolean}
|
||||||
|
Specify whether to ignore background color rendering.
|
||||||
|
|
||||||
|
The default is @var{false}.
|
||||||
|
|
||||||
|
@item -ignore_ruby @var{boolean}
|
||||||
|
Specify whether to ignore rendering for ruby-like (furigana) characters.
|
||||||
|
|
||||||
|
The default is @var{false}.
|
||||||
|
|
||||||
|
@item -replace_drcs @var{boolean}
|
||||||
|
Specify whether to render replaced DRCS characters as Unicode characters.
|
||||||
|
|
||||||
|
The default is @var{true}.
|
||||||
|
|
||||||
|
@item -canvas_size @var{image_size}
|
||||||
|
Specify the resolution of the canvas to render subtitles to; usually, this
|
||||||
|
should be frame size of input video.
|
||||||
|
This only applies when @code{-subtitle_type} is set to @var{bitmap}.
|
||||||
|
|
||||||
|
The libaribcaption decoder assumes input frame size for bitmap rendering as below:
|
||||||
|
@enumerate
|
||||||
|
@item
|
||||||
|
PROFILE_A : 1440 x 1080 with SAR (PAR) 4:3
|
||||||
|
@item
|
||||||
|
PROFILE_C : 320 x 180 with SAR (PAR) 1:1
|
||||||
|
@end enumerate
|
||||||
|
|
||||||
|
If actual frame size of input video does not match above assumption,
|
||||||
|
the rendered captions may be distorted.
|
||||||
|
To make the captions undistorted, add @code{-canvas_size} option to specify
|
||||||
|
actual input video size.
|
||||||
|
|
||||||
|
Note that the @code{-canvas_size} option is not required for video with
|
||||||
|
different size but same aspect ratio.
|
||||||
|
In such cases, the caption will be stretched or shrunk to actual video size
|
||||||
|
if @code{-canvas_size} option is not specified.
|
||||||
|
If @code{-canvas_size} option is specified with different size,
|
||||||
|
the caption will be stretched or shrunk as specified size with calculated SAR.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@subsection libaribcaption decoder usage examples
|
||||||
|
|
||||||
|
Display MPEG-TS file with ARIB subtitle by @code{ffplay} tool:
|
||||||
|
@example
|
||||||
|
ffplay -sub_type bitmap MPEG.TS
|
||||||
|
@end example
|
||||||
|
|
||||||
|
Display MPEG-TS file with input frame size 1920x1080 by @code{ffplay} tool:
|
||||||
|
@example
|
||||||
|
ffplay -sub_type bitmap -canvas_size 1920x1080 MPEG.TS
|
||||||
|
@end example
|
||||||
|
|
||||||
|
Embed ARIB subtitle in transcoded video:
|
||||||
|
@example
|
||||||
|
ffmpeg -sub_type bitmap -i src.m2t -filter_complex "[0:v][0:s]overlay" -vcodec h264 dest.mp4
|
||||||
|
@end example
|
||||||
|
|
||||||
@section dvbsub
|
@section dvbsub
|
||||||
|
|
||||||
@subsection Options
|
@subsection Options
|
||||||
|
@ -1079,6 +1079,7 @@ OBJS-$(CONFIG_PCM_MULAW_AT_ENCODER) += audiotoolboxenc.o
|
|||||||
OBJS-$(CONFIG_LIBAOM_AV1_DECODER) += libaomdec.o libaom.o
|
OBJS-$(CONFIG_LIBAOM_AV1_DECODER) += libaomdec.o libaom.o
|
||||||
OBJS-$(CONFIG_LIBAOM_AV1_ENCODER) += libaomenc.o libaom.o
|
OBJS-$(CONFIG_LIBAOM_AV1_ENCODER) += libaomenc.o libaom.o
|
||||||
OBJS-$(CONFIG_LIBARIBB24_DECODER) += libaribb24.o ass.o
|
OBJS-$(CONFIG_LIBARIBB24_DECODER) += libaribb24.o ass.o
|
||||||
|
OBJS-$(CONFIG_LIBARIBCAPTION_DECODER) += libaribcaption.o ass.o
|
||||||
OBJS-$(CONFIG_LIBCELT_DECODER) += libcelt_dec.o
|
OBJS-$(CONFIG_LIBCELT_DECODER) += libcelt_dec.o
|
||||||
OBJS-$(CONFIG_LIBCODEC2_DECODER) += libcodec2.o
|
OBJS-$(CONFIG_LIBCODEC2_DECODER) += libcodec2.o
|
||||||
OBJS-$(CONFIG_LIBCODEC2_ENCODER) += libcodec2.o
|
OBJS-$(CONFIG_LIBCODEC2_ENCODER) += libcodec2.o
|
||||||
|
@ -759,6 +759,8 @@ extern const FFCodec ff_pcm_mulaw_at_decoder;
|
|||||||
extern const FFCodec ff_qdmc_at_decoder;
|
extern const FFCodec ff_qdmc_at_decoder;
|
||||||
extern const FFCodec ff_qdm2_at_decoder;
|
extern const FFCodec ff_qdm2_at_decoder;
|
||||||
extern FFCodec ff_libaom_av1_encoder;
|
extern FFCodec ff_libaom_av1_encoder;
|
||||||
|
/* preferred over libaribb24 */
|
||||||
|
extern const FFCodec ff_libaribcaption_decoder;
|
||||||
extern const FFCodec ff_libaribb24_decoder;
|
extern const FFCodec ff_libaribb24_decoder;
|
||||||
extern const FFCodec ff_libcelt_decoder;
|
extern const FFCodec ff_libcelt_decoder;
|
||||||
extern const FFCodec ff_libcodec2_encoder;
|
extern const FFCodec ff_libcodec2_encoder;
|
||||||
|
1171
libavcodec/libaribcaption.c
Normal file
1171
libavcodec/libaribcaption.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user