如何使用 ffmpeg 脚本进行批处理,但在循环中执行每个步骤而不是两个阶段

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

我是一名脚本编辑新手。我使用 ffmpeg 脚本将 MOV/AVI 视频文件转换为 MP4 格式,然后在处理后移动文件:

for f in *.mov; do ffmpeg -y -i "$f" "${f%}.mp4"; done

mv -f *.mov /Users/me/Videos/mov
mv -f *.MOV /Users/me/Videos/mov
mv -f *.avi /Users/me/Videos/avi
mv -f *.AVI /Users/me/Videos/avi
  1. 当前脚本会转换所有视频,然后将它们全部移动到其他文件夹。请问如何调整脚本,以便每个视频在处理后立即移动(而不是等到所有视频完成)?这将是一个很大的改进,因为有时有很多视频,脚本会因某种原因而中断(不是脚本的错误)。这将使监控进度变得更容易。

  2. 目前我手动调整第一行,将 *.mov 更改为 *.avi 请有一种简单的方法可以在同一行内处理视频文件格式/扩展名吗?

  3. 是否有更好的方法来处理多行小写/大写的 mv 语句?如果没有该类型的文件,它们也会给出错误。

谢谢你

上面的脚本是有效的,但通过增强或更改会更好。

macos shell ffmpeg sh
1个回答
0
投票

您正在寻找这样的东西:

find . -type d ! -name . -prune -o \
    \( -iname '*.mov' -o -iname '*.avi' \) -exec sh -c '
for src; do
    echo ffmpeg -y -i "$src" "${src%.*}.mp4" &&
    echo mv "$src" "/Users/me/Videos/$(printf "%s\n" "${src##*.}" | tr A-Z a-z)"
done' sh {} +

如果输出看起来不错,请删除两个

echo

© www.soinside.com 2019 - 2024. All rights reserved.