为什么我的代码不能按预期工作?
shopt -s extglob || {
echo "Unable to enable exglob."
exit 1
}
TARGETEXT='.jpg'
TARGETPREFIX='./' ## Make sure it ends with /.
while IFS= read -r FILE; do
BASE=${FILE##*/}
NOEXT=${BASE%.*}
TARGETFILEPATH=${TARGETPREFIX}${NOEXT}${TARGETEXT}
duration=$(ffprobe -i "$FILE" -show_format -v quiet | sed -n 's/duration=//p'| sed 's/\.[^\.]*$//')
space=$(awk '{print $1/$2}' <<<"$duration 5")
echo ffmpeg -ss "$space" -i "$FILE" -vf "select='isnan(prev_selected_t)+gte(t-prev_selected_t,"$space")',sca
le='if(gt(a,4/3),206,-1):if(gt(a,4/3),-1,154)',pad=w=206:h=155:x=(ow-iw)/2:y=(oh-ih)/2:color=black,tile=4x1" -aspect
4:3 -frames:v 1 -vsync vfr "$TARGETFILEPATH" -y
done < <(exec find -type f -name '*.mp4')
目录中有2个mp4文件。如果我运行此代码,它可以在ffmpeg命令前使用'echo'工作。它将输出2行ffmpeg,每行输出一行。文件名是正确的,看起来都很完美。
当我运行相同的,删除'echo'时,第一个ffmpeg命令将成功运行,我的脚本将为第二个文件名提供错误。我可以在ffmpeg输出中看到文件名开头缺少一个字符(应该是uscenes.mp4)。
scenes.mp4: No such file or directory
答案 0 :(得分:0)
我已经开始使用for
循环且没有find
。一切正常!
IEXT='.jpg'
for fname in ./*.mp4; do
[ -e "$fname" ] || continue
NOEXT=${fname::-4}
OUPUT=${NOEXT}${IEXT}
duration=$(ffprobe -i "$fname" -show_format -v quiet | sed -n 's/duration=//p'| sed 's/\.[^\.]*$//')
space=$(awk '{print $1/$2}' <<<"$duration 5")
ffmpeg -ss "$space" -i "$fname" -vf "select='isnan(prev_selected_t)+gte(t-prev_selected_t,"$space")',scale='
if(gt(a,4/3),206,-1):if(gt(a,4/3),-1,154)',pad=w=206:h=155:x=(ow-iw)/2:y=(oh-ih)/2:color=black,tile=4x1" -aspect 4:3
-frames:v 1 -vsync vfr "$OUPUT" -y
done