0

ffmpeg を使用して特定のビデオ ファイルを読み込もうとしていますが、少し問題が発生しました。

これは、読み取りを開始するコードです。

int _tmain(int argc, _TCHAR* argv[])
{
    if (argc < 2)
    {
        fprintf( stderr, "Filename is needed as an argument\n" );  
        return 1;  
    }
    /* register all formats and codecs */
    av_register_all();
    AVFormatContext* fmt_ctx = NULL;
    /* open input file, and allocate format context */
    const char *src_filename = argv[1];
    if (avformat_open_input(&fmt_ctx, src_filename, NULL, NULL) < 0) {
        fprintf(stderr, "Could not open source file %s\n", src_filename);
        abort();
    }
    /* retrieve stream information */
    AVDictionary *      options;
    int res = avformat_find_stream_info(fmt_ctx, &options);
    if (res < 0) {
        fprintf(stderr, "Could not find stream information\n");
        abort();
    }
    ...
}

次のメッセージが一貫して表示されます。

[avi @ 005f2fe0] ストリーム 0 のコーデック パラメータが見つかりませんでした (ビデオ: なし (GREY / 0x59455247)、1280x1024): 不明なコーデック

'analyzeduration' および 'probesize' オプションの値を増やすことを検討してください

同じファイルに対して ffmpeg ツールを実行すると、同じメッセージが表示されます。

ただし、ビデオ ストリームの内容 (YUV8 形式の生のビデオ データ) は知っています。実際、それをオプションでffmpegに渡すと-c:v rawvideo問題ありません。再コーディング、変換など - ffmpeg は魔法のツールのようにそれを行います。

さて、問題は、ffmpeg api を使用する場合、そのオプションに相当するものは何ですか? ファイルのフレームにアクセスする必要があります。

4

1 に答える 1

0

avformat_find_stream_info の 2 番目のパラメータを NULL として渡すことができます。ストリーム情報として、ファイルに存在するストリームに関する情報を取得するためにいくつかのパケットを読み取ります。また、このメッセージはデコードを妨げません。後でパケットをデコードする予定がある場合は、これで問題ありません。デコードするには、avcodec_find_decoder と avcodec_open2() を呼び出す必要があります。

于 2013-09-04T08:17:19.907 に答える