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

FFmpeg拼接RTSP流片段后视频损坏问题求助

解决方案

一、调整捕获参数,让片段支持快速-c copy拼接

问题根源在于直接捕获的RTSP片段时间戳不连续,且未标准化容器参数。修改捕获命令,确保每个2分钟片段的时间戳从0开始,同时保留原生编码(避免转码损耗):

ffmpeg -rtsp_transport tcp -i <rtsp_url> -t 120 -c:v copy -c:a copy -reset_timestamps 1 -movflags +faststart part_%03d.mp4

参数说明:

  • -t 120:强制录制120秒(2分钟),避免RTSP断开时生成不完整片段
  • -c:v copy -c:a copy:直接复制音视频流,无转码,速度最快
  • -reset_timestamps 1:将当前片段的时间戳重置为0,消除跨片段的时间戳冲突
  • -movflags +faststart:把MP4的索引信息移到文件开头,便于后续拼接和播放

二、正确拼接标准化后的片段

  1. 生成片段列表文件parts_list.txt,格式必须为:
file 'part_001.mp4'
file 'part_002.mp4'
file 'part_003.mp4'
...
# 共30个片段,对应1小时
  1. 执行拼接命令,再次重置全局时间戳保证连续性:
ffmpeg -safe 0 -f concat -i parts_list.txt -c copy -reset_timestamps 1 final_1h.mp4

此命令全程无转码,CPU占用极低,且不会出现Non-monotonous DTS警告,播放完全流畅。

三、修复已捕获的非标准化片段

如果已经有之前录制的问题片段,先逐个修复时间戳,再拼接:

# 修复单个片段
ffmpeg -i old_part.mp4 -c copy -reset_timestamps 1 fixed_part.mp4

修复完成后,按上述第二步的方法拼接即可。

问题原因说明

  • 最初的捕获未重置时间戳,新RTSP流的时间戳可能与前一片段不连续(甚至回退),导致拼接后容器时间线混乱,出现Non-monotonous DTS警告和播放卡顿
  • exiftool看到的时长不一致,是容器因时间戳冲突无法正确计算总时长导致的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:31:17