ffmpeg
ライブラリを使用しjavacv
、ビデオ ファイルを読み込んで処理する Java アプリケーションがあります。
videofile
現在、データ コンテナにロードするために次のコードを使用しています。
public boolean add(String videofile) {
FrameGrabber g = new OpenCVFrameGrabber( videofile );
try{
g.start();
}
catch(Exception e){
g = new FFmpegFrameGrabber( videofile );
try {
g.start();
}catch(Exception x){
return false;
}
}
grabbers.add( new Pair(videofile, g) );
frames.add( 0 );
preprocessed=false;
return true;
}
ビデオが読み込まれるたびに、ライブラリはビデオ自体に関する多くのメタ情報を出力します。
入力 #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/lejlot/data/test.mp4': 04:36.27、開始: 0.000000、ビットレート: 305 kb/s ストリーム #0:0(und): ビデオ: mpeg4 (シンプル プロファイル) (mp4v / 0x7634706D)、yuv420p、1280x720 [SAR 1:1 DAR 16:9]、 303 kb/s、20,85 fps、30 tbr、1k tbn、1k tbc メタデータ: handler_name : VideoHandler
明らかに見たくありません。ライブラリのソース コードを変更することはできません (したくありません)。
stdout/stderr ストリームを一時的にブロックしようとした限り、
private static final devnull = new PrintStream(new OutputStream() {
@Override
public void write(int b) {
//DO NOTHING
}
@Override
public void write(byte[] b,int x,int y){
}
});
/**
* Blocks messages to stdout
*/
public static void silentStdOut(){
System.setOut(devnull);
}
/**
* Blocks messages to stderr
*/
public static void silentStdErr(){
System.setErr(devnull);
}
しかし、それは役に立たないようです、ログメッセージはまだ表示されています
public boolean add(String videofile) {
Utils.silentStdErr();
Utils.silentStdOut();
FrameGrabber g = new OpenCVFrameGrabber( videofile );
try{
g.start();
}
,,,
「生の」ffmpeg は、以下を使用して冗長性を低く設定できます。
ffmpeg -loglevel panic
ツールのパラメーターへのアクセスも許可しませOpenCVFrameGrabber
ん。FFmpegFrameGrabber
要約すると、ライブラリのソース コードを変更せずにこれらのログ メッセージを破棄するにはどうすればよいでしょうか。