我有一个巨大的需要增加音量的 mp4 视频文件数量。我需要一种方法来对指定基目录(以及子目录)中的所有文件执行 ffmpeg 音频过滤器。我的问题是我在 Windows 计算机上工作,并且我不了解它的 shell 语法。
我想做与此 Bash 脚本等效的操作:
TARGET_FILES=$(find /path/to/dir -type f -name *.mp4)
for f in $TARGET_FILES
do
ffmpeg -i $f -af 'volume=4.0' output.$f
done
今天下午我花了相当多的时间寻找解决方案,但我所需要的递归性质(使用 find 非常简单!)并不太清楚。
任何帮助将不胜感激!
答案1
简而言之,您的脚本将转换为命令提示符的单行代码:
for /r "C:\path\to\file" %f in (*.mp4) do ffmpeg -i %f -af 'volume=4.0' output.%f
解释:
for
命令循环遍历所有符合特定条件的文件,并在之后执行命令do
。/r
表示递归(即搜索子文件夹);%f
是类似于$f
脚本中的任意变量。其他部分应该是不言自明的。
答案2
堆栈溢出有一个类似的 PowerShell 脚本,用于使用 ffmpeg 并递归文件夹,但用于更改文件类型。
如果我错了,请纠正我(我不知道 ffmpeg),但是根据那篇文章和你的命令,在 PowerShell 中会给出如下结果:
$oldvids = Get-ChildItem *.mp4 -Recurse
foreach ($oldvid in $oldvids) {
.\ffmpeg.exe -i $oldvid.FullName -af 'volume=4.0' $oldvid
}
您需要在系统上安装 PowerShell,它是 Windows 8 的内置功能,但可以作为 Windows 以前版本的一部分下载。Windows 管理框架