使用 FFmpeg 从目录中的所有视频中提取帧

使用 FFmpeg 从目录中的所有视频中提取帧

我正在尝试使用 FFmpeg 从目录中的每个文件每秒提取一帧。

我将此命令用于单个文件,但我不知道如何输入目录:

ffmpeg -i "C:\input\clip1.mp4" -vf fps=1 -qscale:v 2 "C:\output\clip1\clip1A"%d.jpg

理想情况下,我希望将帧保存到它们自己的文件夹中,如下所示,但我思考我可以自己解决这个问题。如果它们都输出到同一个文件夹,并且具有相同的前缀和连续编号,那就没问题了。

C:\output\clip1\clip1-001.jpgclip1-002.jpg

C:\output\clip2\clip2-001.jpgclip2-002.jpg

我已经尝试了好几个小时,但还是完全迷茫了。任何帮助我都会非常感激。

答案1

完成了!此代码会将帧输出到与视频同名的文件夹中。帧将以视频名称作为前缀,并以从 001 开始的连续数字作为后缀。因此,对于我的文件,它会输出“/clip1/clip1-001.jpg”等。

万一您像我一样,不知道自己在做什么,请将以下代码粘贴到记事本中,保存为“extractframesorwhatever.bat”,然后从剪辑所在的目录中运行。

for %%F in (*.mp4) do (
If not Exist "%%~nF" MkDir "%%~nF"
ffmpeg -i %%F -r 1 -qscale:v 2 %%~nF\%%~nF-%%3d.jpg
)

如果您想将文件夹输出到其他地方,请更改:

If not Exist "%%~nF" MkDir "%%~nF"

像这样:

If not Exist "C:\wherever\%%~nF" MkDir "C:\wherever\%%~nF"

如果这样做,您还需要更改输出(在我的示例中):

%%~nF\%%~nF-%%3d.jpg

C:\wherever\%%~nF\%%~nF-%%3d.jpg

或者,如果您希望将所有框架放在一个文件夹中。将输出中的第一个 %%~nF 替换为您喜欢的目录。使用我的示例,它将从 C:\wherever\%%~nF\%%~nF-%%3d.jpg 转到 C:\wherever\frames\%%~nF-%%3d.jpg。您还可能需要编辑第二行以指向新位置并阻止它创建一堆不必要的目录,或者完全删除第二行。如果删除第二行,您必须先自己创建该“frames”文件夹。

编辑 - 您可能需要先删除文件名中的所有空格,然后才能处理它们。“批量重命名实用程序”可以为您节省大量时间。

答案2

我喜欢这种提取帧的方法,它非常方便。但是当我使用您提供的代码时:

for %%F in (*.mp4) do (
If not Exist "%%~nF" MkDir "%%~nF"
ffmpeg -i %%F -r 1 -qscale:v 2 %%~nF\%%~nF-%%3d.jpg
)

我得到两个输出文件夹:

其中一个文件名(我希望我的图像存放在此处)和一个测试文件夹(我的图像存放在此处)。

我知道代码应该是这样工作的,但也许过去四年的变化已经改变了代码现在的工作方式。但总的来说,它并不是太不方便。

我还要补充一点,对于那些想要制作更高质量 GIF 的人,您只需将 .jpg 更改为 .png 即可。

此外,你可以使用任何视频格式(或更多,至少,因为我还没有测试过这么多)通过更改(.mp4)转换为(.mkv),我知道它可以工作。

我认为所有其他视频格式也可以使用,例如(.avi), (.mpeg),(.ts), (.flv)等 -尽管这还没有经过测试。

但是由于我与 OP 一样不理解该代码,因此只能复制/粘贴我在网上找到的内容并对其进行一些尝试,因此只需准备好 .bat 文件即可。

我只是想知道如何修复正在创建的“测试”文件夹,并让屏幕截图进入它已经创建的文件名文件夹。

为了展示如何修改代码以适应其他视频格式,我将提供几个示例:

我知道第一个示例是有效的,它针对的是 .mkv 文件而不是 .mp4,将屏幕截图转换为 .png。

for %%F in (*.mkv) do (
If not Exist "%%~nF" MkDir "%%~nF"
ffmpeg -i %%F -r 1 -qscale:v 2 %%~nF\%%~nF-%%3d.png
)

最后一个例子应该适用于将截图转换成.png 格式的.ts 文件。

for %%F in (*.ts) do (
If not Exist "%%~nF" MkDir "%%~nF"
ffmpeg -i %%F -r 1 -qscale:v 2 %%~nF\%%~nF-%%3d.png
)

相关内容