在java中制作ffmpeg/javacv较少详细信息
我有一个Java应用程序,它使用ffmpeg
库和javacv
加载和处理视频文件。在java中制作ffmpeg/javacv较少详细信息
我正在使用以下代码,将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,从“/家/ lejlot /数据/ test.mp4' : 元数据: major_brand:ISOM minor_version:512 compatible_brands:isomiso2mp41 编码器:Lavf53.21.1时间:00: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 帧,30 TBR,1K TBN,1K TBC 元数据: handler_name:VideoHandler
这显然我不想看到。我不能(不希望)修改库源代码,而是修改我自己的代码,以便拦截此日志并丢弃它。
据我试图通过
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);
}
到即暂时阻断标准输出/ stderr流,但它似乎并没有帮助,日志信息仍显示
public boolean add(String videofile) {
Utils.silentStdErr();
Utils.silentStdOut();
FrameGrabber g = new OpenCVFrameGrabber(videofile);
try{
g.start();
}
,,,
“原始”的ffmpeg可以设置为较不详细使用
ffmpeg -loglevel panic
但不是OpenCVFrameGrabber
不是FFmpegFrameGrabber
可以访问该工具的参数。
总结 - 如何在不修改库的源代码的情况下丢弃这些日志消息?
几分钟前有同样的问题,也看网上,除了你的问题没有什么。然后我就开始挖FFmpeg的源代码,并找到了解决方案,加上进口:
import com.googlecode.javacv.cpp.avutil;
,然后只要致电:
avutil.av_log_set_level(avutil.AV_LOG_QUIET);
创建FFmpegFrameGrabber前 - >没有更多的消息形成的ffmpeg。
问候
丹尼尔
这是更新的解决方案(从GitHub WRT javacv)
下面添加
import static org.bytedeco.javacpp.avutil.AV_LOG_PANIC;
import static org.bytedeco.javacpp.avutil.av_log_set_level;
调用下面的语句给你创建FFmpegFrameGrabber前import语句 - >没有更多消息形成ffmpeg。
av_log_set_level(AV_LOG_PANIC);
这让我想起http://xkcd.com/979/。谢谢你的答案,完美的作品。 2017 – lejlot
解决方案:现在是'import org.bytedeco.javacpp.avutil;' –