ffmpeg - 如何使用 FFmpeg 将字幕添加到 HLS 播放列表?

标签 ffmpeg http-live-streaming hls.js

我有一个视频 (video.mp4) 和一个字幕文件 (subtitle.srt)。

我正在尝试使用 FFmpeg 为视频生成具有 3 种不同分辨率的 VoD HLS 播放列表;我还希望字幕文件变成分段的 .vtt 文件。

我试过以下命令,但它不起作用,它给我一个“转换失败!”没有任何进一步信息的消息:

ffmpeg -i video.mp4 -i subtitle.srt \
-preset slow -g 60 -sc_threshold 0 \
-map 0 -map 0 -map 0 -map 1 \
-s:v:0 640x360 -c:v:0 h264 -b:v:0 500k \
-s:v:1 854x480 -c:v:1 h264 -b:v:1 1000k \
-s:v:2 1280x720 -c:v:2 h264 -b:v:2 2000K \
-c:a copy -c:s webvtt \
-f hls -hls_playlist_type vod -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \
-master_pl_name master.m3u8 -hls_time 6 -hls_list_size 0 -hls_allow_cache 1 -start_number 1 \
-hls_segment_filename "output/hls/%v/seg-%d.ts" output/hls/%v/index.m3u8

我正在努力在 FFmpeg 文档或其他任何地方找到有关如何将字幕添加到 HLS 播放列表的任何有用信息。命令到底应该是什么样的?我缺少什么?

最佳答案

文档不是很好,但请参阅 -var_stream_map 部分的底部附近。您需要为字幕添加到相关变体流组的映射。

所以你上面的例子会变成:

-var_stream_map "v:0,a:0,s:0 v:1,a:1,s:0 v:2,a:2,s:0"

如果您愿意,可以通过附加,sgroup=examplegroupname 来设置字幕组名称。

最后,还有一个非文档选项 hls_subtitle_path 允许您设置字幕 list 名称(默认为主 m3u8 名称加上 _vtt.m3u8

关于ffmpeg - 如何使用 FFmpeg 将字幕添加到 HLS 播放列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67663932/

相关文章:

video - DIY : Video Streaming Server

iphone - HTTP 自适应比特率流式传输如何在 iPhone 上工作?

angular - 在 Chrome 上使用 Shaka Player 播放 HLS m3u8

javascript - 用vuejs项目实现hls.js库

javascript - 如何限制在 Safari(MacOS 和 iOS)中暂停时获取 hls 段文件

ffmpeg - 添加使用 ffmpeg 淡出的背景音乐

video - 如何使用 libav 修复视频中的卡住像素?

android - 为 android 构建 FFMPEG 后,命令行参数没有 libffmpeg.so

ios - 视频流问题

json - 我在哪里可以获得 FFProbe JSON 模式定义?