while 루프는 한 번만 실행됩니까?

while 루프는 한 번만 실행됩니까?

특정 시간 간격만 재생하여 비디오 파일에서 클립을 만들려고 합니다.

make_mclip.sh

#!/bin/bash

mediafile=$@
mediafile_fullpath=$PWD/./$mediafile
tmpedlfile=$(mktemp)

mplayer -edlout $tmpedlfile "$mediafile" &> /dev/null

cat $tmpedlfile | while read f
do
    startpos=$(echo $f | awk '{print $1}')
    endpos=$(echo $f | awk '{print $2}')
    length=$(echo "$endpos-$startpos" | bc)

    tmpclip=$(mktemp --suffix='.mclip' --tmpdir=$PWD)
    echo -e "$mediafile_fullpath\t$startpos\t$length" > $tmpclip

    mplayer_clip.sh "$tmpclip" &>/dev/null

    echo -n "clip name : "
    read clipname < /dev/tty

    mv -nv "$tmpclip" "$clipname.mclip"
done

echo doing rm "$tmpedlfile"

mplayer_mclip.sh

#!/bin/bash

mediafile=$(cat "$@" | awk -F'\t' '{print $1}')
startpos=$(cat "$@" | awk -F'\t' '{print $2}')
length=$(cat "$@" | awk -F'\t' '{print $3}')

mplayer -ss $startpos -endpos $length "$mediafile" &> /dev/null

그러나 어떤 이유로 $tempedlfile에 여러 줄이 포함되어 있어도 make_mclip.sh의 while 루프는 한 번만 실행됩니다.

    mplayer_clip.sh "$tmpclip" &>/dev/null

제거됨.

뭐가 문제 야?

추신: 이에 대한 프로그램이 이미 있는지 알고 싶습니다.

답변1

mplayertmpedlfile의 나머지 콘텐츠를 "소비"합니다. 표준 입력을 무시하지 않으려면 옵션을 추가해야 합니다.

mplayer -noconsolecontrols -ss $startpos -endpos $length "$mediafile" &> /dev/null

관련 정보