我正在尝试创建一个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;
但是,它似乎输出到要求覆盖的源文件夹。如何正确设置参数,以便输出到“目标文件夹”并保留文件名?
答案 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'