我可以捕获一系列根据时间戳命名的图像吗

我可以捕获一系列根据时间戳命名的图像吗

我使用以下命令每 15 秒成功捕获一次屏幕截图,但我需要将图像与屏幕截图的来源视频位置关联起来。

%d 给了我一个整数,但是是否有类似的变量、过滤器或其他东西来在输出文件名中包含或以某种方式捕获图像的时间戳?

c:\ffmpeg\bin>ffmpeg -i c:\files\video.mp4 -vf fps=1/15 c:\images\image_%d.png";

当前输出为:

c:\images\image1.png
c:\images\image2.png
c:\images\image3.png
...
c:\images\image999.png

期望输出是某物喜欢:

c:\images\image_00-00-00.png    // Capture at start of video
c:\images\image_00-00-15.png    // Capture at 00:00:15
c:\images\image_00-00-30.png    // Capture at 00:00:30
c:\images\image_00-00-45.png    // Capture at 00:00:45
c:\images\image_00-01-00.png    // Capture at 00:01:00
...
c:\images\image_01-25-15.png    // Last capture

答案1

正如一些人所写,可能没有ffmpeg命令选项可以做你想做的事情。在 Linux 机器上,我建议你使用以下脚本

#!/bin/bash
interval=15 # interval between images in seconds

for ((i=0; i<$1; ++i)); do
timestamp=$(date -d @$((-3600+${i}*${interval})) +%H-%M-%S)
mv image${i}.png image_${timestamp}.png
done

exit 0

您可以在包含图像的目录中将其调用为

$ script_name NNN

其中NNN是图像的总数(我假设您从 0 而不是 1 开始编号,这并不难)。

正如您所看到的,我依赖于 linux 命令date,它能够将秒转换为小时。

由于您似乎是在 Windows 机器上,因此有几个选项,您可以使用该脚本。

  1. 将其重写为 Windows 批处理文件。有一个主题在这里,讨论如何date在Windows上使用类似的命令。

  2. 安装赛格威并从 cygwin 命令行运行上述脚本

  3. 使用独立bash 命令行用于运行上述脚本。

相关内容