ffmpeg限制段文件数

ffmpeg limit number of segment file

我正在学习生成 hls 流

目前我的 ffmpeg 命令看起来像

ffmpeg -analyzeduration 100000000 -probesize 1000000 \
-i https://nasa-i.akamaihd.net/hls/live/253565/NASA-NTV1-Public/master_500.m3u8 \
-c:v copy -g 90 -c:a aac \
-strict -2 \
-strftime 1  -use_localtime 1 -g 90 \
-hls_time 20 \
-hls_list_size 15 \
-hls_wrap 16 \
-hls_segment_filename mydir/%Y-%m-%d_%H-%M-%S.ts \
-f hls /index.m3u8 \
-hls_flags delete_segments \

我只想有 15 个 ts 文件,每个 20 秒。

问题是:

  1. 它仍然生成超过 15 个文件,从不删除旧文件。而index.m3u8文件内容不断更新,只列出了15个ts

  2. 当我重新启动命令时,index.m3u8 开始时只有 1 个文件,而不是更新它的列表。

几件事:

1) -hls_flags delete_segments 出现在输出文件名之后,这里是播放列表。所以它没有应用。如果您指定了一个,它将应用于下一个输出。移到m3u8名称前

2) 由于你是复制视频,所以-g没有效果。也是重复的。两者都删除。

3) 如果您使用 hls_wrap,请将其设置为 15 并删除 hls_flag。如果要使用该标志,请删除 hls_wrap。由于 delete_segment 的工作方式,旧文件将在“一段时间后被删除,该时间等于片段的持续时间加上播放列表的持续时间。”。因此,您最终会得到至少 2 x list_size 个细分。

你应该设置 -hls_list_size 为 0(0 是最大值)