Bash循环通过文件无法按预期工作

时间:2017-06-05 16:34:42

标签: bash

为什么我的代码不能按预期工作?

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

1 个答案:

答案 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