首页 > 解决方案 > 在 Linux 上的网络摄像头视频捕获期间获取静止帧

问题描述

我想从网络摄像头捕获视频(保存到文件),同时偶尔获取最新的静止帧(来自 python 代码)。有没有办法在 Linux 上做到这一点?

我试过的:

# Capture Video:
ffmpeg -f v4l2 -framerate 30 -video_size 1024x576 -i /dev/video0 myvideo.mp4

...

# In another terminal, try to capture the latest still frame:
ffmpeg -sseof -3 -i myvideo.mp4 -update 1 -q:v 1 current_frame.jpg

但是,我从最后一个命令中得到了不同的响应,例如

Cannot use -sseof, duration of myvideo.mp4 not known

[matroska,webm @ 0x55e1aae26900] Duplicate element
    Last message repeated 2 times

附加说明/限制:

  1. 必须可以控制从 python 的解决方案(例如ffmpeg通过调用subprocess.Popen)到(a)开始录制,(b)在任意点获取帧,(c)停止录制。
  2. 帧时间不必精确。最后几秒钟内的一帧很好。
  3. 任何容器格式都可以(mkv、mp4 等)
  4. 其他程序都很好,不仅仅是ffmpeg

标签: pythonlinuxvideoffmpeg

解决方案


FFmpeg 可以有多个输出。结合你的命令:

ffmpeg -f v4l2 -framerate 30 -video_size 1024x576 -i /dev/video0 myvideo.mp4 -r 1 -update 1 current_frame.jpg

推荐阅读