·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

用ffmpeg 把mp4文件转为ts文件并生成m3u8列表

436 1
发表于 2020-7-7 10:02:33 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在使用hls技术播放视频流时,首先要把视频转换为ts片和一个m3u8播放列表,使用ffmpeg进行该转换时(低版本ffmpeg不支持直接转,只能现在转换成ts,再用m3u8-segmenter切片,笔者使用的是ffmpeg version-2.1.2),通常使用如下命令:
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls output.m3u8
但是在此状态下,默认的每片长度为2秒,m3u8文件中默认只保存最新的5条片的信息,导致最后播放的时候只能播最后的一小部分。
实际上还有一些其他参数可以控制这些内容:
以下为ffmpeg官网原文:
This muxer supports the following options:

‘hls_time seconds’
Set the segment length in seconds. Default value is 2.

‘hls_list_size size’
Set the maximum number of playlist entries. If set to 0 the list file will contain all the segments. Default value is 5.

‘hls_wrap wrap’
Set the number after which the segment filename number (the number specified in each segment file) wraps. If set to 0 the number will be never wrapped. Default value is 0.

This option is useful to avoid to fill the disk with many segment files, and limits the maximum number of segment files written to disk towrap.

‘start_number number’
Start the playlist sequence number from number. Default value is 0.

Note that the playlist sequence number must be unique for each segment and it is not to be confused with the segment filename sequence number which can be cyclic, for example if the ‘wrap’ option is specified.


翻译如下:

-hls_time n: 设置每片的长度,默认值为2。单位为秒

-hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5

-hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量

-hls_start_number n:设置播放列表中sequence number的值为number,默认值为0

注意:播放列表的sequence number 对每个segment来说都必须是唯一的,而且它不能和片的文件名(当使用wrap选项时,文件名有可能会重复使用)混淆



加上了这些参数,小伙伴们就可以愉快地控制生成的m3u8文件啦
我要说一句 收起回复

评论1

Discuz智能体Lv.8 发表于 2025-3-16 16:29:07 | 查看全部
要将MP4文件转换为TS文件并生成M3U8播放列表,你可以使用FFmpeg命令,并通过调整参数来控制生成的M3U8文件的行为。以下是一个完整的命令示例,结合了你提到的参数:

  1. ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_time 10 -hls_list_size 0 -hls_wrap 0 -hls_start_number 0 output.m3u8
复制代码


### 参数解释:
1. **`-i input.mp4`**: 指定输入文件为 `input.mp4`。
2. **`-c:v libx264`**: 使用 `libx264` 编码器对视频进行编码。
3. **`-c:a aac`**: 使用 `AAC` 编码器对音频进行编码。
4. **`-strict -2`**: 允许使用实验性的编码器(如AAC)。
5. **`-f hls`**: 指定输出格式为HLS(HTTP Live Streaming)。
6. **`-hls_time 10`**: 设置每个TS片的时长为10秒。
7. **`-hls_list_size 0`**: 设置M3U8播放列表中保存所有TS片的信息(不限制数量)。
8. **`-hls_wrap 0`**: 设置不覆盖旧的TS片文件(即不限制TS文件的数量)。
9. **`-hls_start_number 0`**: 设置播放列表的起始序号为0。
10. **`output.m3u8`**: 指定输出的M3U8文件名为 `output.m3u8`。

### 其他注意事项:
- **`hls_time`**: 你可以根据需要调整每个TS片的时长。较短的时长会增加TS片的数量,但可以减少播放时的延迟。
- **`hls_list_size`**: 如果你希望M3U8播放列表中只保存最新的几个TS片信息,可以将 `hls_list_size` 设置为一个较小的值(如5)。
- **`hls_wrap`**: 如果你希望限制生成的TS文件数量,可以设置 `hls_wrap` 为一个非零值。例如,设置为10表示最多保留10个TS文件,超过10个后旧的TS文件会被覆盖。
- **`hls_start_number`**: 如果你希望播放列表的序号从某个特定值开始,可以调整这个参数。

### 示例:
假设你希望每个TS片的时长为5秒,并且希望M3U8播放列表中只保存最新的10个TS片信息,可以使用以下命令:

  1. ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_time 5 -hls_list_size 10 -hls_wrap 0 -hls_start_number 0 output.m3u8
复制代码


这样生成的M3U8文件将包含最新的10个TS片信息,每个TS片的时长为5秒。

### 总结:
通过调整FFmpeg的HLS相关参数,你可以灵活控制生成的M3U8文件和TS片的行为,以满足不同的播放需求。如果你在使用过程中遇到任何问题,欢迎随时在DZ插件网(https://www.dz-x.net/)寻求帮助。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.143.254.11,GMT+8, 2025-3-29 17:52 , Processed in 0.755219 second(s), 79 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表