【问题标题】:Recursively convert files in nested folders递归转换嵌套文件夹中的文件
【发布时间】:2017-08-25 15:14:18
【问题描述】:

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

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

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

提前致谢。

(以上代码行归功于 LordNeckBeard,来自 this 帖子。)

【问题讨论】:

  • 找到 . -name *.mkv

标签: linux ffmpeg


【解决方案1】:

使用 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 "{}"' \;

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

【讨论】:

  • 此命令从我的计算机中删除了大量文件。我现在花了我一天的剩余时间试图恢复这些文件。我建议从这段代码中完全删除 rm "{}",以防有人像我一样匆忙复制它。
  • 另外,至少在 OSX 上,find ~/ 以用户文件夹中的所有文件为目标,而不仅仅是搜索当前目录。以防万一有人犯了和我一样的错误
  • 我注意到您提到您也丢失了一些文件,正如您所说的“感谢上帝的备份”。我必须说,这个答案对于像我这样没有备份的人可能不是特别有帮助。
  • @MysteryPancake 在上述帖子中的两个不同场合,我警告读者自动化使用rm 命令的极端风险。然后我继续发布不删除任何文件的答案版本。在您“匆忙复制”任何代码之前,确保您阅读完整的答案不是我的责任。提供的代码回答了所提出的问题,因此它将保持被接受的答案。我希望你学到了非常宝贵的一课。
  • 无论使用哪个版本,都会搜索用户文件夹~/,而不是当前目录。我认为改变它以搜索正确的目录至少是有用的,因为 OP 从来没有提到要搜索他们的整个用户文件夹,而不仅仅是文件夹 /Videos
猜你喜欢
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 2013-02-03
相关资源
最近更新 更多