mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-11-23 19:30:05 +00:00
lavfi/subtitles: introduce stream_index
Signed-off-by: ValdikSS <iam@valdikss.org.ru>
This commit is contained in:
parent
91736025b2
commit
7a0e689c45
@ -7725,6 +7725,9 @@ changed.
|
|||||||
@item charenc
|
@item charenc
|
||||||
Set subtitles input character encoding. @code{subtitles} filter only. Only
|
Set subtitles input character encoding. @code{subtitles} filter only. Only
|
||||||
useful if not UTF-8.
|
useful if not UTF-8.
|
||||||
|
|
||||||
|
@item stream_index, si
|
||||||
|
Set subtitles stream index. @code{subtitles} filter only.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
If the first key is not specified, it is assumed that the first value
|
If the first key is not specified, it is assumed that the first value
|
||||||
@ -7741,6 +7744,16 @@ which is equivalent to:
|
|||||||
subtitles=filename=sub.srt
|
subtitles=filename=sub.srt
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
To render the default subtitles stream from file @file{video.mkv}, use:
|
||||||
|
@example
|
||||||
|
subtitles=video.mkv
|
||||||
|
@end example
|
||||||
|
|
||||||
|
To render the second subtitles stream from that file, use:
|
||||||
|
@example
|
||||||
|
subtitles=video.mkv:si=1
|
||||||
|
@end example
|
||||||
|
|
||||||
@section super2xsai
|
@section super2xsai
|
||||||
|
|
||||||
Scale the input by 2x and smooth using the Super2xSaI (Scale and
|
Scale the input by 2x and smooth using the Super2xSaI (Scale and
|
||||||
|
@ -51,6 +51,7 @@ typedef struct {
|
|||||||
ASS_Track *track;
|
ASS_Track *track;
|
||||||
char *filename;
|
char *filename;
|
||||||
char *charenc;
|
char *charenc;
|
||||||
|
int stream_index;
|
||||||
uint8_t rgba_map[4];
|
uint8_t rgba_map[4];
|
||||||
int pix_step[4]; ///< steps per pixel for each plane of the main output
|
int pix_step[4]; ///< steps per pixel for each plane of the main output
|
||||||
int original_w, original_h;
|
int original_w, original_h;
|
||||||
@ -247,7 +248,9 @@ AVFilter ff_vf_ass = {
|
|||||||
|
|
||||||
static const AVOption subtitles_options[] = {
|
static const AVOption subtitles_options[] = {
|
||||||
COMMON_OPTIONS
|
COMMON_OPTIONS
|
||||||
{"charenc", "set input character encoding", OFFSET(charenc), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, FLAGS},
|
{"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},
|
||||||
{NULL},
|
{NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -279,6 +282,7 @@ AVFILTER_DEFINE_CLASS(subtitles);
|
|||||||
static av_cold int init_subtitles(AVFilterContext *ctx)
|
static av_cold int init_subtitles(AVFilterContext *ctx)
|
||||||
{
|
{
|
||||||
int j, ret, sid;
|
int j, ret, sid;
|
||||||
|
int k = 0;
|
||||||
AVDictionary *codec_opts = NULL;
|
AVDictionary *codec_opts = NULL;
|
||||||
AVFormatContext *fmt = NULL;
|
AVFormatContext *fmt = NULL;
|
||||||
AVCodecContext *dec_ctx = NULL;
|
AVCodecContext *dec_ctx = NULL;
|
||||||
@ -309,7 +313,23 @@ static av_cold int init_subtitles(AVFilterContext *ctx)
|
|||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
/* Locate subtitles stream */
|
/* Locate subtitles stream */
|
||||||
ret = av_find_best_stream(fmt, AVMEDIA_TYPE_SUBTITLE, -1, -1, NULL, 0);
|
if (ass->stream_index < 0)
|
||||||
|
ret = av_find_best_stream(fmt, AVMEDIA_TYPE_SUBTITLE, -1, -1, NULL, 0);
|
||||||
|
else {
|
||||||
|
ret = -1;
|
||||||
|
if (ass->stream_index < fmt->nb_streams) {
|
||||||
|
for (j = 0; j < fmt->nb_streams; j++) {
|
||||||
|
if (fmt->streams[j]->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) {
|
||||||
|
if (ass->stream_index == k) {
|
||||||
|
ret = j;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
av_log(ctx, AV_LOG_ERROR, "Unable to locate subtitle stream in %s\n",
|
av_log(ctx, AV_LOG_ERROR, "Unable to locate subtitle stream in %s\n",
|
||||||
ass->filename);
|
ass->filename);
|
||||||
|
Loading…
Reference in New Issue
Block a user