Raveler/ffmpeg-cpp

A clean, easy-to-use C++ wrapper around the ffmpeg libraries

概要

ffmpeg-cpp は FFmpeg ライブラリをラップする C++ ライブラリであり、一般的なビデオ/オーディオタスク(メディアファイルの読み込み、フィルタリング、エンコード、書き込みなど)のためのクリーンで使いやすいインターフェースを提供します。FFmpeg コマンドラインツールを実行する代わりに、C++ 関数を直接呼び出します。また、DllImport を介して C# プロジェクトから呼び出せる簡略化されたインターフェースも含まれています。

機能

わずか数行の C++ コードで、ビデオファイルの読み込み、フィルタ(スケーリングや回転など)の適用、新しいファイルへの保存が可能です。README には、デマルチプレクス(コンテナの読み込み)、デコード、フィルタリング、エンコード、マルチプレクス(書き出し)という完全なパイプラインの例が示されています。

入手方法

  • プラットフォーム: 現在は Windows と Visual Studio のみが公式にサポートされています。作者によればコード自体はプラットフォーム非依存ですが、CMake/Linux の経験が不足しているため、Linux ビルドはまだ提供されていません。
  • インストール: リポジトリをクローンし、Zeranoe から適切な FFmpeg dev(ヘッダーおよびインポートライブラリ用)と shared(DLL 用)ビルド(FFmpeg 4.1 でテスト済み)をダウンロードして ffmpeg フォルダに展開し、Visual Studio ソリューションを開いてビルドします。これにより、独自のプロジェクトで使用するための .lib と include フォルダが生成されます。

使用方法

C++ の場合

Muxer、VideoCodec、VideoEncoder、Filter、Demuxer などのオブジェクトを作成して処理パイプラインを構築します。README には、以下の手順を行う完全な例が示されています:

  1. 出力ファイル用の muxer を作成する。
  2. コーデック(例:MPEG‑2)とエンコーダーを作成する。
  3. フィルタ(例:scale=640:150,transpose=cclock,vignette)を作成し、エンコーダーを接続する。
  4. demuxer で入力ファイルを読み込み、最適なビデオストリームをフィルタに送信する。
  5. パイプラインを準備し、完了するまでフレームをステップ実行し、muxer を閉じて終了する。

複雑さを軽減する簡略化されたインターフェースもあり、ハンドルを作成してビデオ/オーディオストリームとフィルタを追加し、ffmpegCppGenerate を呼び出すだけです。このインターフェースにより、C# との相互運用が容易になります。

C# の場合

簡略化されたインターフェースは、C スタイルの関数を持つ DLL (simple_interface.dll) として公開されています。README には、[DllImport] を使用して ffmpegCppCreate、ffmpegCppAddVideoStream、ffmpegCppAddVideoFilter、ffmpegCppGenerate などの関数を呼び出す完全な C# の例が記載されています。エラーチェックは ffmpegCppIsError および ffmpegCppGetError を通じて行われます。

存在理由

作者は、FFmpeg の実行ファイルを別プロセスとして起動することなく、プログラムに FFmpeg を統合する必要がありました。外部実行ファイルの起動は、ウイルス対策ソフトによってブロックされたり、その他の問題を引き起こす可能性があるためです。FFmpeg ライブラリを直接リンクすることで、機能がアプリケーションに組み込まれます。

制限事項と今後の計画

  • プラットフォームサポート: 現在は Windows のみ。ロードマップには Linux/Mac ビルドサポートの追加が記載されています。
  • テスト: 一般的な機能についてはテストされていますが、適切なユニットテストはまだ導入されていません。
  • コーデック/コンテナの網羅性: 一部でテスト済みですが、ロードマップではより多くのコーデックとコンテナでのテストが求められています。

ライセンス

このライブラリは LGPL の下でライセンスされています。ただし、FFmpeg 自体はビルド方法に応じて LGPL または GPL になります。GPL バージョンの FFmpeg を使用する場合、ffmpeg-cpp を使用するプロジェクトも GPL に準拠する必要があります。


上記の情報はすべてプロジェクトの README から直接引用したものです。それ以外の追加や推論は行っていません。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト