FFMPEG通过rtsp下载高倍速录像,文件时长不正确,要怎么解决?

新手上路,请多包涵

高倍速ffmpeg命令:
ffmpeg.exe -rtsp_transport tcp -i "rtsp://admin:m1111111@172.11.1.82:554/cam/playback?channel=1&subtype=0&starttime=2023_07_06_14_26_00&endtime=2023_07_06_14_31_00&speed=16" -an -vcodec copy "D:\123/NVR3.mp4"
image.png
可见我要下载的是五分钟录像,但是文件用vlc播放后仅有一分钟多一点:

一倍速ffmpeg命令:
ffmpeg.exe -rtsp_transport tcp -i "rtsp://admin:m1111111@172.11.1.82:554/cam/playback?channel=1&subtype=0&starttime=2023_07_06_14_26_00&endtime=2023_07_06_14_31_00" -an -vcodec copy "D:\123/NVR3.mp4"

可见录像文件为正常五分钟:

高倍速下载时,ffmpeg有大量的如下报错:
[mp4 @ 000001cb5640a500] Non-monotonous DTS in output stream 0:0; previous: 6267751, current: 5275350; changing to 6267752. This may result in incorrect timestamps in the output file.

尝试过将NVR的音频编码关掉,关掉后高倍速下载的录像文件时长就是正常的五分钟了,但如果是音频帧时间戳的问题,理论上一倍速应该也是必现问题;

目前完全没有头绪进一步排查,求助各位大大提供思路,最好能有初步的解决思路,万分感谢!

新增排查进度: 将两份mp4文件对比,发现差异在mp4的moov头,异常的moov头中录像时长不正确;
但为何音频会影响到moov头目前还是很迷茫;

阅读 4k
1 个回答

1.用-vsync 2选项:


ffmpeg.exe -rtsp_transport tcp -i "rtsp://admin:m1111111@172.11.1.82:554/cam/playback?channel=1&subtype=0&starttime=2023_07_06_14_26_00&endtime=2023_07_06_14_31_00&speed=16" -an -vcodec copy -vsync 2 "D:\123/NVR3.mp4"

2.用-copyts选项。:

ffmpeg.exe -rtsp_transport tcp -i "rtsp://admin:m1111111@172.11.1.82:554/cam/playback?channel=1&subtype=0&starttime=2023_07_06_14_26_00&endtime=2023_07_06_14_31_00&speed=16" -an -vcodec copy -copy "D:\123/NVR3.mp4"

如果这两个方法都不能解决问题,你可能在FFmpeg处理流之前,先把RTSP流转换为其他格式(比如HLS),然后再用FFmpeg处理转换后的流。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进