FFmpeg 将视频转换成m3u8视频hls
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -10 -f hls output.m3u8
默认的每片长度为2秒,m3u8文件中默认只保存最新的5条片的信息,导致最后播放的时候只能播最后的一小部分。
-hls_time n: 设置每片的长度,默认值为10。单位为秒
-hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5
-hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的 片,而且能够限制写入磁盘的最多的片的数量
-hls_start_number n:设置播放列表中sequence number的值为number,默认值为0
注意:播放列表的sequence number 对每个segment来说都必须是唯一的,而且它不能和片的文件名(当使用wrap选项时,文件名有可能会重复使用)混淆
hls
Apple HTTP 直播流混合器,它根据HTTP直播流(HLS)规范进行MPEG-TS分割
它创建一个播放列表文件,包括1个或者多个分段文件,输出文件为指定的播放列表文件。
默认混合器对每段创建一个文件,这些文件有相同的基于播放列表的文件名,段索引数和.tx扩展名
例如,转一个输入文件:
ffmpeg -i in.nut out.m3u8
这将根据产品播放列表文件out.m3u8产生分段文件:out0.ts out1.ts out2.ts 等等
参考[segment]混合器,它提供了更多可用于HTL分割的常规处理和修正介绍
hls选项
这个混合器支持如下选项
-
hls_time seconds
设置段长度,单位秒,默认为2
-
hls_list_size size
设置播放列表中字段最大数。如果为0,则包含所有分段。默认为5
-
hls_ts_options options_list
设置输出格式选项,使用'-'分割的
key=value
参数对,如果包括特殊字符需要被转义处理 -
hls_wrap wrap
一种循环机制,设置数量后以0-设定数形成一个环依次循环使用作为输出段号.为0表示不限制, 默认为0
选项可避免磁盘被多个段文件填满,并限制写入磁盘的最大文件数
-
start_number number
设置播放列表中最先播放的索引号,默认 0.
-
hls_allow_cache allowcache
设置客户端是否:可能(1) 或 必须不 (0) 缓冲媒体段
-
hls_base_url baseurl
对每个列表中的记录添加一个基本的URL,一般用于采用相对路径描述的列表
注意列表序号必须是每段独特的,不可分割的文件名和序列号,序列号是可循环的,则可能会引起困惑,例如hls_wrap选项设置了
-
hls_segment_filename filename
设置段文件名。除非
hls_flags
single_file
被设置,设置这个文件名可以用于段命名格式化(依据段序数):ffmpeg in.nut -hls_segment_filename 'file%03d.ts' out.m3u8
这个例子中,段文件会输出为: file000.ts, file001.ts, file002.ts, 等等,而不是默认的out0.ts out1.ts out2.ts 等等
-
hls_key_info_file key_info_file
使用key_info_file对段进行加密。
key_info_file
中的第一行指定一个URI,是写入播放列表的,这个key URL被用于存放播放期访问的加密密钥。第二行指定用于加密过程中的key文件路径。key文件作为一个单一排列的16进制数组以二进制格式数据读入。可选的第三行则指定初始化向量(IV,一个十六进制字符串用于代替部分序列(默认)进行加密)。改变key_info_file将导致段加密采用新的key/IV 以及播放列表中任意条目采用新的 URI/IVkey_info_file 格式:
key URI
key file path
IV (optional)
key URIs 例子:
http://server/file.key
/path/to/file.key
file.key
key文件路径例子:
file.key
/path/to/file.key
IV例子:
0123456789ABCDEF0123456789ABCDEF
完整key_info_file 示例:
http://server/file.key
/path/to/file.key
0123456789ABCDEF0123456789ABCDEF
shell脚本例子:
#!/bin/sh
BASE_URL=${1:-'.'}
openssl rand 16 > file.key
echo $BASE_URL/file.key > file.keyinfo
echo file.key >> file.keyinfo
echo $(openssl rand -hex 16) >> file.keyinfo
ffmpeg -f lavfi -re -i testsrc -c:v h264 -hls_flags delete_segments \
-hls_key_info_file file.keyinfo out.m3u8
-
hls_flags single_file
如果这个标记被设置,则会把所有段存储到一个MPEG-TS文件中,且在播放列表中使用字节范围。 HLS播放列表在版本4中支持这种方法:
ffmpeg -i in.nut -hls_flags single_file out.m3u8
这里所有的输出都放置在out.ts中了
-
hls_flags delete_segments
在播放的段已经过了持续时间后就删除掉对应的文件。
作者:89391311
链接:https://www.csev.cn/share/20240612361.html
来源:彩色动力-测试分享
版权声明:本文欢迎任何形式转载,转载时完整保留本声明信息(包含原文链接、原文出处、原文作者、版权声明)即可。本文后续所有修改都会第一时间在原始地址更新。
共有 0 条评论