2011-07-09 194 views
3

的算術,我試圖削減視頻到使用FFmpeg的2分鐘短片。我正在使用Ubuntu 10.10。問題與在bash腳本

這裏是我的代碼:

#!/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))從來沒有工作過。

我試圖取代((MIN=MIN-2))let "MIN-=2"我得到一個錯誤:let: not found

我+ VE雙重檢查,但仍然不知道爲什麼。這件事我得到了灰頭髮。

+1

您是否嘗試過與運行調試標誌-x腳本? '#!/ bin/sh -x'它會回顯每個命令的結果 – bbaja42

+0

是'/ bin/sh' bash? – Orbling

+0

也許你甚至沒有運行bash?嘗試將第一行改爲'#!/ bin/bash' – Martin

回答

4

((MIN=MIN-2))語法,您正在使用一個bash特異功能。

我沒有Ubuntu 10.10手工測試,但我猜你的/bin/sh不是bash,而是一個更小,更簡單的外殼,只有POSIX所需的基本功能。 (在這種情況下,可能((MIN=MIN-2))啓動一個子shell,這將啓動一個子shell,它不只是設置一個變量MIN字符串MIN-2,然後退出。)

在第一行嘗試#!/bin/bash代替。

+0

+1,在ubuntu上驗證過,'/ bin/sh'指向破折號 – bbaja42

+0

是的。我'cd/bin'並看到'sh - > dash'。 – DocWiki