java cvwrite_在java中使ffmpeg / javacv更简洁

我有一个

Java应用程序,它使用ffmpeg库和javacv来加载和处理视频文件.

我目前正在使用以下代码,用于将视频文件加载到我的数据容器中.

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;

}

每次加载视频时,库都会输出大量有关视频本身的元信息:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ‘/home/lejlot/data/test.mp4’:

Metadata:

major_brand : isom

minor_version : 512

compatible_brands: isomiso2mp41

encoder : Lavf53.21.1 Duration: 00:04:36.27, start: 0.000000, bitrate: 305 kb/s

Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1280×720 [SAR 1:1 DAR 16:9], 303 kb/s, 20,85

fps, 30 tbr, 1k tbn, 1k tbc

Metadata:

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都不能访问工具的参数.

总结一下 – 如何在不修改库源代码的情况下丢弃这些日志消息?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值