Bash while循环等待任务完成

时间:2012-12-21 19:01:50

标签: bash ffmpeg while-loop

我创建了一个bash脚本来处理文件夹中的视频及其子文件夹:

find . -type f -name '*.mkv' | while read file;
do
  ffmpeg -i $file ...
done

问题:代替while循环等待ffmpeg完成,它继续循环遍历循环。最终结果是,文件未得到处理。我需要一种方法让当前的while循环迭代等到ffmpeg完成后再继续下一次。或者是一种排队这些项目的方法。

编辑:所以迭代一组文件时的解决方案是将-nostdin参数传递给ffmpeg。希望这可以帮助其他可能遇到类似问题的人。

也是文件 - > $ file是一个复制/粘贴错字。

4 个答案:

答案 0 :(得分:3)

我认为这就像你错过$之前的file一样简单。

find . -type f -name '*.mkv' | while read file;
do
    ffmpeg -i $file ...
done

答案 1 :(得分:3)

这对你有好处吗?

find . -type f -name '*.mkv' -exec ffmpeg -i {} \;

答案 2 :(得分:3)

我意识到我刚刚发布了这个,但我找到了解决方案。感谢所有的回复。将-nostdin参数提供给ffmpeg就可以了。它将仅处理当前文件,然后转移到下一个文件进行处理。

ffmpeg的-nostdin选项避免尝试从stdin读取用户输入,否则将解释视频文件本身。

ffmpeg -i <filename> ... -nostdin

使用上述内容的最佳部分是,如果输出中出现错误,您可以继续使用详细程度:

ffmpeg -i <filename> ... -nostdin -loglevel panic 

如果您希望将输出报告给文件,请执行以下操作:

# Custom log name (optional). Helpful when multiple files are involved.
# FFREPORT=./${filename}-$(date +%h.%m.%s).log
ffmpeg -i <filename> ... -nostdin -report

您也可以使用两者的组合。还要感谢@Barmar的解决方案!

答案 3 :(得分:2)

我是一个恶毒的回答掠夺者。我找到了一个:

ffmpeg -i $file &
wait $!

感谢puchu,在这里:apply ffmpeg to many files