将单个图像的文件名刻录到 FFmpeg 输出视频中

Jps*_*psy 8 ffmpeg timelapse

我正在使用 FFmpeg 读取一系列单个图像并将它们作为视频输出。
结果是每隔 1 分钟对网站的屏幕截图进行延时拍摄。

现在我想使用 drawtext 命令将每个图像的原始捕获时间刻录到生成的视频中。捕获时间在每个图像的文件名中可用。但是我没有找到一些选项让 drawtext 访问输入图像的文件名。

另一种方法是从 drawtext 中访问每个图像的创建日期(我也找不到办法做到这一点)。但我肯定更喜欢访问文件名,因为这会给我更多的选项来格式化文本。

有没有办法做到这一点?
如果任何提议的解决方案也适用于 Windows,那就太好了。

小智 5

看起来自上一个答案以来,ffmpeg 已经获得了使用 image2 解码器中的元数据自行执行此操作的能力:

ffmpeg \
    -f image2 \
    -pattern_type glob \
    -export_path_metadata 1 \
    -i '*' \
    -vf "drawtext=text='%{metadata\:lavf.image2dec.source_basename\:NA}'" \
    -y ../output.mkv
Run Code Online (Sandbox Code Playgroud)

文件名不需要任何扩展名,ffmpeg 无论如何都会检测图像格式。因此可以根据需要重命名文件。由于输入是“*”,因此输出将发送到父目录,以防止混淆。


Znu*_*uff 3

旧版本的 ffmpeg 无法在一行中完成此操作,因为ffmpeg的 drawtext 过滤器不是那么先进。

您需要使用一些脚本提前预处理图像。

就像一个简单的 bash 脚本:

for i in *.png; do 
    time=$(echo $i | cut -d . -f 1)
    ffmpeg -i $i -vf "drawtext=text=$time" mod-$time.png
done
Run Code Online (Sandbox Code Playgroud)

然后您可以使用 mod*.png 文件来创建视频。