0

试图制作一个 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;

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

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

非常感谢所有帮助!

4

2 回答 2

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 轻松生成路径。

于 2013-08-14T13:18:43.377 回答
0

我想你需要导出des变量。

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

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

这样,您将看到您要运行的内容

于 2013-08-14T13:22:14.793 回答