字幕和 video/audio hls ffmpeg videojs 之间的延迟

delay between subtitles and video/audio hls ffmpeg videojs

我使用 ffmpeg 将视频转换为 hls 格式 (m3u8),并使用 videojs 阅读此视频。但是我有一个问题,字幕出现在实际时间戳之前 1.4 秒。

我执行这个命令来提取视频、音频和字幕:

ffmpeg -i [file] -map 0:1 -c:a aac -ar 48000 -b:a 320k -hls_time 2 -hls_segment_filename audio/1/seq-%d.ts audio/1/320kbit.m3u8 -map 0:2 -c:a aac -ar 48000 -b:a 320k -hls_time 2 -hls_segment_filename audio/2/seq-%d.ts audio/2/320kbit.m3u8 -map 0:s:0 -f webvtt sub.vtt -map 0:v:0 -vf scale=1920:-2 -c:v h264 -profile:v main -g 48 -keyint_min 48 -crf 20 -sc_threshold 0 -b:v 5000k -maxrate 5350k -bufsize 7500k -hls_time 2 -hls_segment_filename video/1080p/seq-%d.ts video/1080p/5000k.m3u8

以及将 substile 转换为 hls 格式的命令

ffmpeg -i sub.vtt -f segment -segment_time 2 -segment_list_size 0 -segment_list my-hero/subtitles/sub.m3u8 -segment_format webvtt -scodec copy my-hero/subtitles/seq-%d.vtt

然后我创建一个播放列表文件来收集所有这些

#EXTM3U
#EXT-X-VERSION:3

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-group",LANGUAGE="fre",NAME="Français",DEFAULT=YES,AUTOSELECT=YES,URI="audio/1/128k.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-group",LANGUAGE="jpn",NAME="Japonais",DEFAULT=NO,AUTOSELECT=YES,URI="audio/2/128k.m3u8"

#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Français",DEFAULT=yes,AUTOSELECT=YES,FORCED=NO,LANGUAGE="fr",URI="subtitles_fr.m3u8"

#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,SUBTITLES="subs",AUDIO="audio-group"
video/1080p/5000k.m3u8

我没有看到问题所以如果有人有想法:/

看我之前的回答:

出于某种原因,FFMPEG 在写入时将 MPEG-2 传输流的呈现时间增加了大约 1.4 秒。所以你的视频和音频都晚了。如果您将 -muxdelay 0 添加到您的 FFMPEG 命令行,同步问题应该得到解决。