我试图通过仅播放特定时间间隔来从视频文件中制作剪辑。
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
mplayer
正在“消耗”tmpedlfile 剩余内容。您需要添加一个选项以使其不忽略其标准输入:
mplayer -noconsolecontrols -ss $startpos -endpos $length "$mediafile" &> /dev/null