[FFmpeg-devel] [PATCH v1 2/2] avfilter/vf_subtitles: add force_style option for ass subtitle filter
lance.lmwang at gmail.com
lance.lmwang at gmail.com
Mon Mar 30 13:52:33 EEST 2020
From: Limin Wang <lance.lmwang at gmail.com>
Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
---
doc/filters.texi | 4 ++++
libavfilter/vf_subtitles.c | 23 +++++++++++++++++++++++
2 files changed, 27 insertions(+)
diff --git a/doc/filters.texi b/doc/filters.texi
index 328e984e92..d26d90d1bb 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -6399,6 +6399,10 @@ Slower shaper using OpenType for substitutions and positioning
@end table
The default is @code{auto}.
+
+ at item force_style
+Override default style or script info parameters of the subtitles. It accepts a
+string containing ASS style format @code{KEY=VALUE} couples separated by ",".
@end table
@section atadenoise
diff --git a/libavfilter/vf_subtitles.c b/libavfilter/vf_subtitles.c
index 2f312b0ba8..e3ad8b8d94 100644
--- a/libavfilter/vf_subtitles.c
+++ b/libavfilter/vf_subtitles.c
@@ -218,6 +218,7 @@ static const AVOption ass_options[] = {
{"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = -1}, INT_MIN, INT_MAX, FLAGS, "shaping_mode"},
{"simple", "simple shaping", 0, AV_OPT_TYPE_CONST, {.i64 = ASS_SHAPING_SIMPLE}, INT_MIN, INT_MAX, FLAGS, "shaping_mode"},
{"complex", "complex shaping", 0, AV_OPT_TYPE_CONST, {.i64 = ASS_SHAPING_COMPLEX}, INT_MIN, INT_MAX, FLAGS, "shaping_mode"},
+ {"force_style", "force subtitle style", OFFSET(force_style), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS},
{NULL},
};
@@ -234,6 +235,28 @@ static av_cold int init_ass(AVFilterContext *ctx)
/* Initialize fonts */
ass_set_fonts(ass->renderer, NULL, NULL, 1, NULL, 1);
+ if (ass->force_style) {
+ char **list = NULL;
+ char *temp = NULL;
+ char *ptr = av_strtok(ass->force_style, ",", &temp);
+ int i = 0;
+ while (ptr) {
+ av_dynarray_add(&list, &i, ptr);
+ if (!list) {
+ ret = AVERROR(ENOMEM);
+ return ret;
+ }
+ ptr = av_strtok(NULL, ",", &temp);
+ }
+ av_dynarray_add(&list, &i, NULL);
+ if (!list) {
+ ret = AVERROR(ENOMEM);
+ return ret;
+ }
+ ass_set_style_overrides(ass->library, list);
+ av_free(list);
+ }
+
ass->track = ass_read_file(ass->library, ass->filename, NULL);
if (!ass->track) {
av_log(ctx, AV_LOG_ERROR,
--
2.21.0
More information about the ffmpeg-devel
mailing list