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


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

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

    ffmpeg -i input.mp4 -c:v copy -hls_time 2  -hls_segment_filename %d.ts -f hls output/playlist.m3u8
    
    • 1

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

    参数作用
    -i指定输入的文件名
    -c:v指定视频的编码格式,copy的意思是复用原始视频的编码信息,不重新编码
    -hls_time指定切分的ts文件时长,单位秒
    -hls_segment_filenamets文件的命名格式
    -f指定输出的文件格式,实测这个参数可以省略

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

    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
    
    • 1
  • 相关阅读:
    入坑 Node.js 1
    Eclipse-MAT的插件介绍使用
    axios使用
    55、基于 WebFlux 开发 WebSocKet
    Maglev: 一种快速可靠的负载均衡器
    Python 模拟类属性
    HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Stack
    基于单片机的纸牌24点游戏模拟器设计
    Spark学习(2)-Spark环境搭建-Local
    极简网络用户手册(1)
  • 原文地址:https://blog.csdn.net/xindoo/article/details/127838151