将 HLS m3u8 转码为 MP4 并包含文本轨道

将 HLS m3u8 转码为 MP4 并包含文本轨道

是否可以使用 FFMPEG 将 m3u8 转换为 MP4 并保留字幕(文本)轨道?

当查看 Apple 流时,https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8 我看到视频流提到了隐藏式字幕,但我似乎找不到提取它们的方法。

流 #0:0:视频:h264(主)([27][0][0][0] / 0x001B),yuv420p(电视,smpte1
70m/smpte170m/bt709)、400x300、隐藏式字幕, 29.92 fps, 29.92 tbr, 90k tbn, 1
80k 待定

我多次尝试将其转码为 mp4,但字幕却丢失了。

我已经在清单上使用了 VLC,它有“字幕”,但转码后 mp4 没有。

使用命令: ffmpeg -i https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8 -c copy -bsf:a aac_adtstoasc out.mp4

答案1

我确实设法收集了足够的信息来完成这项工作。它是 3 个命令的组合。

使用 ffmpeg 版本 2.8.4

首先,需要将播放列表片段合并为一个 MPEG-TS 文件:

ffmpeg -i [playlist_url].m3u8 -c copy [filename].ts

接下来,我们需要从文件中提取隐藏式字幕:

ffmpeg -f lavfi -i "movie=[filename_from_last_step].ts[out0+subcc]" [filename].srt

笔记:只有当 ts 文件和 cmd 的当前路径匹配时,我才能使其工作。

最后,合并 ts 和 srt 文件并转码为 MP4:

ffmpeg -i [filename_from_first_step].ts -i [captions].srt -c:v copy -bsf:a aac_adtstoasc -c:s mov_text [out_file_name].mp4

这将为您提供一个嵌入字幕的 MP4,如果您的播放器不支持嵌入字幕,还将为您提供一个独立的 srt 文件。

答案2

如果隐藏式字幕指的是 CEA-608 或 708 流,那么这些流就是奇怪的分组化,即嵌入的之内视频流和 ffmpeg不能复制或编码它们。

您可以尝试使用提取器提取它们。如果在流上不起作用。下载各个片段,将它们连接起来并尝试。

一旦提取出来,您就可以将它们编码-c:s mov_text到 MP4 中。

相关内容