diff --git a/doc/filters.texi b/doc/filters.texi index 1e5b52876e..916655ab1a 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -1230,26 +1230,33 @@ using the libass library. To enable compilation of this filter you need to configure FFmpeg with @code{--enable-libass}. -This filter accepts the syntax: @var{ass_filename}[:@var{options}], -where @var{ass_filename} is the filename of the ASS file to read, and -@var{options} is an optional sequence of @var{key}=@var{value} pairs, -separated by ":". - -A description of the accepted options follows. +This filter accepts the following named options, expressed as a +sequence of @var{key}=@var{value} pairs, separated by ":". @table @option +@item filename, f +Set the filename of the ASS file to read. It must be specified. + @item original_size -Specifies the size of the original video, the video for which the ASS file +Specify the size of the original video, the video for which the ASS file was composed. Due to a misdesign in ASS aspect ratio arithmetic, this is necessary to correctly scale the fonts if the aspect ratio has been changed. @end table +If the first key is not specified, it is assumed that the first value +specifies the @option{filename}. + For example, to render the file @file{sub.ass} on top of the input video, use the command: @example ass=sub.ass @end example +which is equivalent to: +@example +ass=filename=sub.ass +@end example + @section bbox Compute the bounding box for the non-black pixels in the input frame diff --git a/libavfilter/version.h b/libavfilter/version.h index 212010beff..1f9320c5e5 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -30,7 +30,7 @@ #define LIBAVFILTER_VERSION_MAJOR 3 #define LIBAVFILTER_VERSION_MINOR 19 -#define LIBAVFILTER_VERSION_MICRO 102 +#define LIBAVFILTER_VERSION_MICRO 103 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ diff --git a/libavfilter/vf_ass.c b/libavfilter/vf_ass.c index 6b206317e6..dab4f68868 100644 --- a/libavfilter/vf_ass.c +++ b/libavfilter/vf_ass.c @@ -54,6 +54,8 @@ typedef struct { #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM static const AVOption ass_options[] = { + {"filename", "set the filename of the ASS file to read", OFFSET(filename), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, FLAGS }, + {"f", "set the filename of the ASS file to read", OFFSET(filename), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, FLAGS }, {"original_size", "set the size of the original video (used to scale fonts)", OFFSET(original_w), AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL}, CHAR_MIN, CHAR_MAX, FLAGS }, {NULL}, }; @@ -83,21 +85,20 @@ static void ass_log(int ass_level, const char *fmt, va_list args, void *ctx) static av_cold int init(AVFilterContext *ctx, const char *args) { AssContext *ass = ctx->priv; + static const char *shorthand[] = { "filename", NULL }; int ret; ass->class = &ass_class; av_opt_set_defaults(ass); - if (args) - ass->filename = av_get_token(&args, ":"); - if (!ass->filename || !*ass->filename) { + if ((ret = av_opt_set_from_string(ass, args, shorthand, "=", ":")) < 0) + return ret; + + if (!ass->filename) { av_log(ctx, AV_LOG_ERROR, "No filename provided!\n"); return AVERROR(EINVAL); } - if (*args++ == ':' && (ret = av_set_options_string(ass, args, "=", ":")) < 0) - return ret; - ass->library = ass_library_init(); if (!ass->library) { av_log(ctx, AV_LOG_ERROR, "Could not initialize libass.\n"); @@ -127,7 +128,7 @@ static av_cold void uninit(AVFilterContext *ctx) { AssContext *ass = ctx->priv; - av_freep(&ass->filename); + av_opt_free(ass); if (ass->track) ass_free_track(ass->track); if (ass->renderer)