需要有关ffmpeg批处理脚本的帮助

时间:2013-08-14 12:18:51

标签: bash shell ffmpeg directory

尝试制作一个ffmpeg批处理脚本,该脚本使用位于许多子文件夹中的原始.mov文件制作proress 422代理文件。到目前为止我得到了这个:

#!/bin/bash

echo "drop source folder: "
read source

echo "drop destination folder: "
read des

find "$source" -name '*.mov' -exec sh -c 'ffmpeg -i "$0" -vcodec prores -profile:v 0 -an "$des/${0%%.mov}.mov"' {} \;
exit;

但它不输出到目标文件夹,只输出源文件夹并要求覆盖 - 不是我想要的。

我猜这是一个简单的参数错误,也许你们中的一些人可以发现?

非常感谢所有帮助!

2 个答案:

答案 0 :(得分:0)

这是我的建议。看起来这是你之前的帖子的后续行动。

#!/bin/bash

[ -n "$BASH_VERSION" ] || {
    echo "You need Bash to run this script."
    exit
}

shopt -s extglob || {
    echo "Unable to enable exglob."
    exit 1
}

until
    read -erp "Drop source folder: " SOURCE
    [[ -d $SOURCE ]]
do
    echo "Drop source folder does not exist: $SOURCE"
    echo "You can abort this script by pressing CTRL-C."
done

until
    read -erp "Drop destination folder: " DES
    [[ -d $DES ]]
do
    echo "Drop destination folder does not exist: $DES"
    echo "You can abort this script by pressing CTRL-C."
done

while IFS= read -r FILE; do
    BASE=${FILE##*/}
    NOEXT=${BASE%.???}
    echo ffmpeg -i "$FILE" -vcodec prores -profile:v 0 -an "$DES/${NOEXT}.mov"  ## Remove echo if it's already correct.
done < <(exec find "$SOURCE" -type f -name '*.mov')  ## You could also use -iname '*.sh' instead to also match files like .MOV.

注意:使用-e选项进行读取有助于通过按Tab键轻松生成路径。

答案 1 :(得分:0)

我猜您需要导出 des 变量。

在这种情况下,我总是建议在目标命令之前插入“echo”(“ffmpeg”)

find "$source" -name '*.mov' -exec sh -c 'echo ffmpeg -i "$0" -vcodec prores -profile:v 0 -an "$des/${0%%.mov}.mov"' {} \;

通过这种方式,您将看到正在尝试运行的内容