【问题标题】:How to add a subtitle to an HLS playlist using FFmpeg?如何使用 FFmpeg 向 HLS 播放列表添加字幕?
【发布时间】:2021-08-12 06:41:01
【问题描述】:

我有一个视频 (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 播放列表的任何有用信息。命令应该是什么样的?我缺少什么?

【问题讨论】:

  • 对于将来访问此问题并遇到类似问题的任何人:使用 Shaka Packager 而不是 FFmpeg 来完成此任务,使用起来更容易,而且总体上是一个更理智的工具,FFmpeg 是纯粹的头痛,我最终选择了 Shaka Packager,我不会回去了。
  • 你好,你锻炼了这个命令吗?对我来说,它仍然说[hls @ 000002689df607c0] Same elementary stream found more than once in two different variant definitions #0 and #1 [hls @ 000002689df607c0] Variant stream info update failed with status ffffffea Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument Error initializing output stream 0:5 --
  • @jeff 不,不幸的是我放弃了 FFmpeg 并开始使用 Shaka Packager。看看我之前的评论。
  • 我明白了,谢谢您的回复。顺便说一句,如果你有兴趣,我得到了你的命令:reddit.com/r/ffmpeg/comments/mfybas/comment/gssvbsg/…我不确定它是否正确。

标签: ffmpeg http-live-streaming hls.js


【解决方案1】:

文档不是很好,但请参阅该部分底部附近的-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 来设置字幕组名称。

最后,有一个 undocument 选项hls_subtitle_path 允许您设置字幕清单名称(默认为主 m3u8 名称加上 _vtt.m3u8

【讨论】:

  • 谢谢。我不知道谁对你的回答投了反对票。诡异的。他们也否决了我的问题。我不知道为什么。无论如何,自从我发布问题以来,我一直在尝试使用-var_stream_map,但不仅文档很糟糕,错误消息也很神秘。您提到了hls_subtitle_path 选项。感谢那。是否还有设置字幕段名称的选项?它默认为主 m3u8 文件名 + 段号(例如playlist2.vtt),这不是很好。另外,在任何地方我都可以找到未记录选项的列表吗?
  • 不幸的是,对于字幕段名称,hls_segment_filename 似乎未应用,并且似乎没有等效选项看起来像是疏忽:-( 所有可用选项都可以使用 @987654331 显示@,虽然文档对于某些选项不是很好。如果你能理解 C,github.com/FFmpeg/FFmpeg/blob/master/libavformat/hlsenc.c 的源代码很有帮助。
  • @AnonymousCoward 哦,真可惜!但是非常感谢您的帮助。非常感谢。
猜你喜欢
  • 2022-01-24
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多