使用 FFMPEG 保留时间信息的 Mjpeg 记录

Muh*_*hid 5 video ffmpeg video-streaming mjpeg

我正在从 IP 摄像机录制 MJPEG 视频并将其保存到文件中,但问题是该文件的持续时间比实际录制时间小得多。它大约 9 秒的视频用于 2 分钟的录制。我尝试按顺序执行以下命令

ffmpeg -f mjpeg -r 8 -i http://c-cam.uchicago.edu/mjpg/video.mjpg -vcodec mpeg4 -b 1000000 -r 8 video_file.avi 
Run Code Online (Sandbox Code Playgroud)

然后我省略了大部分标志并像这样尝试

ffmpeg -f mjpeg -i http://c-cam.uchicago.edu/mjpg/video.mjpg video_file.avi
Run Code Online (Sandbox Code Playgroud)

但问题是录制文件的持续时间为 9 秒,而实际录制时间约为 2 分钟。我终于尝试了应该插入时间戳的setpts过滤器。命令如下

ffmpeg -f mjpeg -i http://c-cam.uchicago.edu/mjpg/video.mjpg -vf "setpts=1*PTS" video_file.avi
Run Code Online (Sandbox Code Playgroud)

但结果还是一样。录制时间远远超过视频时长。

Jan*_*ann 8

我知道这是一个老问题,但是,这对我来说是 ffmpeg 的一个选项: -use_wallclock_as_timestamps 1

  • 这迫使 FFMPEG(真正的黑客)使用录制系统的时间戳,而不是尝试根据它检测到的 fps 数量来计算电影的时间。例如,众所周知,FPS 检测是不准确的——正如 FFMPEG 在给出此错误时自由承认的那样:`从比特率估计持续时间,这可能不准确`。这也使 -t 标志(持续时间)也是实时的,而不是依赖于 fps 计算。 (3认同)