Video 通过ffmpeg录制时观看多流视频文件

Video 通过ffmpeg录制时观看多流视频文件,video,ffmpeg,Video,Ffmpeg,我正在使用ffmpeg同时录制四个1080p视频流,我希望在录制时实时查看这些流。理想情况下,我希望使用一些方便的Linux数据共享方法(如ssh/sshfs/…)从单独的机器上查看它们,但这是一个很好的选择。有没有切实可行的方法来实现这一点 我当前使用的ffmpeg录制命令如下: ffmpeg \ -f v4l2 -i $cam0 \ -f v4l2 -i $cam1 \ -f v4l2 -i $cam2 \ -f v4l2 -i $cam3 \ -f matroska \

我正在使用ffmpeg同时录制四个1080p视频流,我希望在录制时实时查看这些流。理想情况下,我希望使用一些方便的Linux数据共享方法(如ssh/sshfs/…)从单独的机器上查看它们,但这是一个很好的选择。有没有切实可行的方法来实现这一点

我当前使用的ffmpeg录制命令如下:

ffmpeg \
  -f v4l2 -i $cam0 \
  -f v4l2 -i $cam1 \
  -f v4l2 -i $cam2 \
  -f v4l2 -i $cam3 \
  -f matroska \
  -map 0 \
  -map 1 \
  -map 2 \
  -map 3 \
  -c copy \
  $output.mkv
如果我可以使用像
ffplay
vlc
这样的命令来播放一个或多个视频流,总是在接近流的结尾处进行跟踪,并在数据可用时播放更多视频,那么我的问题就会解决。但我还没有找到这样的选择


另一种选择可能是让录制ffmpeg过程也将四个1080p视频平铺到一个4K网格中,并通过管道将其传输到ffplay。然后我至少可以在录音的同一台机器上预览。不过,我还没有找到正确的ffmpeg命令来进行平铺,希望能举个例子。

这可以通过TS容器输出来完成

ffmpeg \
  -f v4l2 -i $cam0 \
  -f v4l2 -i $cam1 \
  -f v4l2 -i $cam2 \
  -f v4l2 -i $cam3 \
  -f mpegts \
  -map 0 \
  -map 1 \
  -map 2 \
  -map 3 \
  -c copy \
  $output.ts
以及进行监测,

ffmpeg -sseof -3 -i $output.ts -map 0:v:0 -f sdl2 -
这将根据ffmpeg解析文件时记录的持续时间,尝试从文件末尾开始搜索3秒,并显示第一个流。由于ffmpeg等待关键帧,因此在播放之前需要一些延迟


要组合所有四个流,您需要添加堆栈过滤器,如xstack。

这可以通过TS容器输出完成

ffmpeg \
  -f v4l2 -i $cam0 \
  -f v4l2 -i $cam1 \
  -f v4l2 -i $cam2 \
  -f v4l2 -i $cam3 \
  -f mpegts \
  -map 0 \
  -map 1 \
  -map 2 \
  -map 3 \
  -c copy \
  $output.ts
以及进行监测,

ffmpeg -sseof -3 -i $output.ts -map 0:v:0 -f sdl2 -
这将根据ffmpeg解析文件时记录的持续时间,尝试从文件末尾开始搜索3秒,并显示第一个流。由于ffmpeg等待关键帧,因此在播放之前需要一些延迟


要组合所有四个流,您需要添加堆栈过滤器,如xstack。

不使用MKV输出。那么使用不同的输出如何?如果有帮助的话,我甚至愿意运行多个独立的ffmpeg进程。不使用MKV输出。那么使用不同的输出如何?如果有帮助的话,我甚至愿意运行多个独立的ffmpeg进程。谢谢。我对反馈反应迟钝,因为我正努力让它发挥作用。第一个ffmpeg sdl输出不会播放我的视频,我用“-pix_fmt yuv420p”修复了这个问题,现在的问题是播放速度太快(>3x),很快就会到达文件末尾并出错。因此,我试图强制sdl2播放以60fps的速度运行,就像输入(USB视频捕获卡)一样。谢谢。我对反馈反应迟钝,因为我正努力让它发挥作用。第一个ffmpeg sdl输出不会播放我的视频,我用“-pix_fmt yuv420p”修复了这个问题,现在的问题是播放速度太快(>3x),很快就会到达文件末尾并出错。因此,我试图强制sdl2播放以60fps的速度运行,就像输入(USB视频捕获卡)一样