我正试图使用rstp流和它们检索摄像机每帧的时间戳。为了进行记录,我使用以下命令行,它是工作的:
ffmpeg
-correct_ts_overflow 0
-probesize 1G
-analyzeduration 1G
-i rtsp://user:password@ip:port
-vcodec copy
-bsf:v h264_mp4toannexb
-bufsize 10M
-acodec copy
-f ssegment
-segment_list_flags live
-segment_atclocktime 1
-reset_timestamps 1
-write_empty_segments 1
-segment_time 15
-segment_list C:\Video\Delivery\ffmpeg\list.video
-segment_list_type csv
-strftime 1 "C:\Video\Delivery\ffmpeg\%%Y%%m%%d_%%H-%%M-%%S.ts"对于某些实用工具,我希望能够在接收到帧时检索机器的时间戳,因此通过搜索位,我在'-mkvtimestamp_v2‘上找到了不同的帖子。就像下面这样,用相机单独尝试一下:
ffmpeg
-copyts ^
-correct_ts_overflow 0 ^
-probesize 1G ^
-analyzeduration 1G ^
-i rtsp://user:password@ip:port
-c copy
-pix_fmt yuv420p
-flush_packets 1
-vframes 10
-reset_timestamps 1
-timestamp now
-copyts
-f mkvtimestamp_v2 timestamp.txt
-vsync 0它工作得很完美。
但是,从我尝试用以下命令同时记录和检索时间戳的那一刻起:
ffmpeg
-use_wallclock_as_timestamps 1
-correct_ts_overflow 0
-probesize 1G
-analyzeduration 1G
-i rtsp://user:password@ip:port
-vcodec copy
-bsf:v h264_mp4toannexb
-bufsize 10M
-acodec copy
-f ssegment
-segment_list_flags live
-segment_atclocktime 1
-reset_timestamps 1
-write_empty_segments 1
-segment_time 15
-segment_list C:\Video\Delivery\ffmpeg\list.video
-segment_list_type csv
-strftime 1 "C:\Video\Delivery\ffmpeg\%%Y%%m%%d_%%H-%%M-%%S.ts"
-copyts
-vcodec copy
-flush_packets 1
-f mkvtimestamp_v2 log.txt
-vsync 0我得到了很多:Non-monotonous DTS in output stream 0:0警告。在记录的时间戳和实时时间戳之间,我平均也有一分钟的延迟。录制的第一个视频在这样的视频播放器上有一个窃听的计时器:这里
我试过把命令按不同的顺序排列,但我没有得到任何结论.
所以,如果你有任何想法,这将是一个很大的帮助!
我在Windows 10上工作,我使用ffmpeg-3.4.1。
真诚地,
杰伦
发布于 2022-06-12 00:14:35
我通过将第二个输出连接到另一个ffmpeg实例来解决这个问题。我认为这是因为第二个ffmpeg将放弃-use_wallclock_as_timestamps 1添加的时间戳偏移量,并将偏移量重置为0。
ffmpeg -use_wallclock_as_timestamps 1 -i rtsp://@ip:port -c copy -copyts -y -f mkvtimestamp_v2 timestamps.txt -vsync 0 -c copy -f mpegts - | ffmpeg -f mpegts -i - -c copy -f segment output-segment-%d.mp4然而,这个解决方案的另一个问题是,如果RTSP删除了一些帧,那么mkvtimestamp_v2文件将跳过一些时间值,因此很难将这些段与timestamps.txt文件关联起来。
因此,我解决了这个问题,我将挂钟时间戳嵌入到各个片段中。
ffmpeg -use_wallclock_as_timestamps 1 -i rtsp://@ip:port -c copy -copyts -vsync passthrough -f segment -segment_time 10 out%d.mp4然后,我可以运行的每一段后,了解他们的实际开始时间的不同探针。(相对于系统时钟)。
https://stackoverflow.com/questions/72365169
复制相似问题