迭代调用 ffmpeg

迭代调用 ffmpeg

我从 Mac 终端这样调用 ffmpeg:

$ find . -type f -name *.webm | while IFS= read -r f; do echo "$f"; ffmpeg -i "$f" "${f%.webm}".mp4 2> ~/Desktop/err; done

仅处理 find 返回的第一个文件:

./artist/穆迪布鲁斯/_vid/白色之夜 satin_lyrics.webm

错误摘录:

输入命令:|全部|-1 [ ]

解析错误,至少需要 3 个参数,但 string 's [360p].webm' 中仅给出 1 个参数

输入命令: |all |-​​1 [ ] 解析错误,至少需要 3 个参数,字符串 'hannel/Ash Wainman/_Inbox/BOHEMIAN RHAPSODY - ASH WAINMAN[HD,1280x720].webm' 中仅给出 1 个参数

我们应该有“渠道”而不是“通道”。

答案1

您不正确地使用find并且不必要地创建了一个 shell 循环(读起来很痛苦!),因为您可以(应该)ffmpeg直接从内部运行find

find . -type f -name *.webm \
-exec sh -c 'echo "$1"; ffmpeg -nostdin -i "$1" "${1%.webm}".mp4 2>> ~/Desktop/err' sh {} ';'

尊重LordNeckBeard(虽然我的肯定是毛茸茸的)。

答案2

正如 LordNeckBeard 所建议的,添加-nostdin停止ffmpeg尝试交互(或者显然是读取其继承的标准输入)。

手册页中提到了这一点:

-stdin
       Enable interaction on standard input. On by default unless standard input is used as an input. To explicitly disable interaction you need to specify "-nostdin".

       Disabling interaction on standard input is useful, for example, if ffmpeg is in the background process group. Roughly the same result can be achieved with "ffmpeg ... <
       /dev/null" but it requires a shell.

相关内容