ffmpeg 转换为 hls 时烧录的字幕不同步

标签 ffmpeg http-live-streaming webvtt hls.js vtt

我有一个文件,其中有字幕,它们完全同步。

这是文件。 https://983yqbz442.s3.amazonaws.com/little-mermaid-captions.mp4

我运行此命令以转换为 hls 并创建 .ts 文件和 .vtt 文件。

ffmpeg -i little-mermaid-captions.mp4 -profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8

然后,我还使用以下内容在同一文件夹中创建了一个 master.m3u8 文件。
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360,SUBTITLES="subtitles"
index.m3u8
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subtitles",NAME="English",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="ENG",URI="index_vtt.m3u8"

现在,如果我播放 master.m3u8 文件,字幕现在不同步,大约需要 1 秒。我知道这可能是我通过 FFmpeg 缺少的设置,但我真的坚持这一点,并希望有任何见解。

谢谢

更多信息。

这是可以在 Safari 中打开的直接 .m3u8 的链接。

https://983yqbz442.s3.amazonaws.com/hlstests/master.m3u8

生成的vtt文件在这里。

https://983yqbz442.s3.amazonaws.com/hlstests/subs-0.vtt

如果您查看 .vtt 文件的开头,您将看到这一点。
WEBVTT

00:06.840 --> 00:10.320
once long ago in the deep blue below

它应该从 00:06.840 开始,但是在 Safari 中播放 .m3u8 文件时,您应该会看到它在 5 秒左右开始,而不是 6 秒左右太早了。

最佳答案

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

关于ffmpeg 转换为 hls 时烧录的字幕不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61835223/

相关文章:

windows - 使用 Cygwin 进行 FFMPEG 构建错误 cmp : command not found

video - ffmpeg - 将视频组合成一个宽视频

android - 如何将 webvtt 文件与 MediaPlayer 一起用于 Android 中的音轨

webvtt - 网络 VTT 不工作

c++ - FFmpeg编码aac音频,编码文件无法播放

python - 如何在python中的视频上叠加帧号

ubuntu - 如何更改 nginx hls 文件的名称?

iOS 10 HLS 404 播放列表错误处理

ffmpeg - 创建指向其他 m3u8 文件的 m3u8 文件

HTML5本地播放带字幕的MP4视频