如果所有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
答案 0 :(得分:1)
如果启用了zsh
选项,则可以使用**
与目录EXTENDED_GLOB
递归地匹配目录。您可以使用内置的setopt
启用选项(例如,在~/.zshrc
中启用):
setopt extendedglob
**
全局匹配零个或多个目录。因此,在您的示例中,**/*.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