前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用ffmpeg将视频转成HLS(m3u8)格式

使用ffmpeg将视频转成HLS(m3u8)格式

作者头像
xindoo
发布2024-08-07 11:08:54
2040
发布2024-08-07 11:08:54
举报
文章被收录于专栏:XINDOO的专栏

  HLS (HTTP Live Streaming)是苹果推出的视频流协议,HLS格式的视频包含一个m3u8文本文件,以及众多的.ts的视频片段,而m3u8文本文件的作用就是将这些ts片段索引起来。 因为HLS协议是将视频切分成很多小的ts片段,这些小片段很适合放到cdn上,有很多视频文章都使用了hls格式传输视频。今天我在这里教大家如何用ffmpeg将mp4格式的视频转为HLS(m3u8)格式。

  如果不对视频重新编码的话,命令也很简单,如下:

代码语言:javascript
复制
ffmpeg -i input.mp4 -c:v copy -hls_time 2  -hls_segment_filename %d.ts -f hls output/playlist.m3u8

  这里用到了几个参数,作用分别如下:

参数

作用

-i

指定输入的文件名

-c:v

指定视频的编码格式,copy的意思是复用原始视频的编码信息,不重新编码

-hls_time

指定切分的ts文件时长,单位秒

-hls_segment_filename

ts文件的命名格式

-f

指定输出的文件格式,实测这个参数可以省略

  这里有个坑,当我用上面命令行生成hls视频后,我发现每个ts的时长不是我指定的2s,而是10s。查阅资料后发现,ts切片的大小严格依赖于原始视频的GOP大小,因为必选保证一个ts内至少包含一个GOP,否则这个ts分片就无法使用。当然解决方式也很简单,我们只需要再新增一个参数 -force_key_frames "expr:gte(t,n_forced*2)" 这个参数的作用就是让视频GOP大小为2s,这样就能保证ts分片大小是我们想要的2s了。 完整命令如下:

代码语言:javascript
复制
ffmpeg -i input.mp4 -c:v copy -force_key_frames "expr:gte(t,n_forced*2)" -hls_time 2  -hls_segment_filename %d.ts -f hls output/playlist.m3u8
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档