在来自 "find | xargs" 的命令 运行 中使用参数扩展来防止输出覆盖

Use parameter expansions in a command run from "find | xargs" to prevent output overwriting

我有这个 bash 脚本,它在具有特定名称的子文件夹中寻找 mp4 文件,并将这些视频的帧保存为 jpeg。

#!/bin/bash
find ../folder -type f -iname '*C00*.mp4' | xargs -I %% ffmpeg -i %% -vf fps=1 -q:v 3 "../frames/_${i%.*}_frame%d.jpg"

问题是每次脚本完成一个视频时,下一个视频的 .jepg 输出文件都会覆盖现有的。

我该如何预防?

这是一个快速的尝试,它创建一个与输入文件同名的目录,并删除任何 .mp4 扩展名。

#!/bin/bash
find ../folder -type f -iname '*C00*.mp4' -print0 |
xargs -r0 sh -c 'for f; do
    d="../frames/${f%.[Mm][Pp]4}"
    mkdir "$d" || { echo "$d already exists" >&2; exit 123; }
    ffmpeg -i "$f" -vf fps=1 -q:v 3 "$d/frame%d.jpg"
  done' _