使用 find 命令使用 ffmpeg 进行递归转换

使用 find 命令使用 ffmpeg 进行递归转换

我如何使用以下脚本来递归地将包含以下内容的目录转换.mp4.png(仅 1 帧)。

目前它只转换目录。它不是递归的。

for i in *.mp4
do name=`echo "$i" | cut -d'.' -f1`
echo "$name"
ffmpeg -i "$i" -r 0.0033 -vf scale=-1:1024 -vcodec png "${name}.png"
done

答案1

find . -type f -name '*.mp4' -exec sh -c '
    name="${1%.*}"
    echo "$name"
    ffmpeg -i "$1" -r 0.0033 -vf scale=-1:1024 -vcodec png "${name}.png"
' find-sh {} \;

笔记:

  • 您的原始代码中name=`echo "$i" | cut -d'.' -f1`有一个质量相当低的片段。它在第一个点处被切断,这似乎是错误的。这不是唯一的问题,但我不会详细说明。如果您想删除扩展,正确的方法是name="${i%.*}"
  • *.mp4被引用是因为
  • 头脑
  • find-sh被解释这里
  • find进入子目录,但默认情况下不遵循符号链接。如果 中的所有“子目录”.实际上都链接到目录,那么您可能会错误地认为该工具通常不会进入。选中man 1 find-L选项。

相关内容