所以我有一堆短视频想要转换成图像。过去,我使用 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.jpg
output_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.jpg
是ffmpeg
在给定文件上运行的命令。是通过对应当前正在处理的文件的名称而@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 批处理文件中使用百分号 () 时的标准要求。