使用 ffmpeg .bat 文件将多个视频的每一帧提取到图像中

使用 ffmpeg .bat 文件将多个视频的每一帧提取到图像中

所以我有一堆短视频想要转换成图像。过去,我使用 ffmpeg 和 .bat 文件将多个视频从一种文件类型转换为另一种文件类型,使用两个包含以下内容的 .bat 文件:

for %%F in (*.mkv) do remux_settings_.bat "%%F"

ffmpeg.exe -i %~d1%~p1%~n1.mkv -c:v copy -c:a copy %~d1%~p1%~n1.mp4

我使用 ffmpeg 和同一文件夹中的视频文件运行后者 (remux_settings_.bat) 文件,ffmpeg 便会执行其工作。老实说,我对使用 ffmpeg 了解不多——那些文件是别人给我的——所以我能得到一个具体示例,说明如何采用同样的方法将视频的每一帧转换为图像,例如将 .mkv 转换为 .jpg 吗?还有其他类似的问题,但我无法将这些答案中的信息翻译成我的情况。

答案1

我有一堆短视频想要转换成图像。

正如@llogan 在评论中提到的,ffmpeg从输入文件中提取图像的基本命令是:

ffmpeg -i input output_%04d.jpg

在哪里:

  • input输入文件(通常是.gif或视频文件)。

  • %04d表示输出文件的零填充/编号序列(例如output_0001.jpg,,,等等)output_0002.jpgoutput_0003.jpg

因此,对于.mkv文件来说,具体来说,这将是例如:

ffmpeg -i input.mkv output_%04d.jpg

多个视频文件

要对多个视频文件执行此操作,您可以使用多种方法,甚至可以使用 Windows 批处理文件。但是,最简单的解决方案可能是使用 Windows福尔菲斯实用程序,如下所示:

forfiles /s /m *.mkv /c "cmd /c ffmpeg -i "@FILE" output_%04d.jpg"

本质上,forfiles它允许您以重复的方式对单个文件运行单行命令。在本例中:

  • /s表示递归子目录(因此子文件夹中的文件将受到影响)。

  • /m是一个文件掩码(在本例中,表示所有具有.mkv扩展名的文件)。

  • /c需要运行的命令是:

    • cmd /c打开一个新的cmd(命令窗口)实例。这有助于克服 forfiles 后续版本中的错误

    • ffmpeg -i "@FILE" output_%%04d.jpgffmpeg在给定文件上运行的命令。是通过对应当前正在处理的文件的名称而@FILE生成的自动变量。forfiles

    • 外面的双引号 ( "") 可以避免出现指定两次forfiles的错误/c,而里面的双引号 ( "")则@FILE可以防止文件名本身包含空格。

forfiles请注意,您可以使用该选项指定您想要处理的文件的路径/p(假设forfiles没有在您想要影响的根目录中运行)。

批处理文件

请注意,如果您想将给定的命令放在批处理文件中,则需要将命令中使用的forfiles百分号 ( ) 加倍:%ffmpeg

例如 video_2_images.bat

forfiles /s /m *.mkv /c "cmd /c ffmpeg -i "@FILE" output_%%04d.jpg"

%这是在 Windows 批处理文件中使用百分号 () 时的标准要求。

相关内容