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

FFmpeg录制IP摄像头RTSP流时segment分段功能未按预期工作

FFmpeg录制IP摄像头RTSP流时segment分段功能未按预期工作

看起来你遇到的问题是FFmpeg的segment分段没有按照你设置的10分钟间隔来切割,反而生成了1分钟左右的小段,连最小分段时长都没生效。我来帮你分析下可能的原因和解决方案:

问题根源

最常见的原因是RTSP流本身的关键帧(GOP)间隔过短。FFmpeg的segment分段默认是在关键帧位置进行切割的——因为MP4这类容器格式需要关键帧来作为分段的起始点,否则无法正常播放。如果你的摄像头输出的流每1分钟就生成一个关键帧,那么哪怕你设置了-segment_time 600(10分钟),FFmpeg也只能在每个关键帧处分割,最终分段时长就和关键帧间隔一致。

解决方案

方案1:强制FFmpeg插入关键帧

修改你的命令,添加强制关键帧的参数,确保每10分钟生成一个关键帧,这样segment就能按照设定的时长切割。修改后的命令如下:

FFREPORT=file=$log_DIR/ffmpeg_recording.log \
ffmpeg -i "rtsp://$CAMERA_USERNAME:$CAMERA_PASSWORD@$IP:$PORT/stream1" \
-acodec aac -vcodec copy \
-force_key_frames "expr:gte(t,n_forced*600)" \
-f segment -segment_time 600 -min_seg_duration 300 -segment_atclocktime 1 -reset_timestamps 1 -segment_format mp4 \
-strftime 1 "$cap_DIR/record_%Y-%m-%d-%H.%M.%S.mp4" \
-report -y

这里的-force_key_frames "expr:gte(t,n_forced*600)"会让FFmpeg每600秒(10分钟)强制插入一个关键帧,保证分段能在指定的时间点完成。

方案2:调整摄像头的GOP间隔(推荐)

如果你的摄像头支持配置,直接在摄像头的管理后台把**关键帧间隔(GOP)**设置为10分钟对应的帧数:

  • 若摄像头帧率为25fps,GOP值设为 25 * 600 = 15000
  • 若帧率为30fps,GOP值设为 30 * 600 = 18000

这样原流的关键帧间隔就是10分钟,FFmpeg不需要额外处理就能按照设定的时长切割分段,同时还能避免强制插入关键帧带来的轻微性能损耗。

额外说明

  • 当使用-vcodec copy参数时,FFmpeg会直接复制原流的视频编码数据,不会修改原流的关键帧间隔,所以必须通过上述两种方式调整关键帧,才能让segment功能正常工作。
  • -min_seg_duration参数仅在流中断、异常等特殊场景下生效,正常播放时还是会遵循segment_time和关键帧位置来分割分段。

备注:内容来源于stack exchange,提问作者Sumit Dey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:23:15