出力をavconvからgrepにパイプしようとしていますが、どういうわけかパイプが正しく機能していません。次の方法は機能しません。
avconv -i MOVIE.mkv | grep SOMETHING
-SOMETHINGを含むavconvの行のみを表示する必要があります。
avconv -i MOVIE.mkv pipe: | grep SOMETHING
-SOMETHINGを含むavconvの行のみを表示する必要があります。
avconv -i MOVIE.mkv pipe:1 | grep SOMETHING
-SOMETHINGを含むavconvの行のみを表示する必要があります。
情報をavconvからパイプに出力するにはどうすればよいですか?
なぜ機能しないのですか?
このようなパイプは機能しますが、-i
情報パラメーターではありません:avconv -codecs | grep "264"
12.04および12.10でテスト済み
私はFormat Junkieの開発者の1人なので、avconvがどのように機能するかを知っています。すべての重要なデータをstderrに送信することを保証します。したがって、stderrからgrepする必要があります。実際には、すべてのstderrをstdoutにリダイレクトしてからgrepを実行します。
例えば:
avconv -i 111.avi 2>&1 | grep Duration
正しく出力:
Duration: 00:01:05.02, start: 0.000000, bitrate: 2910 kb/s
Grepがavconvの出力の一部でのみ機能する理由は、この特定の出力がstderrではなくstdoutに与えられているため、grepに正常にパイプされるためです。
通常、stderrはエラーメッセージを出力するために使用され、stdoutは通常の情報メッセージを出力するために使用されます。
必要に応じて出力をフィルタリングできるため、stderrとstdoutの両方が存在することは悪くありません。たとえば、次のことを考慮してください。
command > log.txt 2> error_log.txt
これにより、すべての通常出力(stdout)がlog.txtに、すべてのエラー(stderr)がerror_log.txtに出力されます。
ただし、avconvがstderrを使用してメッセージを表示する理由はわかりません。