我正在使用ffmpeg获取音频剪辑的元信息。但是我无法重复。
$ ffmpeg -i 01-Daemon.mp3 |grep -i Duration
FFmpeg version SVN-r15261, Copyright (c) 2000-2008 Fabrice Bellard, et al.
configuration: --prefix=/usr --bindir=/usr/bin
--datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib
--mandir=/usr/share/man --arch=i386 --extra-cflags=-O2
...
我检查了一下,将此ffmpeg输出定向到stderr。
$ ffmpeg -i 01-Daemon.mp3 2> /dev/null
因此,我认为grep无法读取错误流以捕获匹配的行。我们如何启用grep读取错误流?
使用nixCraft链接,我将标准错误流重定向到标准输出流,然后grep工作了。
$ ffmpeg -i 01-Daemon.mp3 2>&1 | grep -i Duration
Duration: 01:15:12.33, start: 0.000000, bitrate: 64 kb/s
但是,如果我们不想将stderr重定向到stdout怎么办?
grep
只能在stdin上运行。它是由外壳程序创建的管道,它将grep的stdin连接到另一个命令的stdout。而且外壳程序只能将标准输出连接到标准输入。
grep
只能在stdout上运行(尽管我找不到规范的源来支持它),这意味着任何流都需要首先转换为stdout。