使用ffmpeg批量提取缩略图

使用ffmpeg批量提取缩略图

我需要使用以下 bat 代码从数百个 .mpg 文件中批量提取缩略图,这个代码非常有效,但唯一的缺点是输出的 png 文件名为“filename.mp4.png”。所以我的问题是如何重写代码,以便输出的 png 文件中没有 .mp4?

for %%A IN (*.mp4) DO ffmpeg -i "%%A" -vf "select=gte(n\,300)" -vframes 1 "%%A.png"

答案1

有可能找到 [1]%%~n返回没有扩展名的文件名。

尝试一下是否有效

for %%A IN (*.mp4) DO ffmpeg -i "%%A" -vf "select=gte(n\,300)" -vframes 1 "%%~nA.png"

注意:你可以在互联网上阅读有关扩展规则的许多文档,从该答案开始[1]和这本旧nt指南[2]

答案2

您正在寻找的是参数扩展,具体来说,是子字符串删除。试试这个:

for file in *.mp4; do echo ffmpeg -i "$file" -vf "select=gte(n\,300)" -vframes 1 "${file%.mp4}.png"; done

如果您有一个变量$file,您可以用${file%.mp4}它来输出内容,并.mp4删除最后的部分。

以下是一篇包含更多信息的文章:http://wiki.bash-hackers.org/syntax/pe

编辑:非常抱歉,但我以为标签上写的是“BASH”而不是“batch”。我对这个奇怪的语法感到疑惑。不过,我暂时先不谈这个。如果没有人知道如何在 Windows 上做到这一点,那么用 BASH 就很简单了,所以如果没有更好的选择,也许你可以去某个地方找一个 BASH shell。

相关内容