【发布时间】:2012-12-09 08:42:34
【问题描述】:
我创建了一个 bash 脚本,用于处理文件夹及其子文件夹中的视频:
find . -type f -name '*.mkv' | while read file;
do
ffmpeg -i $file ...
done
问题:不是等待 ffmpeg 完成的 while 循环,而是继续遍历循环。最终结果是,文件没有得到处理。我需要一种方法让当前的 while 循环迭代等到 ffmpeg 完成后再继续下一个。或者另一种方式来排队这些项目。
编辑:所以迭代一组文件时的解决方案是将 -nostdin 参数传递给 ffmpeg。希望这对可能遇到类似问题的其他人有所帮助。
还有文件 --> $file 是复制/粘贴错字。
【问题讨论】:
-
也许在
ffmpeg命令末尾使用&将进程粘贴在后台? -
你所拥有的应该等待 ffmpeg 完成。您确定您没有收到来自 ffmpeg 的错误(例如无效参数)吗?
-
您拥有的循环应该等到每个内部命令运行,除非您在行尾放置了
&。您收到任何错误消息吗?尝试在内部命令前加上“echo”并在其后添加 sleep 1,以验证循环本身没有问题。例如,在您提供的命令行中,您使用的是file而不是$file -
将
-nostdin选项添加到ffmpeg有帮助吗?它可能正在读取 while 循环的所有其余输入。 -
谢谢巴马尔。成功了!
标签: bash ffmpeg while-loop