LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 529|回复: 1

bash的错误

[复制链接]
发表于 2004-11-27 13:03:48 | 显示全部楼层 |阅读模式
有一个文件/usr/local/bin/tovid如下,执行的时候总说:
/usr/local/bin/tovid: line 171: syntax error: unexpected end of file
第171行是下边最后一个echo "Done!"(第170行)下的一行,总是空行,而且我删除这个空行,也不行,继续出现这个空行

===========================


# !/bin/bash

# Convert any video/audio stream that mplayer can play
# into VCD, SVCD, or DVD-compatible Mpeg output file.
# Arguments: $1 - format: Video CD, Super Video CD, DVD, or VCD-on-DVD [vcd|svcd|dvd]
#            $2 - aspect: Widescreen or full-frame [wide|full]
#            $3 - name of input file
#            $4 - name of output prefix

USAGE="Usage: tovid [vcd|svcd|dvd|dvd-vcd] [wide|full] <input file> <output prefix>"

if [ $# -ne 4 ]; then
  echo $USAGE
  exit 1
else if  $1 == \"vcd\" || $1 == \"dvd-vcd\" ; then
  TGTWIDTH="352"
  TGTHEIGHT="240"
  PALHEIGHT="288"
  FORMAT="VCD"
  VIDFMT="-f 1"
  # For VCD, use VCD sound profile of mp2enc
  if  $1 == \"vcd\" ; then
    SNDOPTS="-V"
  # For VCD-on-DVD, use DVD-format audio
  else
    SNDOPTS="-r 48000 -s"
  fi
  MUXOPTS="-m v"
  SUF="m1v"
else if  $1 == \"svcd\" ; then
  TGTWIDTH="480"
  TGTHEIGHT="480"
  PALHEIGHT="576"
  FORMAT="SVCD"
  # -d for dummy SVCD scan offsets
  VIDFMT="-f 4 -d"
  SNDOPTS="-V"
  MUXOPTS="-m s"
  SUF="m2v"
else if  $1 == \"dvd\" ; then
  TGTWIDTH="720"
  TGTHEIGHT="480"
  PALHEIGHT="576"
  FORMAT="DVD"
  VIDFMT="-f 8"
  SNDOPTS="-r 48000 -s"
  MUXOPTS="-m d"
  SUF="m2v"
else
  echo $USAGE
  exit 1
fi

if  $2 == \"wide\" ; then
  ASPECT="WIDE"
else if  $2 == \"full\" ; then
  ASPECT="FULL"
else
  echo "$USAGE"
  exit 1
fi

INFILE=$3
OUTPREFIX=$4

# Probe for width, height, and frame rate
tcprobe -i "$INFILE" > fileinfo
CURWIDTH=`grep 'import frame size' fileinfo | \
  perl -e ' $line=<STDIN> ; $line =~ /import frame size: -g (\d+?)x\d+ /  ;  print $1' `
CURHEIGHT=`grep 'import frame size' fileinfo | \
  perl -e ' $line=<STDIN> ; $line =~ /import frame size: -g \d+?x(\d+) /  ;  print $1' `
CURFPS=`grep 'frame rate' fileinfo | \
  perl -e ' $line=<STDIN> ; $line =~ /frame rate: -f (.+?) \[/  ;  print $1' `

echo "Input file is $CURWIDTH x $CURHEIGHT at $CURFPS fps."

# If FPS is already 29.97 (NTSC) or 23.976 (NTSC film), leave it alone
if  $CURFPS == \"29.970\" ;
then
  echo "Source is 29.970 fps (NTSC). Encoding as NTSC video."
  ADJUSTFPS=""
  VIDFPS="-F 4"
else if  $CURFPS == \"23.976\" ;
then
  echo "Source is 23.976 fps (NTSC film). Encoding as NTSC film."
  ADJUSTFPS="yuvfps -s 24000:1001 -r 30000:1001 -v 0 |"
  VIDFPS="-F 4"
else
  echo "Source is not at an NTSC frame rate. Adjusting FPS."
  ADJUSTFPS="yuvfps -r 30000:1001 -v 0 |"
  VIDFPS="-F 4"
fi

# Set appropriate aspect ratio for output format
# Widescreen on DVD should be 16:9
[ $ASPECT == "WIDE" ] && [ $FORMAT == "DVD" ] && ASPECTFMT="-a 3"
# Widescreen on VCD/SVCD needs to be padded out to 4:3
[ $ASPECT == "WIDE" ] && [ $FORMAT != "DVD" ] && ASPECTFMT="-a 2"
# Standard (fullscreen) is always 4:3
[ $ASPECT == "FULL" ] && ASPECTFMT="-a 2"

# Estimate existing aspect ratio (integer math!)
ESTASPECT=$(($CURWIDTH * 100 / $CURHEIGHT))
# Tolerances for wide/full aspect ratio (+/- 10% of target)
if  $ASPECT == \"WIDE\" ;
then
  MINASPECT=160
  MAXASPECT=195
else
  MINASPECT=120
  MAXASPECT=147
fi

# Determine whether any rescaling needs to be done
# If resolution is already the same as the target, do not rescale.
if  $CURWIDTH == $TGTWIDTH && $CURHEIGHT == $TGTHEIGHT ;
then
  echo "Source is already at target resolution ($TGTWIDTH x $TGTHEIGHT)."
  echo "No rescaling will be applied."
  ADJSIZE=""
# See if source is target resolution in PAL
# If so, just rescale; aspect ratio should be fine
else if  $CURWIDTH == $TGTWIDTH && $CURHEIGHT == $PALHEIGHT ;
then
  echo "Source appears to be PAL of target resolution ($TGTWIDTH x $PALHEIGHT)."
  echo "Assuming correct aspect ratio and rescaling."
  ADJSIZE="yuvscaler -O $FORMAT -v 0 -n n |"
else if  $ESTASPECT -ge $MINASPECT && $ESTASPECT -le $MAXASPECT ;
then
  echo "Source is within 10% of target aspect ratio."
  echo "Assuming correct aspect ratio and rescaling."
  ADJSIZE="yuvscaler -O $FORMAT -v 0 -n n |"
# Otherwise, scale and/or pad with black bars
else
  echo "Scaling and/or padding with letterbox bars"
  # For non-DVD formats, widescreen needs to be padded to make
  # it fullscreen.
  [ $FORMAT != "DVD" ] && [ $ASPECT == "WIDE" ] && \
    ADJSIZE="yuvscaler -O $FORMAT -v 0 -n n -M WIDE2STD |"
  # Non-DVD standard sizes can be scaled directly
  [ $FORMAT != "DVD" ] && [ $ASPECT == "FULL" ] && \
    ADJSIZE="yuvscaler -O $FORMAT -v 0 -n n |"
  # DVD can be scaled directly
  [ $FORMAT == "DVD" ] && \
    ADJSIZE="yuvscaler -O $FORMAT -v 0 -n n |"
fi

echo "Creating and encoding video stream..."
mkfifo stream.yuv
mplayer -nosound -noframedrop -vo yuv4mpeg -vf pp=hb/vb/dr,hqdn3d "$INFILE" &
eval `echo "cat stream.yuv | $ADJUSTFPS $ADJSIZE nice -n 16 mpeg2enc $ASPECTFMT $VIDFMT $VIDFPS -v 0 -n n -H -o $OUTPREFIX.$SUF"`

echo "Creating WAV of audio stream..."
mplayer -vc dummy -vo null -ao pcm -aofile stream.wav "$INFILE"
# echo "Normalizing WAV audio..."
# normalize --amplitude=-14dBFS stream.wav
echo "Encoding WAV..."
cat stream.wav | mp2enc $SNDOPTS -o "$OUTPREFIX.mpa"

echo "Multiplexing audio and video together..."
tcmplex -i "$OUTPREFIX.$SUF" -p "$OUTPREFIX.mpa" -o "$OUTPREFIX.mpg" $MUXOPTS

echo "Cleaning up..."
rm stream.yuv
rm stream.wav
# rm "$OUTPREFIX.$SUF"
# rm "$OUTPREFIX.mpa"
rm fileinfo

echo "Done!"
 楼主| 发表于 2004-11-27 13:05:34 | 显示全部楼层
而且,如果用elif,就说第15、30、40行的vcd命令找不到

用else if就没有这个提示
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表