【问题标题】:Save RTSP stream continuously into multi mp4 files with specific length (10 minutes) in ffmpeg在ffmpeg中将RTSP流连续保存到具有特定长度(10分钟)的多个mp4文件中
【发布时间】:2026-01-08 18:10:01
【问题描述】:

我正在使用 ffmpeg 将来自摄像机的 RTSP 流录制到 .mp4 文件中,并且我想将其滚动到每个视频长达 10 分钟的多个文件中。

目前我对此有一个解决方案:我正在设置时间长度“00:10:00”,完成后我将使用新进程重新启动以下命令。 示例:

ffmpeg -rtsp_transport tcp -i <rtsp_url> -acodec copy -vcodec  copy  -t 00:10:00 D:\video_test.mp4

但是这个解决方案会使相机变得不稳定,RTSP 流通常会因为这个错误而损坏:

rtsp://10.96.41.14:9024/user=xxxx_password=xxx_channel=1_stream=0.sdp?real_stream: Operation not permitted

我想找到更好的解决方案来持续保持与 RTSP 流的连接(而不是使用-t 标志创建新进程)。

有没有人有更好的主意来保持连续录制流? 谢谢

【问题讨论】:

    标签: ffmpeg stream rtsp


    【解决方案1】:

    FFmpeg 有一个 segment 复用器,您可以使用它。

    基本形式是

    ffmpeg -rtsp_transport tcp -i <rtsp_url> -c copy -f segment -segment_time 600 stream_piece_%d.mp4
    

    请注意,段复用器在关键帧处分裂,因此获得的段持续时间可能会有小的偏差。

    【讨论】:

    • 感谢@Gyan,我尝试使用此片段,您认为它是否是全天候 24/7 全天候录制视频流的好方法(在关键帧处分割)。
    • 我知道有人用它来连续分割卫星馈送。
    【解决方案2】:

    我想将@Gyan 的答案扩展为我正在使用的解决方案。

    就我而言,我想将流分割成普通视频(可以播放),视频从每小时 0 分钟开始。所以我使用选项reset_timestampssegment_atclocktime

    下面是我完整的 ffmpeg 命令:

    ffmpeg -rtsp_transport tcp -i <rtsp_url> -f segment -strftime 1 \ 
        -segment_time 00:10:00 -segment_atclocktime 1 -segment_clocktime_offset 30 \
        -segment_format mp4 -an -vcodec copy -reset_timestamps 1 \ 
        record_%Y-%m-%d-%H.%M.%S.mp4
    

    【讨论】:

    • 我收到Unrecognized option 'segment_clocktime_offset'. Error splitting the argument list: Option not found
    • 也许你应该在这里查看 ffmpeg 版本或文档ffmpeg.org/ffmpeg-formats.html 搜索键是“segment_clocktime_offset”
    最近更新 更多