23

Visual Studio 2010 の C++ プロジェクトで FFmpeg を使用しようとしています。ライブラリを静的にリンクされたファイルとして含めたいです。libavcodec/api-example.c のような単純なプログラムはエラーなしでコンパイルされ、起動時にエラー ビューにリンカ エラーは表示されません。ただし、アプリケーションを起動すると、avutil-51.dll が見つからないというメッセージ ボックスが表示されます。それを修正する方法についてのヒントはありますか?

http://ffmpeg.zeranoe.com/builds/の最新の開発ビルドを使用しました。次に、追加のインクルード ディレクトリとして include を指定し、追加の依存関係として avcodec.lib;avfilter.lib;avformat.lib;avutil.lib を指定し、追加のライブラリ ディレクトリとして lib を指定しました。

4

1 に答える 1

50

FFmpeg を使用すると、次のいずれかを実行できます。

  1. ビルド済みの .lib/.dll ファイルを使用すると、Visual Studio で生成されたバイナリは av*.dll ファイルに依存します
  2. Microsoft 以外のコンパイラを使用して FFmpeg をソース コードから静的ライブラリにコンパイルし、Visual Studio プロジェクトにリンクします (この場合は LGPL/GPL ライセンスに注意してください)。

上記の項目 1 に従ってプロジェクトをビルドしました。バイナリで av*.dll 依存ファイルを使用して再配布し、それを機能させる必要があります。

Zeranoe の「静的」は、ライブラリが のようなバイナリに静的にリンクされていることを意味しますffmpeg.exe.libこれをバイナリにリンクする静的ライブラリと混同しないでください。Zeranoe はそのようなものを提供しません。

Zeranoeには、次のようなアーカイブがあります。

  • 「共有」ffmpeg-20120726-git-236ecc3-win32-shared.7z:
  • bin/avcodec-54.dll
  • bin/avutil-51.dll
  • 「開発者」ffmpeg-20120726-git-236ecc3-win32-dev.7z:
  • lib/avcodec.lib
  • lib/avutil.lib

「共有」アーカイブには、DLL ライブラリへの動的リンクを使用してビルドされた FFmpeg があります。「Dev」アーカイブには、共有アーカイブで ffmpeg.exe が行うように、プロジェクトでリンクするために使用できる lib ファイルがあります。

したがって、Visual Studio プロジェクトは次のように単純化できます (完全なソースをここで参照してください)。

extern "C" 
{
        // NOTE: Additional directory ..\zeranoe.com\dev\include gets to the files
        #include "libavcodec\avcodec.h"
}

// NOTE: Additional directory ..\zeranoe.com\dev\lib gets to the files
#pragma comment(lib, "avcodec.lib")

// NOTE: Be sure to copy DLL files from ..\zeranoe.com\shared\bin to the directory of 
//       the FFmpegApp.exe binary
int _tmain(int argc, _TCHAR* argv[])
{
        _tprintf(_T("Trying avcodec_register_all... "));
        avcodec_register_all();
        _tprintf(_T("Done.\n"));
        return 0;
}

"Dev" アーカイブをdevVisual Studio プロジェクトのサブディレクトリに抽出dev\includeし、追加のインクルード パスに追加します。これはバイナリを構築するのに十分であり、以下に依存しav*.dllます:

ここに画像の説明を入力

これは、「共有」アーカイブを抽出し、そこから DLL をbinバイナリのディレクトリにコピーするときです。そして、あなたのアプリはそこから動作します:

C:\FFmpegApp\Release>FFmpegApp.exe
Trying avcodec_register_all... Done.

2016 年 1 月 20 日更新: リポジトリ内のプロジェクトは、Visual Studio 2013 (古い VS 2010 コード) にアップグレードされ、現在の Zeranoe ビルドに対してチェックされます。サンプルと説明書は良好な状態を保っています。

Win32Visual Studio でのビルドでは、Zeranoe の 32 ビット ファイルを使用することを想定していることに注意してください。64 ビット バージョンをビルドするには、それぞれのファイルをダウンロードし、Visual C++ プロジェクトをそれぞれセットアップしてビルドしますx64(または、両方をダウンロードし、両方の構成をセットアップし、include/lib パスをそれぞれ構成するのが最適です)。以下のコメントで説明されているように、ビット数が一致しないとエラーが発生します。

2021 年 7 月 20 日更新: (以下のコメントから抜粋) Zeranoe ビルドは利用できなくなりました。公式に承認された優れた代替手段は、BtbN による Windows ビルドです。このチュートリアルには(...)-win64-gpl-shared.zipまたはファイルが必要です。(...)-win64-lgpl-shared.zip

于 2012-07-28T14:11:40.150 に答える