首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash脚本中的算法问题

bash脚本中的算法问题
EN

Stack Overflow用户
提问于 2011-07-09 08:49:00
回答 1查看 324关注 0票数 3

我正试着用FFMpeg把一段视频剪成2分钟的片段。我使用的是Ubuntu 10.10。

下面是我的代码:

代码语言:javascript
复制
#!/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

I+ve仔细检查了一下,但仍然不知道为什么。我头发都白了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-09 09:05:44

您正在使用的((MIN=MIN-2))语法是一个bash-specific特性。

我没有Ubuntu10.10可用来测试,但我猜你的/bin/sh不是bash,而是一个更小、更简单的shell,它只具有POSIX所需的基本特性。(在这种情况下,((MIN=MIN-2))可能会启动子外壳,子外壳只会将变量MIN设置为字符串MIN-2,然后退出。)

在第一行尝试使用#!/bin/bash

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6631971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档