使用 ffmpeg 修复网络摄像机上不正确的时间戳的最佳方法是什么?
以 1fps 的速度在 h264 模式下运行相机正确地生成duration=1.000
:
ffmpeg -hide_banner -rtsp_transport tcp -i rtsp://xxx -dump -
an -f null -
Input #0, rtsp, from 'rtsp://xxx':
Metadata:
title : Media Presentation
Duration: N/A, start: 6.040000, bitrate: N/A
Stream #0:0: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 1280x720, 1 fps, 1 tbr, 90k tbn, 2 tbc
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
Press [q] to stop, [?] for help
stream #0:
keyframe=1
duration=1.000
dts=6.040 pts=6.040
size=86223
stream #0:
keyframe=0
duration=1.000
dts=1.040 pts=1.040
size=169092
...
运行相机时,h265编码器错误地产生一个duration=0.500
:
ffmpeg -hide_banner -rtsp_transport tcp -i rtsp://xxx -dump -an -
f null -
[hevc @ 0x55f93da71e40] VPS 0 does not exist
Last message repeated 1 times
Input #0, rtsp, from 'rtsp://xxx':
Metadata:
title : Media Presentation
Duration: N/A, start: 1.040000, bitrate: N/A
Stream #0:0: Video: hevc (Main), yuv420p(tv), 1280x720, 2 fps, 1 tbr, 90k tbn, 2 tbc
[hevc @ 0x55f93da84380] VPS 0 does not exist
Stream mapping:
Stream #0:0 -> #0:0 (hevc (native) -> wrapped_avframe (native))
Press [q] to stop, [?] for help
stream #0:
keyframe=1
duration=0.500
dts=N/A pts=N/A
size=81210
stream #0:
keyframe=0
duration=0.500
dts=1.040 pts=1.040
size=142218
...
我正在使用以下方法将 feed 转储到磁盘。有没有办法duration=0.500
使用 ffmpeg 覆盖而不重新编码?
我尝试设置-r
标志来调整帧速率,但视频仍然以双倍速度播放:
ffmpeg -use_wallclock_as_timestamps -r 1 -rtsp_transport tcp -i rtsp://xx -an -vcodec copy -f hvec -r 1 /tmp/out.ts -y
那么,在将 RTSP 源写入磁盘之前,是否有一个好方法可以更改其中的显示持续时间(DTS 和 PTS 值看起来是正确的)?我似乎遗漏了一些东西。
答案1
使用
ffmpeg -rtsp_transport tcp -i rtsp://xx -an -vcodec copy -bsf:v hevc_metadata=tick_rate=1 /tmp/out.hevc -y