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

时间:2019-01-13 16:22:22

标签: video ffmpeg terminal zsh

如果所有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

1 个答案:

答案 0 :(得分:1)

如果启用了zsh选项,则可以使用**与目录EXTENDED_GLOB递归地匹配目录。您可以使用内置的setopt启用选项(例如,在~/.zshrc中启用):

setopt extendedglob

**全局匹配零个或多个目录。因此,在您的示例中,**/*.mp4将与dir1/1.mp4dir2/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