You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FFmpeg同步文件时间戳:多HDMI相机采集存图时间标记需求

解决方案:多相机HDMI采集并按采集时间命名JPEG文件

首先,先修正你当前单相机命令里的几个小问题,再扩展到4台相机的并行采集方案,同时实现按采集时间命名文件的需求。

一、单相机的正确命令(按时间戳命名)

你的原命令存在几个需要调整的细节:

  • -I 应该是小写的 -i(FFmpeg的输入参数是小写)
  • -c:a jpeg 是错误的,我们处理的是视频流,应该指定视频编码器为MJPEG,或者直接用image2格式输出图片
  • 要稳定实现每秒30张图,需要明确设置输入/输出帧率 -r 30
  • 要按采集时间命名,FFmpeg支持通过strftime格式生成文件名,需启用-strftime 1参数

修正后的单相机命令如下:

ffmpeg -f video4linux2 -pixel_format yuv420p -r 30 -i /dev/video0 -f image2 -strftime 1 -r 30 camera0-%Y%m%d-%H%M%S-%3N.jpeg -t 60

参数说明:

  • -r 30:强制输入和输出帧率为30fps,确保每秒生成30张图片
  • -f image2:明确使用image2格式输出图片序列
  • -strftime 1:开启时间戳命名功能
  • camera0-%Y%m%d-%H%M%S-%3N.jpeg:文件名格式,%Y%m%d是年月日,%H%M%S是时分秒,%3N是毫秒(避免同一秒内的30张图重名)
  • -t 60:指定采集时长为60秒

二、4台相机并行采集的实现

要同时采集4台相机,推荐两种可靠的方法:

方法1:Shell脚本并行启动多个FFmpeg进程

这是最稳定的方案,每个相机独立运行FFmpeg进程,互不干扰。创建一个名为capture_all.sh的脚本:

#!/bin/bash

# 后台启动相机0的采集任务
ffmpeg -f video4linux2 -pixel_format yuv420p -r 30 -i /dev/video0 -f image2 -strftime 1 -r 30 camera0-%Y%m%d-%H%M%S-%3N.jpeg -t 60 &

# 后台启动相机1的采集任务
ffmpeg -f video4linux2 -pixel_format yuv420p -r 30 -i /dev/video1 -f image2 -strftime 1 -r 30 camera1-%Y%m%d-%H%M%S-%3N.jpeg -t 60 &

# 后台启动相机2的采集任务
ffmpeg -f video4linux2 -pixel_format yuv420p -r 30 -i /dev/video2 -f image2 -strftime 1 -r 30 camera2-%Y%m%d-%H%M%S-%3N.jpeg -t 60 &

# 后台启动相机3的采集任务
ffmpeg -f video4linux2 -pixel_format yuv420p -r 30 -i /dev/video3 -f image2 -strftime 1 -r 30 camera3-%Y%m%d-%H%M%S-%3N.jpeg -t 60 &

# 等待所有后台采集任务完成
wait

给脚本添加执行权限:

chmod +x capture_all.sh

运行脚本即可同时采集4台相机:

./capture_all.sh

方法2:FFmpeg多输入单进程采集(不推荐)

虽然FFmpeg支持同时处理多个输入,但实时采集场景下,单进程调度多相机流容易出现同步问题,且某一个相机流异常会影响所有任务。如果一定要尝试,命令如下:

ffmpeg \
-f video4linux2 -pixel_format yuv420p -r 30 -i /dev/video0 \
-f video4linux2 -pixel_format yuv420p -r 30 -i /dev/video1 \
-f video4linux2 -pixel_format yuv420p -r 30 -i /dev/video2 \
-f video4linux2 -pixel_format yuv420p -r 30 -i /dev/video3 \
-map 0:v -f image2 -strftime 1 -r 30 camera0-%Y%m%d-%H%M%S-%3N.jpeg \
-map 1:v -f image2 -strftime 1 -r 30 camera1-%Y%m%d-%H%M%S-%3N.jpeg \
-map 2:v -f image2 -strftime 1 -r 30 camera2-%Y%m%d-%H%M%S-%3N.jpeg \
-map 3:v -f image2 -strftime 1 -r 30 camera3-%Y%m%d-%H%M%S-%3N.jpeg \
-t 60

三、额外注意事项

  • 设备权限:确保当前用户对/dev/video0至/dev/video3有读写权限,可将用户加入video组:sudo usermod -aG video $USER,重新登录后生效。
  • 性能优化:若出现丢帧,可尝试降低采集分辨率(添加-s 1280x720参数),或检查采集卡带宽是否支持4台HDMI相机同时传输。
  • 时间同步:如需4台相机时间戳严格对齐,需确保系统时间准确,或选用支持硬件同步的采集卡。

内容的提问来源于stack exchange,提问作者Olivier Rivard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:04:47