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に接続するのは、シェルによって作成されたパイプです。また、シェルはstdoutをstdinにのみ接続できます。
grep
がstdoutでしか動作できないと信じています(それをバックアップする標準的なソースを見つけることができませんが)、つまり、ストリームは最初にstdoutに変換する必要があります。