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

问题描述 投票:0回答:1

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

我怎么能防止这种情况?

bash ffmpeg xargs
1个回答
0
投票

这是一个快速的stab,它创建一个与输入文件同名的目录,并修剪掉任何.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' _
© www.soinside.com 2019 - 2024. All rights reserved.