我创建了一个bash脚本来处理文件夹中的视频及其子文件夹:
find . -type f -name '*.mkv' | while read file;
do
ffmpeg -i $file ...
done
问题:代替while循环等待ffmpeg完成,它继续循环遍历循环。最终结果是,文件未得到处理。我需要一种方法让当前的while循环迭代等到ffmpeg完成后再继续下一次。或者是一种排队这些项目的方法。
编辑:所以迭代一组文件时的解决方案是将-nostdin参数传递给ffmpeg。希望这可以帮助其他可能遇到类似问题的人。
也是文件 - > $ file是一个复制/粘贴错字。
答案 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)