在从“ find | xargs”运行的命令中使用参数扩展,以防止输出覆盖

时间:2019-02-20 11:49:23

标签: bash ffmpeg xargs

我有这个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输出文件都会覆盖现有视频。

如何防止这种情况?

1 个答案:

答案 0 :(得分:0)

这是一个快速的选项卡,它可以创建一个目录,该目录的名称与输入文件的名称相同,并且扩展名的所有.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' _