You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FFmpeg将MP4转HLS时生成时长一致的分片?

解决FFmpeg HLS分片时长不固定的问题

这是个很常见的坑——FFmpeg的-hls_time参数看似没生效,本质是因为它只能在关键帧位置切割分片。如果原视频的关键帧间隔和你设定的10秒不匹配,或者场景切换时自动插入了额外关键帧,就会导致分片时长波动。

要让中间分片严格保持10秒(首尾允许不同),你需要强制关键帧间隔对齐分片时长,同时禁用自动场景关键帧插入。试试这个调整后的命令:

ffmpeg -i ad1.mp4 -strict -2 -preset:v veryfast -profile:v baseline -level 3.0 -start_number 0 -hls_list_size 0 -hls_segment_filename 'sample-%06d.ts' -hls_time 10 -keyint_min 10 -g 250 -sc_threshold 0 -f hls sample.m3u8

关键参数详解:

  • -g 250:设置关键帧间隔为250帧。这里默认你的视频帧率是25fps(250÷25=10秒),刚好和-hls_time 10匹配。如果你的视频是30fps,就改成-g 300;60fps就用-g 600。不知道帧率的话,先运行ffmpeg -i ad1.mp4查看输出里的fps值即可。
  • -keyint_min 10:强制最小关键帧间隔为10秒,确保不会出现比10秒更短的关键帧,避免分片被提前切割。
  • -sc_threshold 0:禁用场景检测自动插入关键帧。默认情况下,FFmpeg会在场景切换时额外添加关键帧,这会打乱我们设定的10秒分片节奏,关掉它就能保证只有我们指定的关键帧位置才会触发分片切割。

这样处理后,除了开头和结尾的分片(因为视频总时长不一定是10秒的整数倍),中间的所有分片都会严格保持10秒时长。

内容的提问来源于stack exchange,提问作者Abhishek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:42:11