10

默认情况下,libavformat 将错误消息写入,例如stderr

Estimating duration from bitrate, this may be inaccurate

我怎样才能关闭它?或者更好的是,将它传递给我自己整洁的日志记录功能?

编辑:将 stderr 重定向到其他地方是不可接受的,因为我需要它用于其他日志记录目的,我只希望 libavformat 不写入它。

4

4 回答 4

11

查看代码,您似乎可以通过为函数编写自己的回调函数来更改行为av_log

libavutil/log.h中对该函数的描述:

如果级别小于或等于当前的av_log_level,则将指定的消息发送到日志。默认情况下,所有日志消息都发送到 stderr。可以通过设置不同的 av_vlog 回调函数来更改此行为。

API 提供了一个函数,允许您定义自己的回调:

void av_log_set_callback(void (*)(void*, int, const char*, va_list));

在您的情况下,您可以编写一个简单的回调函数来完全丢弃消息(或将它们重定向到专用日志等),而不会污染您的stderr流。

于 2011-10-16T20:47:44.030 回答
8

试一试av_log_set_level(level)

于 2011-10-27T10:48:56.970 回答
4
  1. 包含这个头文件

    #include <libavutil/log.h>
    
  2. 添加此代码将禁用日志

    av_log_set_level(AV_LOG_QUIET);
    
于 2018-09-10T07:57:13.000 回答
1

您可以将它们重定向到自定义文件,它将重定向所有 cerr 条目

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
  ofstream file("file.txt");

  streambuf *old_cerr = cerr.rdbuf();

  cerr.rdbuf (file.rdbuf());

  cerr << "test test test" << endl; // writes to file.txt

  // ...

  cerr.rdbuf (old_cerr); // restore orginal cerr

  return 0;
}

编辑:编辑问题后,我警告上面的代码它将所有cerr入口流重定向到file.txt

我对libavformat不熟悉,但是如果它的代码是不可更改的,你可以cerr在调用库的api之前临时重定向到一个文件并再次将它重定向到原始文件cerr。(但这是丑陋的方式)

于 2011-10-16T19:52:46.863 回答