如果所有 mp4 都在同一目录中,则以下命令将执行我需要执行的操作:for i in *.mp4; do ffmpeg -i "$i" -vf fps=0.5 "$i-%d.jpg"; done
例如。
1.mp4
2.mp4
但是,我的这些现在位于同一目录中的文件夹中,例如:
dir1/1.mp4
dir2/2.mp4
如何修改此命令以递归进入每个目录并执行
ffmpeg
在文件夹中找到的每个视频上?最终结果应该是:
dir1
1.mp4
1-1.jpg
1-2.jpg
1-3.jpg
dir2
2.mp4
2-1.jpg
2-2.jpg
2-3.jpg
最佳答案
与 zsh
您可以使用 **
递归匹配目录glob,提供 EXTENDED_GLOB
选项已启用。您可以使用 setopt
启用选项内置(例如在您的 ~/.zshrc
中):
setopt extendedglob
**
glob 匹配零个或多个目录。所以**/*.mp4
将匹配 dir1/1.mp4
和 dir2/2.mp4
在你的例子中。假设 ffmpeg 允许在您使用 $i
的两个参数中使用完整路径,无需更改其他任何内容:for i in **/*.mp4; do ffmpeg -i "$i" -vf fps=0.5 "$i-%d.jpg"; done
以
zsh
开头5.2 还可以另外设置GLOB_STAR_SHORT
,它允许您缩短 **/*.mp4
至**.mp4
.for i in **.mp4; do ffmpeg -i "$i" -vf fps=0.5 "$i-%d.jpg"; done
关于video - 使用 zsh 和 ffmpeg 从嵌套目录中的视频递归生成静止图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54170802/