Bash 脚本在 while 循环中停止执行 ffmpeg - 为什么?

Ale*_*thy 4 bash loops ffmpeg while-loop

我有这个用于将.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
Run Code Online (Sandbox Code Playgroud)

San*_*ton 6

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


Jan*_*cke 3

从评论中我们得知,实际上存在您正在循环的输入文件(无论何种类型)并且ffmpeg至少启动一次。然后,你就被困住了。

添加

&> ffmpeg.outerr < /dev/null 
Run Code Online (Sandbox Code Playgroud)

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

  • ffmpeg的解决方案是在`ffmpeg`命令中添加`-nostdin`标志 (3认同)