我有这个bash脚本,用于将.mp4视频转换为.mp3音频。 虽然在/ home / myname / mp4dir中有更多的mp4文件,但它只运行一次,但循环只执行一次。除非已存在.mp3文件,否则该脚本会将找到的第一个.mp4文件转换为.mp3。这应该在循环中完成,但在第一次调用ffmpeg后脚本停止。 为什么呢?
#!/bin/bash
find /home/myname/mp4dir -name "*.mp4" | while read f
do
fOut=`echo $f | sed s/mp4/mp3/`
echo "convert $f => $fOut"
if ! test -f $fOut
then
ffmpeg -i $f -vn -f mp3 $fOut
fi
done
答案 0 :(得分:4)
试试这个 在终端
创建bash nohup.sh并粘贴到此
#!/bin/sh
while true
do
/var/www/bash/Someother-bash-script-goes-here.sh
sleep 60
done
在nohup.sh所在的终端类型中
nohup sh nohup.sh >/dev/null 2>&1 &
nohup,将每60秒执行一次,你可以像这样进行grep服务检查
#!/bin/sh
SERVICE='ffmpeg'
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
echo "$SERVICE service running, will not bother ffmpeg yet"
else
echo "$SERVICE is not running"
echo "$SERVICE is not running!" | /var/www/bash/start_service.sh
fi
答案 1 :(得分:3)
从评论中我们得到的实际上是你正在循环的输入文件(不管是什么样的),ffmpeg
至少开始一次。然后,你被困住了。
添加
&> ffmpeg.outerr < /dev/null
到ffmpeg
命令并监视文件ffmpeg.outerr
,同时执行“循环”,即ffmpeg。它会告诉你问题是什么。您可以自己解决此问题,也可以使用标记ffmpeg
使用此 ffmpeg特定问题返回stackoverflow。
答案 2 :(得分:1)
答案是添加&#39; -nostdin&#39; ffmpeg(不会回答像这样的旧问题,但仍然会在相关的谷歌搜索中占据优势)。