6

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

要約すると、ライブラリのソース コードを変更せずにこれらのログ メッセージを破棄するにはどうすればよいでしょうか。

4

2 に答える 2