流式传输视频时是否真正连接字幕(HLS,M3U8)
Is it real connect subtitles when streaming video (HLS, M3U8)
我正在尝试创建一个流,其中来自可转换文件(在我的例子中是 .mkv 到 .m3u8)的曲目将通过 m3u8 播放。此刻,竟然在多个分辨率之间切换,甚至select音轨,但根本看不到字幕。
视频正常,音轨切换,但完全看不到字幕
ffprobe源文件:
https://paste2.org/czUePDPj
接下来,执行编码和拆分成轨道:
ffmpeg -i '/home/mishkapetran/Загрузки/Rick.mkv' \
-map 0:v:0 -c:v libx264 -profile:v baseline -preset:v superfast -strict -2 -s 426x240 -f hls -hls_time 10 -hls_list_size 0 -segment_list rick240p -hls_segment_filename '/home/mishkapetran/Загрузки/test/Rick240p_%d.ts' '/home/mishkapetran/Загрузки/test/Rick240p.m3u8' \
-map 0:a:0 -c:a aac -f hls -hls_time 10 -hls_list_size 0 -segment_list rick_ru -hls_segment_filename '/home/mishkapetran/Загрузки/test/RickTrack_ru_%d.aac' '/home/mishkapetran/Загрузки/test/RickTrack_ru.m3u8' \
-map 0:a:1 -c:a aac -f hls -hls_time 10 -hls_list_size 0 -segment_list rick_en -hls_segment_filename '/home/mishkapetran/Загрузки/test/RickTrack_en_%d.aac' '/home/mishkapetran/Загрузки/test/RickTrack_en.m3u8' \
-map 0:s:0 suben.vtt -f hls -hls_time 10 -hls_list_size 0 -segment_list en -hls_segment_filename '/home/mishkapetran/Загрузки/test/sub_en_%d.vtt' '/home/mishkapetran/Загрузки/test/sub_en.m3u8' \
-map 0:s:1 subru.vtt -f hls -hls_time 10 -hls_list_size 0 -segment_list ru -hls_segment_filename '/home/mishkapetran/Загрузки/test/sub_ru_%d.vtt' '/home/mishkapetran/Загрузки/test/sub_ru.m3u8'
然后在同一个文件夹中创建 m3u8 母版:
#EXTM3U
#EXT-X-VERSION:5
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Russian",LANGUAGE="ru",AUTOSELECT=YES,URI="RickTrack_ru.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English",LANGUAGE="en",AUTOSELECT=NO,URI="RickTrack_en.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Russian",DEFAULT=YES,FORCED=NO,AUTOSELECT=YES,LANGUAGE="ru",URI="sub_ru.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",DEFAULT=NO,FORCED=NO,AUTOSELECT=YES,LANGUAGE="en",URI="sub_en.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=928000,CODECS="avc1.42c00d,mp4a.40.2",RESOLUTION=480x270,AUDIO="audio",SUBTITLES="subs"
Rick240p.m3u8
经过一周的寻找,一切都非常简单地决定了:
字幕使用 .vtt 扩展名可以正常工作,但您需要在类型中指定应用程序/八位字节流。
对我来说,它是这样工作的:
<video id="stream_video_tag" width="800" height="600" controls>
<source src="index.m3u8" type="application/x-mpegURL">
<track src="sub_en.vtt" srclang="en" label="English" kind="subtitles"
type="application/octet-stream">
<track src="sub_ru.vtt" srclang="ru" label="Russian" kind="subtitles"
type="application/octet-stream">
</video>
我正在尝试创建一个流,其中来自可转换文件(在我的例子中是 .mkv 到 .m3u8)的曲目将通过 m3u8 播放。此刻,竟然在多个分辨率之间切换,甚至select音轨,但根本看不到字幕。
视频正常,音轨切换,但完全看不到字幕
ffprobe源文件: https://paste2.org/czUePDPj
接下来,执行编码和拆分成轨道:
ffmpeg -i '/home/mishkapetran/Загрузки/Rick.mkv' \
-map 0:v:0 -c:v libx264 -profile:v baseline -preset:v superfast -strict -2 -s 426x240 -f hls -hls_time 10 -hls_list_size 0 -segment_list rick240p -hls_segment_filename '/home/mishkapetran/Загрузки/test/Rick240p_%d.ts' '/home/mishkapetran/Загрузки/test/Rick240p.m3u8' \
-map 0:a:0 -c:a aac -f hls -hls_time 10 -hls_list_size 0 -segment_list rick_ru -hls_segment_filename '/home/mishkapetran/Загрузки/test/RickTrack_ru_%d.aac' '/home/mishkapetran/Загрузки/test/RickTrack_ru.m3u8' \
-map 0:a:1 -c:a aac -f hls -hls_time 10 -hls_list_size 0 -segment_list rick_en -hls_segment_filename '/home/mishkapetran/Загрузки/test/RickTrack_en_%d.aac' '/home/mishkapetran/Загрузки/test/RickTrack_en.m3u8' \
-map 0:s:0 suben.vtt -f hls -hls_time 10 -hls_list_size 0 -segment_list en -hls_segment_filename '/home/mishkapetran/Загрузки/test/sub_en_%d.vtt' '/home/mishkapetran/Загрузки/test/sub_en.m3u8' \
-map 0:s:1 subru.vtt -f hls -hls_time 10 -hls_list_size 0 -segment_list ru -hls_segment_filename '/home/mishkapetran/Загрузки/test/sub_ru_%d.vtt' '/home/mishkapetran/Загрузки/test/sub_ru.m3u8'
然后在同一个文件夹中创建 m3u8 母版:
#EXTM3U
#EXT-X-VERSION:5
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Russian",LANGUAGE="ru",AUTOSELECT=YES,URI="RickTrack_ru.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English",LANGUAGE="en",AUTOSELECT=NO,URI="RickTrack_en.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Russian",DEFAULT=YES,FORCED=NO,AUTOSELECT=YES,LANGUAGE="ru",URI="sub_ru.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",DEFAULT=NO,FORCED=NO,AUTOSELECT=YES,LANGUAGE="en",URI="sub_en.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=928000,CODECS="avc1.42c00d,mp4a.40.2",RESOLUTION=480x270,AUDIO="audio",SUBTITLES="subs"
Rick240p.m3u8
经过一周的寻找,一切都非常简单地决定了: 字幕使用 .vtt 扩展名可以正常工作,但您需要在类型中指定应用程序/八位字节流。 对我来说,它是这样工作的:
<video id="stream_video_tag" width="800" height="600" controls>
<source src="index.m3u8" type="application/x-mpegURL">
<track src="sub_en.vtt" srclang="en" label="English" kind="subtitles"
type="application/octet-stream">
<track src="sub_ru.vtt" srclang="ru" label="Russian" kind="subtitles"
type="application/octet-stream">
</video>