我正在尝试将大量视频存档(位于子文件夹中)复制到并行文件夹结构,同时将视频从 mov 转换为 mp4(以及一些其他调整)。这是命令:
for f in Users/me/VIDEOARCHIVE/*/*.mov; do ffmpeg -i "$f" "Users/me/CONVERTED/${f%.mov}.mp4"; done
但是,输出文件显示“没有这样的文件或目录”。我知道这个网站上有很多类似的问题,但它们对我的情况都没有帮助。
我还尝试预先创建一个空文件夹结构,这样它只需要创建 .mp4 文件,但我仍然收到相同的错误。
如果事先已经创建了(空)文件夹结构,则此方法有效。但一旦缺少某个文件夹,就会出现“无此文件或目录”的错误提示。
是否有办法告诉它在需要时创建父文件夹,以便它可以将文件放入其中?
答案1
是否有办法告诉它在需要时创建父文件夹,以便它可以将文件放入其中?
ffmpeg?不。它不会自行创建文件夹。实际上,很少有程序会这样做。
一些建议:
- 您应该事先创建该文件夹。
- 您需要使用文件的基本名称,因为它
$f
已经包含完整的文件路径。 - 您应该对视频档案使用递归通配符 (
**/*
) 来遍历所有目录。
综合起来:
# enable recursive globbing
shopt -s globstar
# create the directory if necessary
dir="/Users/me/CONVERTED/"
mkdir -p "$dir"
# iterate over all files
for f in /Users/me/VIDEOARCHIVE/**/*.mov; do
# get the file's basename
fname="$(basename "$f")"
# run the command, replacing the file extension
ffmpeg -i "$f" "$dir/${fname%.mov}.mp4"
done