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 に答える
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 に答える