0

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

我对脚本很陌生,我很难找出如何解决这个问题。

到目前为止,我已经尝试使用 ls 和 find 来输出文件路径,但不知道如何以正确的方式将其传输到 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;

但是,它似乎输出到源文件夹要求覆盖。如何正确设置参数以便输出到“目标文件夹”并保留文件名?

4

2 回答 2

0

像这样的东西应该可以完成这项工作:

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

于 2013-08-14T08:58:06.287 回答
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'
于 2013-08-14T09:05:15.920 回答