使用字幕为 HTTP 实时流编码视频

Posted

技术标签:

【中文标题】使用字幕为 HTTP 实时流编码视频【英文标题】:Encoding Video for HTTP Live Streaming with Subtitles 【发布时间】:2012-06-12 18:10:18 【问题描述】:

我一直在关注 Apple 的 HTTP Live Streaming 指南并让它在我的应用程序中运行良好,但我想在视频中嵌入字幕。 This thread on Quora 表明 Netflix 已经做到了。

我的源视频使用 QuickTime Pro 通过 .srt 文件嵌入了字幕,在 QuickTime 和我的 ios 应用程序中播放视频时可以看到字幕。一旦我使用 mediafilesegmenter(根据 HLS 的要求)将视频拆分为较小的 .ts 文件,字幕就会消失。我正在使用MPMoviePlayerController。

是否有一种特殊的方法可以对源视频进行编码或使用 mediafilesegmenter 进行字幕工作?

【问题讨论】:

【参考方案1】:

ts 流中可以有字幕(例如 EIA-608 或 EIA-708)。我不知道有什么好的免费工具可以将这样的字幕插入到 ts 流中,但Manzanita 可能会卖给你一些东西(以荒谬的价格)。

不幸的是,许多 HLS 播放器会忽略字幕,因为 HLS 规范没有提及应如何处理字幕轨道。在您自己的应用中,您可以通过查找已经包含 EIA-608/EIA-708 文本的 ts 文件并对其进行分段来对其进行测试。

坦率地说,我认为在 TS 中嵌入字幕是一条死路,你会发现编写自己的由 TimedMetadata 触发的字幕显示器会更容易。

=== 更新 ===

自 HLS 草案第 9 版(2012 年 9 月 22 日)起,HLS 支持 WebVTT 字幕。我不知道有什么工具可以用它们来准备流。

【讨论】:

感谢您的回答,这几乎是我得出的结论。我现在主要使用 TimedMetadata。我很乐意看到 Apple 为 HLS 添加适当的字幕支持,但现在我认为可以肯定地认为这是不可能的。 您可以使用 Apple Compressor 在 HLS 流中添加隐藏式字幕,价格约为 50 美元。 youtube.com/watch?v=-r59sSiDBKU 但是,是的,webvtt 可能更好,有一个开源 javascript 项目可以编辑它们 scottbw.wordpress.com/2011/06/28/… 和苹果提供了 mediasubtitlesegmenter 将 .vtt 文件拆分为 HLS 的较小 .vtt 文件【参考方案2】:

我认为对于浏览器中的 HTTP Live Streaming,不支持字幕(我可能错了)。

然而,像 http://captionatorjs.com/ 这样的 polyfill 允许在 iOS 上的视频中添加字幕。现在,我知道字幕适用于非 HLS 视频,但不确定它是否适用于 HLS...您需要研究/测试。


附:如果它是您拥有的本机应用程序,那么您正在寻找定时元数据http://developer.apple.com/library/ios/#documentation/mediaplayer/reference/MPTimedMetadata_Class/Reference/Reference.html 以支持字幕等内容。

【讨论】:

这是一个原生应用程序 - 我玩过 TimedMetadata 但希望 HTTP Live Streaming 支持字幕。我不明白为什么不能拆分字幕并将它们附加到各个媒体片段。【参考方案3】:

如果它对某人有帮助,我有一个应用程序可以从 Vimeo Pro 帐户流式传输 HLS 内容。 Vimeo 允许您添加在 iOS 和 tvOS 设备上完美处理的 WebVTT 字幕。

为了生成 .vtt 文件,我使用了 YouTube,如下所示:https://www.youtube.com/watch?v=vlj_Lq31BKw

【讨论】:

以上是关于使用字幕为 HTTP 实时流编码视频的主要内容,如果未能解决你的问题,请参考以下文章

什么软件可以把Mp4视频里的字幕提取出来?

如何为 Flash 视频加载字幕文本?

如何创建 youtube 视频的实时流?

ExoPlayer 无法播放 Adob​​e 实时流编码器流式传输的音频/视频 (RTMP)

编码后如何在输出文件中保留 DVB 字幕?

使用HLS协议连接nginx实现近实时流方式播放视频