我需要使用以下 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
答案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。