Bash while循环等待任务完成

mac*_*017 9 bash ffmpeg while-loop

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

find . -type f -name '*.mkv' | while read file;
do
  ffmpeg -i $file ...
done
Run Code Online (Sandbox Code Playgroud)

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

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

另外文件 - > $ file是复制/粘贴拼写错误.

mac*_*017 5

我知道我前不久发布了此消息,但找到了解决方案。感谢您的所有回复。向ffmpeg提供-nostdin参数可以解决问题。在移至下一个文件进行处理之前,它将仅处理当前文件。

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

ffmpeg -i <filename> ... -nostdin
Run Code Online (Sandbox Code Playgroud)

关于使用上面的最好的部分是,如果输出中出现错误,您可以继续使用详细信息:

ffmpeg -i <filename> ... -nostdin -loglevel panic 
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望将输出报告到文件,请按照以下方式进行操作:

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

您也可以将两者结合使用。也感谢@Barmar提供解决方案!