如何将多个文件传递给ffmpeg?

时间:2013-08-14 08:39:55

标签: bash ffmpeg filepath piping mov

我正在尝试创建一个bash脚本,在给定路径上搜索.mov文件的所有子文件夹,并使用ffmpeg转换它们并将它们输出到目标文件夹中,保留剪辑名称。

我对脚本非常陌生,而且我很难找到解决这个问题的方法。

到目前为止,我已尝试使用ls并找到输出文件路径,但不知道如何以正确的方式将其传递给ffmpeg。

任何线索?

编辑:

得到了一些成功:

#!/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)

这样的事情应该可以胜任:

for f in *.mov; do ffmpeg -i "$f" -vcodec copy -acodec copy "/desination/${f%.mov}.mp4"; done

答案 1 :(得分:0)

你可以从这开始:

#!/bin/bash

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

TARGETEXT='.avi'
TARGETPREFIX='/path/to/somewhere/' ## Make sure it ends with /.

while IFS= read -r FILE; do
    BASE=${FILE##*/}
    NOEXT=${BASE%.*}
    TARGETFILEPATH=${TARGETPREFIX}${NOEXT}${TARGETEXT}
    echo ffmpeg -i "$FILE" "$TARGETFILEPATH"  ## Remove echo if it's already correct.
done < <(exec find -type f -name '*.mov')  ## You could also use -iname '*.sh' instead.

当然,您可以使用自定义目录来搜索文件:

find /path/to/directory -type f -name '*.mov'