Bash 从多个mp4文件批量提取帧

Bash 从多个mp4文件批量提取帧,bash,shell,ffmpeg,ubuntu-16.04,Bash,Shell,Ffmpeg,Ubuntu 16.04,所以我有一个只有mp4文件的文件夹。我只想为每个mp4文件自动获取特定帧。我尝试了下面的命令,但它试图覆盖mp4文件,下面的命令有任何错误吗?因此,我希望输入一个mp4文件,并以.jpg格式获得3帧 for i in *.mp4; do ffmpeg -i *.mp4 -vf select='eq(n\,10)+eq(n\,17)+eq(n\,21)' -vsync 0 frames%d.jpg done 我不是ffmpeg方面的专家,但您的脚本中有一些相当基本的问题。希望这能让您开始

所以我有一个只有mp4文件的文件夹。我只想为每个mp4文件自动获取特定帧。我尝试了下面的命令,但它试图覆盖mp4文件,下面的命令有任何错误吗?因此,我希望输入一个mp4文件,并以.jpg格式获得3帧

for i in *.mp4; do 
   ffmpeg -i *.mp4 -vf select='eq(n\,10)+eq(n\,17)+eq(n\,21)' -vsync 0 frames%d.jpg
done

我不是
ffmpeg
方面的专家,但您的脚本中有一些相当基本的问题。希望这能让您开始:

for i in *.mp4; do 
   ffmpeg -i "$i" -vf select='eq(n\,10)+eq(n\,17)+eq(n\,21)' -vsync 0 "${i%.*}_frames%d.jpg"
done

这是一个批处理/外壳问题。在操作系统信息中添加适当的标记。您正在循环使用
*.mp4
,但从不使用
$i
。你想用数字填充帧%d.jpg吗?@WalterA是的,我想用数字填充。但是,即使我在代码中添加了done,它仍然要求覆盖mp4文件
frames%d.jpg
传递给ffmpeg,其图像序列muxer将生成frames1.jpg、frames2.jpg。。。。这不是问题。但是ffmpeg不进行视频的批量摄取或顺序处理,因此它不能接受
*.mp4
。这是一个空壳问题。建议
-i“$i”
${i%.*}-frames%d.jpg
是的,这正是我想要的。非常感谢@Mark SetchellExcellent!请考虑接受它作为您的答案-点击空心蜱/支票旁边的选票计数。祝你的项目好运!