我有 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_type
为m3u8
。从外观上看,该列表适用于静态文件转换,但不适用于实时流,因为直到close_list
调用 时,片段持续时间才会添加到列表中。
在当前版本中,应该从列表名称文件扩展名中设置列表类型,但事实并非如此。
答案3
尝试设置-segment_list_flags live