@@ -16307,6 +16307,9 @@ useful if not UTF-8.
@item stream_index, si
Set subtitles stream index. @code{subtitles} filter only.
+@item offset
+Set subtitles time offset. @code{subtitles} filter only.
+
@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 ",".
@@ -27,6 +27,7 @@
* @see{http://www.matroska.org/technical/specs/subtitles/ssa.html}
*/
+#include <float.h>
#include <ass/ass.h>
#include "config.h"
@@ -52,6 +53,7 @@ typedef struct AssContext {
char *filename;
char *fontsdir;
char *charenc;
+ float offset;
char *force_style;
int stream_index;
int alpha;
@@ -266,6 +268,7 @@ static const AVOption subtitles_options[] = {
{"charenc", "set input character encoding", OFFSET(charenc), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, FLAGS},
{"stream_index", "set stream index", OFFSET(stream_index), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, FLAGS},
{"si", "set stream index", OFFSET(stream_index), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, FLAGS},
+ {"offset", "set subtitles time offset", OFFSET(offset), AV_OPT_TYPE_FLOAT, { .dbl = 0.0}, -600.0, 600.0, FLAGS},
{"force_style", "force subtitle style", OFFSET(force_style), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, FLAGS},
{NULL},
};
@@ -458,7 +461,7 @@ static av_cold int init_subtitles(AVFilterContext *ctx)
av_log(ctx, AV_LOG_WARNING, "Error decoding: %s (ignored)\n",
av_err2str(ret));
} else if (got_subtitle) {
- const int64_t start_time = av_rescale_q(sub.pts, AV_TIME_BASE_Q, av_make_q(1, 1000));
+ const int64_t start_time = av_rescale_q(sub.pts, AV_TIME_BASE_Q, av_make_q(1, 1000)) + ass->offset*1000;
const int64_t duration = sub.end_display_time;
for (i = 0; i < sub.num_rects; i++) {
char *ass_line = sub.rects[i]->ass;
From: qq2225936589 <qq2225936589@gmail.com> --- doc/filters.texi | 3 +++ libavfilter/vf_subtitles.c | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-)