递归转换嵌套文件夹中的文件

时间:2017-03-31 11:06:52

标签: linux ffmpeg

我想评论一个与此非常相似的问题的答案,但我没有足够的代表。我正在寻找一种方法来改变这行代码:

for i in *.mkv; do ffmpeg -i "$i" "${i%.*}.mp4"; done

因此它包含.avi文件,以便它可以搜索嵌套文件夹。我希望能够定位/Videos并让脚本自动遍历文件夹树到/Videos/2016/January,转换该文件夹中包含的所有视频文件,然后对/Videos/2016/February执行相同操作等等。

提前致谢。

(以上代码行的信用证从Lord this帖子转到LordNeckBeard。)

1 个答案:

答案 0 :(得分:2)

使用LordNeckBeard对find的引用,我提出了以下解决方案:

find ./ -iname '*.avi' -o -iname '*.mkv' -exec bash -c 'ffmpeg -i "{}" -c:v libx265 -preset medium -crf 28 -c:a aac "{}".mp4' \;

完全按照我的预期进行测试和工作,因此它目前正在整个库中运行。

如果您希望为转换后的文件指定与原始文件不同的名称,请参阅Parameter Expansion

如果您希望破坏性地转换所有文件,请使用以下命令非常小心

find ./ -iname '*.avi' -o -iname '*.mkv' -exec bash -c 'ffmpeg -i "{}" -c:v libx265 -preset medium -crf 28 -c:a aac "{}".mp4 && rm "{}"' \;

注意:上面的命令不是防弹的,并且正在删除一些文件之前转换过程已经完成,这意味着我现在丢失了这些文件(感谢上帝用于备份)。我使用一次性文件进行了测试,并确保在开始此过程之前对数据进行了全面的功能备份。