【问题标题】:Bash script stops execution of ffmpeg in while loop - why?Bash 脚本在 while 循环中停止执行 ffmpeg - 为什么?
【发布时间】:2012-09-14 15:35:11
【问题描述】:

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

脚本将它找到的第一个.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

【问题讨论】:

  • echo $f替换循环体是否有效?
  • 是的,所有 .mp4 文件都已列出。该脚本在第一次 ffmpeg 执行后停止。如果我将其注释掉并用回显替换它,它将适用于所有 .mp4 文件。
  • 使用bash -x youscript.sh 运行脚本时会看到什么? ffmpeg 命令完成了吗?
  • bash -x youscript.sh 循环执行不止一次;几个 ffmpeg 调用的输出显示。有什么区别?
  • 编辑:对不起,我的错:行为与直接调用脚本相同:它只执行一次。

标签: bash loops while-loop ffmpeg


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试这个 在终端中

    创建 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
    

    【讨论】:

      【解决方案3】:

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

      添加

      &> ffmpeg.outerr < /dev/null 
      

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

      【讨论】:

      • &lt; /dev/null 可以解决问题。只是我不知道为什么。日志文件没有显示任何错误,只是 ffmpeg 的常规输出。但是通过输入重定向,循环按预期运行。
      • ffmpeg的解决方案是在ffmpeg命令中添加-nostdin标志
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 2015-08-06
      • 2021-08-18
      • 2013-06-13
      • 1970-01-01
      相关资源
      最近更新 更多