Video 使用zsh和ffmpeg从嵌套目录中的视频递归生成静止图像

Video 使用zsh和ffmpeg从嵌套目录中的视频递归生成静止图像,video,ffmpeg,terminal,zsh,Video,Ffmpeg,Terminal,Zsh,如果所有MP4都在同一目录中,以下命令将执行我需要执行的操作: 用于*.mp4中的i;do ffmpeg-i“$i”-vf fps=0.5“$i-%d.jpg”;完成 例如 1.mp4 2.mp4 但是,我的这些文件夹现在位于同一目录中的文件夹中,例如: dir1/1.mp4 dir2/2.mp4 如何修改此命令以递归方式进入每个目录,并对文件夹中找到的每个视频执行ffmpeg 最终结果应该是: dir1 1.mp4 1-1.jpg 1-2.jpg 1-3.jp

如果所有MP4都在同一目录中,以下命令将执行我需要执行的操作:

用于*.mp4中的i;do ffmpeg-i“$i”-vf fps=0.5“$i-%d.jpg”;完成

例如

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\u glob
选项。您可以使用内置的
setopt
启用选项(例如在
~/.zshrc
中):

**
全局匹配零个或多个目录。因此,
***.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\u STAR\u SHORT
,这允许您将
***.mp4
缩短为
***.mp4

for i in **.mp4; do ffmpeg -i "$i" -vf fps=0.5 "$i-%d.jpg"; done
for i in **.mp4; do ffmpeg -i "$i" -vf fps=0.5 "$i-%d.jpg"; done