HLS 视频分段的复杂性。如何使用 ffmpeg 创建传输流

HLS 视频分段的复杂性。如何使用 ffmpeg 创建传输流

我有 h264 视频,目前我们正在使用 Apple 的 HTTP 视频流工具和 mediafilesegmenter 来分割这些文件。我需要做的是根据这个非常流行的开源分割器

问题是这个分割器不能处理任何视频,只能处理 MPEG-TS 视频。所以我必须先将我的 h264 视频转换为 TS。

我可以用 ffmpeg 来实现这一点。我正在使用这个:

ffmpeg -i encoded.mp4 -vcodec h264 -i encoded.mp4 -sameq -acodec aac -strict experimental -f mpegts output.ts  

但这会产生相当大的输出。原因是 Apple 的分段器保留了相同的编解码器 - AVC 和相同的音频编解码器 - AAC,而 ffmpeg 将视频格式更改为 MPEG 视频。

问题是:我是否可以以某种方式保留相同的 AVC 视频编解码器并将视频转换为传输流?

因此我的目标是保持与 Apple 的 medifilesegmenter 相同的视频质量和相同的视频编解码器。

UPD:好的...看来 ffmpeg 可以将视频分成几段:

ffmpeg -i encoded.mp4 -c copy -map 0 -vbsf h264_mp4toannexb -f segment -segment_time 10 -segment_list test.m3u8 -segment_format mpegts segment%d.ts

这仍然有一个问题:它不会创建 http 直播流索引文件。(-segment_list 会创建一个包含片段列表的文件,但它看起来不像 HLS 索引)。因此,您仍然必须创建索引文件

答案1

尝试:

ffmpeg -i in.mp4 -acodec copy -vcodec copy out.ts

Ffmpeg 也有一个分段器。请参阅http://ffmpeg.org/ffmpeg.html#segment_002c-stream_005fsegment_002c-ssegment

答案2

尝试设置-segment_list_typem3u8。从外观上看,该列表适用于静态文件转换,但不适用于实时流,因为直到close_list调用 时,片段持续时间才会添加到列表中。

在当前版本中,应该从列表名称文件扩展名中设置列表类型,但事实并非如此。

答案3

尝试设置-segment_list_flags live

相关内容