4

我有这个用于将.mp4视频转换为.mp3音频的 bash 脚本。它运行,但只循环一次,尽管/home/myname/mp4dir.

该脚本将.mp4它找到的第一个文件转换为.mp3,除非已经有一个.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
4

3 回答 3

8

答案是添加-nostdin到 ffmpeg(不会回答这样的老问题,但仍然在相关的 Google 搜索中名列前茅)。

于 2015-09-06T21:15:24.957 回答
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
于 2012-10-26T10:47:22.710 回答
3

从我们得到的评论中,实际上有你正在循环的输入文件(不管是什么类型的)并且ffmpeg至少开始一次。然后,你被卡住了。

添加

&> ffmpeg.outerr < /dev/null 

到您的命令并在您的“循环”(即 ffmpeg)执行时ffmpeg监视文件。ffmpeg.outerr它会告诉你问题是什么。您可以自己解决这个问题,或者使用 tag回到 stackoverflow 处理这个ffmpeg 特有的问题ffmpeg

于 2012-09-22T14:55:30.610 回答