• 使用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
  • 相关阅读:
    智能金融决策策略,规则引擎在大数据金融行业的实战案例
    Java继承
    【博客550】k8s乐观锁机制:控制并发请求与数据一致性
    大数据(9j)FlinkCDC
    .net中定义post请求的接口功能
    当快手打开想象力,钱多了,路也更广阔!
    清明作业 c++
    STM8S系列基于STVD开发,标准外设库函数开发环境搭建
    【MongoDB】索引 – 文本索引
    PC防锁屏定时工具
  • 原文地址:https://blog.csdn.net/xindoo/article/details/127838151