我有一个代码,使用 ffmpeg
将文件夹中所有文件的 *.avi
转换为 *.mp4
。我希望它在所有文件夹和子文件夹上运行;并将结果保存在此子文件夹中。
我已经尝试过查找但没有成功
#!/bin/bash
for i in *.avi;
do
ffmpeg -i /location/"$i" -c:v libx264 -preset ultrafast \
-strict -2 -n /location/"$(basename "$i" .avi)".mp4
done
最佳答案
您可以使用 find
在所有子目录中查找匹配文件:
find <top-dir> -iname "*.avi" | while read filename; do ffmpeg -i "$filename" ... "${filename%avi}mp4"; done
将 ...
替换为您的 ffmpeg
选项。
您也可以使用 GNU parallel在多个 CPU 上并行处理找到的文件的实用程序:
find <top-dir> -iname "*.avi" | parallel -i -- ffmpeg -i "{}" ... "{.}.mp4"
关于linux - 如何让 bash 代码处理文件夹和子文件夹中的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56457307/