ffmpeg 在文件夹中的每个 mp4 文件上应用命令

ffmpeg apply command on every mp4 file in folder

我有命令

for file in *.mp4; do ffmpeg -i "${file%.mp4} -vf fps=1/60 img%03d.jpg; done

我想在 ffmpeg 中使用它来遍历目录中的每个 mp4 文件和 运行 ffmpeg -i myvideo.mp4 -vf fps=1/60 img%03d.jpg 命令。但是,当我 运行 上面的 for 循环时,出现错误 "File was unexpected at this time." 我该如何解决这个问题?

我还应该提到文件名中有空格和其他特殊字符。

几个问题:

  • 缺少结束语。
  • 输入不需要
  • Parameter expansion,因为不需要删除输入名称的任何部分,所以只需使用普通变量即可。
  • 输出需要参数扩展,否则每个循环命令都会产生相同的输出名称。
  • 将图像输出到它们自己的目录将使事情更整洁。
  • 我添加了 -q:v 3 以提高 JPG 输出的质量。一个不错的尝试范围是 2-5,其中较低的值表示较高的质量和较大的文件大小。

固定示例:

mkdir images
for file in *.mp4; do ffmpeg -i "$file" -vf fps=1/60 -q:v 3 "images/${file%.mp4}.jpg"; done