使用ffmpeg

时间:2018-03-14 21:15:17

标签: ffmpeg

我正在从通过采集卡连接HDMI的4台摄像机捕捉视频。我正在使用ffmpeg将摄像机的视频输入保存为倍数jpeg文件(每台摄像机每秒30 jpeg)。

我希望能够使用捕获时间保存图像。目前我正在将这个命令用于一台摄像机:

ffmpeg -f video4linux2 -pixel_format yuv420p -timestamps abs -I / dev / video0 -c:a jpeg -t 60 -ts_from_file 2 camera0-%5d.jpeg

它使用名称camera0-00001.jpg,camera0-00002.jpg等保存我的文件。

然后我根据文件的修改时间用camera0-HH-mm-ss-(1-30).jpeg重命名我的文件。

所以最后我有4个文件具有相同的时间和相同的帧,如下所示: camera0-12-00-00-1.jpeg camera1-12-00-00-1.jpeg camera2-12-00-00-1.jpeg camera3-12-00-00-1.jpeg

我的问题是文件可能会偏移一到两帧。它们可能具有相同的名称,但有时一个或两个相机可能会显示不同的帧。

有没有办法确定捕获帧是否具有捕获的实际时间而不是创建文件的时间?

1 个答案:

答案 0 :(得分:2)

您可以使用mkvtimestamp_v2 muxer

ffmpeg -f video4linux2 -pixel_format yuv420p -timestamps abs -copyts -i /dev/video0 \
       -vf setpts=PTS-STARTPTS -vsync 0 -vframes 1800 camera0-%5d.jpeg \
       -c copy -vsync 0 -vframes 1800 -f mkvtimestamp_v2 timings.txt

timings.txt会有这样的输出

# timecode format v2
1521177189530
1521177189630
1521177189700
1521177189770
1521177189820
1521177189870
1521177189920
1521177189970
...

其中每个读数是Unix纪元时间,以毫秒为单位。

我已切换到输出帧数限制来停止进程,而不是-t 60。您可以使用-t 60作为第一个输出,因为我们正在重置时间戳,而不是第二个。如果这样做,请记住只使用文本文件中的前N个条目,其中N是生成的图像数。