我从 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.