我正在尝试使用FFMpeg将视频剪辑成2分钟的剪辑。我用的是Ubuntu 10.10。
下面是我的代码:#!/bin/sh
COUNTER=0
BEG=0
MIN=`ffmpeg -i ${1} 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,// | cut -d ":" -f 2`
echo $MIN
((MIN=MIN-2))
before_last_dot=${1%.*};
while [ $COUNTER -lt $MIN ]; do
((BEG=COUNTER*60))
echo "MIN:${MIN}"
echo "ffmpeg -sameq -i ${1} -ss ${BEG} -t 120 ${before_last_dot}.${COUNTER}.wmv"
((COUNTER=COUNTER+2))
done
echo "ffmpeg -sameq -i ${1} -ss ${BEG} -t 120 ${before_last_dot}.${COUNTER}.wmv"
应为ffmpeg -sameq -i ${1} -ss ${BEG} -t 120 ${before_last_dot}.${COUNTER}.wmv
。我把它打印出来检查一下。${1}为视频名称。
但问题是,((COUNTER=COUNTER+2))
或((COUNTER+=2))
从来没有工作!COUNTER
总是0,BEG
也总是0。((MIN=MIN-2))
也行不通。
我试图用let "MIN-=2"
替换((MIN=MIN-2))
,我得到一个错误:let: not found
我已经检查了两遍,但仍然不知道为什么。我的头发都白了
您使用的((MIN=MIN-2))
语法是bash
特有的功能。
我没有Ubuntu 10.10来测试,但我猜你的/bin/sh
不是bash
,而是一个更小更简单的shell,只有POSIX所需的基本功能。(在这种情况下,((MIN=MIN-2))
可能会启动一个子shell,这个子shell会启动一个子shell,这个子shell什么也不做,只是将变量MIN
设置为字符串MIN-2
,然后退出。)
尝试用#!/bin/bash
代替第一行