ffmpeg 如何在不重新编码的情况下修复视频播放速度?

ffmpeg 如何在不重新编码的情况下修复视频播放速度?

使用 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

相关内容