我正在使用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
标志创建新进程)。
有人有更好的主意来保持连续流录制吗? 谢谢
答案 0 :(得分:0)
FFmpeg有一个segment混合器,您可以使用它。
基本形式为
ffmpeg -rtsp_transport tcp -i <rtsp_url> -c copy -f segment -segment_time 600 stream_piece_%d.mp4
请注意,分段多路复用器会在关键帧处分割,因此所获得的分段持续时间可能会有小的偏差。
答案 1 :(得分:0)
我想将@Gyan的答案扩展为我正在使用的解决方案。
就我而言,我想将流分成正常的视频(可以播放),并且视频从每小时的0分钟开始播放。所以我正在使用选项reset_timestamps
和segment_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