如何使用 ffmpeg 将 .ts 文件转换为单个 .m3u8 文件?

如何使用 ffmpeg 将 .ts 文件转换为单个 .m3u8 文件?

我有一个 .ts 文件,但没有源文件(视频文件)。我需要从 .ts 文件本身生成一个 m3u8 文件,而无需创建其他 .ts 文件。我使用了以下命令。

ffmpeg -i mytsfile.ts -hls_list_size 0 mym3u8.m3u8 -hide_banner

当我使用上述命令时,它创建了近 590 个 ts 文件,名称为 mym3u8N.ts(其中 N 是从 1 到 590 的数字)。我不需要 ts 文件。我只需要 m3u8 文件。

答案1

如果您只想从现有段生成 M3U8 文件:

ffmpeg -i input.ts \
-map 0 -c copy \
-f segment -segment_list out.m3u8 \
-segment_time 60 \
out%03d.ts

这里,指定-segment_time等于或大于实际输入持续时间非常重要,否则,ffmpeg 将再次分割输入文件。

输出的 M3U8 将包含对新输出的 TS 文件的引用:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:61
#EXTINF:60.033333,
out000.ts
#EXT-X-ENDLIST

您可以使用该文件,或者删除该out000.ts文件(因为它本质上与输入文件相同),并更改 M3U8 文件中的文件名,因为媒体文件的内容将保持不变。

您可以进行这样的替换,例如使用perl

perl -pi -e 's/out000.ts/input.ts'

我应该补充一点,对于一个片段文件(您知道其持续时间)的简单情况,您可以轻松地手动生成 M3U8 文件。然后您还必须手动指定EXT-X-TARGETDURATION和持续时间值。EXTINF:

相关内容