web-dev-qa-db-ja.com

Visual StudioでFFmpegを使用する

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

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

19
box

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

  1. ビルド済みの.lib/.dllファイルを使用すると、Visual Studioで作成されたバイナリはav * .dllファイルに依存します
  2. マイクロソフト以外のコンパイラを使用して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;
}

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

enter image description here

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

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

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

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

41
Roman R.