Jonathan Baecker <jonba...@gmail.com> 于2024年10月13日周日 19:54写道: > > Am 04.10.24 um 12:09 schrieb Steven Liu: > > Jonathan Baecker <jonba...@gmail.com> 于2024年9月29日周日 05:56写道: > >> If 'sname:*' is set in the var_stream_map variable, use it as > >> the NAME attribute for subtitles. This improves the naming of > >> subtitle streams in HTML players, providing clearer and more > >> descriptive labels for users. > >> --- > >> doc/muxers.texi | 5 +++-- > >> libavformat/hlsenc.c | 7 ++++++- > >> libavformat/hlsplaylist.c | 9 +++++++-- > >> libavformat/hlsplaylist.h | 2 +- > >> 4 files changed, 17 insertions(+), 6 deletions(-) > >> > >> diff --git a/doc/muxers.texi b/doc/muxers.texi > >> index ce93ba1488..04b7f20b7e 100644 > >> --- a/doc/muxers.texi > >> +++ b/doc/muxers.texi > >> @@ -2436,13 +2436,14 @@ ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 > >> 1000k \ > >> @item > >> Create a single variant stream. Add the @code{#EXT-X-MEDIA} tag with > >> @code{TYPE=SUBTITLES} in the master playlist with webvtt subtitle group > >> name > >> -'subtitle'. Make sure the input file has one text subtitle stream at > >> least. > >> +'subtitle' and optional subtitle name, e.g. 'English'. Make sure the input > >> +file has one text subtitle stream at least. > >> @example > >> ffmpeg -y -i input_with_subtitle.mkv \ > >> -b:v:0 5250k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 \ > >> -b:a:0 256k \ > >> -c:s webvtt -c:a mp2 -ar 48000 -ac 2 -map 0:v -map 0:a:0 -map 0:s:0 \ > >> - -f hls -var_stream_map "v:0,a:0,s:0,sgroup:subtitle" \ > >> + -f hls -var_stream_map "v:0,a:0,s:0,sgroup:subtitle,sname:English" \ > >> -master_pl_name master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 > >> -hls_list_size \ > >> 10 -master_pl_publish_rate 10 -hls_flags \ > >> delete_segments+discont_start+split_by_time ./tmp/video.m3u8 > >> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c > >> index 1e932b7b0e..7b2145f5bf 100644 > >> --- a/libavformat/hlsenc.c > >> +++ b/libavformat/hlsenc.c > >> @@ -189,6 +189,7 @@ typedef struct VariantStream { > >> const char *sgroup; /* subtitle group name */ > >> const char *ccgroup; /* closed caption group name */ > >> const char *varname; /* variant name */ > >> + const char *subtitle_varname; /* subtitle variant name */ > >> } VariantStream; > >> > >> typedef struct ClosedCaptionsStream { > >> @@ -1533,7 +1534,8 @@ static int create_master_playlist(AVFormatContext *s, > >> break; > >> } > >> > >> - ff_hls_write_subtitle_rendition(hls->m3u8_out, sgroup, > >> vtt_m3u8_rel_name, vs->language, i, hls->has_default_key ? vs->is_default > >> : 1); > >> + ff_hls_write_subtitle_rendition(hls->m3u8_out, sgroup, > >> vtt_m3u8_rel_name, vs->language, > >> + vs->subtitle_varname, i, hls->has_default_key ? > >> vs->is_default : 1); > >> } > >> > >> if (!hls->has_default_key || !hls->has_video_m3u8) { > >> @@ -2107,6 +2109,9 @@ static int > >> parse_variant_stream_mapstring(AVFormatContext *s) > >> } else if (av_strstart(keyval, "name:", &val)) { > >> vs->varname = val; > >> continue; > >> + } else if (av_strstart(keyval, "sname:", &val)) { > >> + vs->subtitle_varname = val; > >> + continue; > >> } else if (av_strstart(keyval, "agroup:", &val)) { > >> vs->agroup = val; > >> continue; > >> diff --git a/libavformat/hlsplaylist.c b/libavformat/hlsplaylist.c > >> index f8a6977702..17b93a5ef1 100644 > >> --- a/libavformat/hlsplaylist.c > >> +++ b/libavformat/hlsplaylist.c > >> @@ -57,13 +57,18 @@ void ff_hls_write_audio_rendition(AVIOContext *out, > >> const char *agroup, > >> > >> void ff_hls_write_subtitle_rendition(AVIOContext *out, const char > >> *sgroup, > >> const char *filename, const char > >> *language, > >> - int name_id, int is_default) > >> + const char *sname, int name_id, int > >> is_default) > >> { > >> if (!out || !filename) > >> return; > >> > >> avio_printf(out, "#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID=\"%s\"", > >> sgroup); > >> - avio_printf(out, ",NAME=\"subtitle_%d\",DEFAULT=%s,", name_id, > >> is_default ? "YES" : "NO"); > >> + if (sname) { > >> + avio_printf(out, ",NAME=\"%s\",", sname); > >> + } else { > >> + avio_printf(out, ",NAME=\"subtitle_%d\",", name_id); > >> + } > >> + avio_printf(out, "DEFAULT=%s,", is_default ? "YES" : "NO"); > >> if (language) { > >> avio_printf(out, "LANGUAGE=\"%s\",", language); > >> } > >> diff --git a/libavformat/hlsplaylist.h b/libavformat/hlsplaylist.h > >> index d7aa44d8dc..ec44e5a0ae 100644 > >> --- a/libavformat/hlsplaylist.h > >> +++ b/libavformat/hlsplaylist.h > >> @@ -41,7 +41,7 @@ void ff_hls_write_audio_rendition(AVIOContext *out, > >> const char *agroup, > >> int name_id, int is_default, int > >> nb_channels); > >> void ff_hls_write_subtitle_rendition(AVIOContext *out, const char > >> *sgroup, > >> const char *filename, const char > >> *language, > >> - int name_id, int is_default); > >> + const char *sname, int name_id, int > >> is_default); > >> void ff_hls_write_stream_info(AVStream *st, AVIOContext *out, int > >> bandwidth, > >> int avg_bandwidth, > >> const char *filename, const char *agroup, > >> -- > >> 2.46.1 > >> > >> _______________________________________________ > >> ffmpeg-devel mailing list > >> ffmpeg-devel@ffmpeg.org > >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > >> > >> To unsubscribe, visit link above, or email > >> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". > > The modified api looks only be used by hlsenc, and it looks fine to me. > > Will apply after 48 hours if there have no more comments. > > > > > > Thanks > > Steven > > > Hi Steven, Hi Jonathan, > > sorry to be a pain, but you said you wanted to merge this patch > and the other two regarding avformat/hlsenc. Pushed
Thanks for your reminder, Jonathan, > > Thanks in advance! > Jonathan > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". Thanks Steven _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".