ffmpeg コンパイルに関するメモ: ubuntu18.04 クロス コンパイル win-ffmpeg、インポート libx264、libx265、libfdk-aac、libfreetype、およびその他のサードパーティ ライブラリ

序文:

ubuntu18.04 のクロスコンパイル環境については、私の別のブログを参照してください: https://blog.csdn.net/linyibin_123/article/details/131214295。
コンパイルしたくない場合は、私がコンパイルしたライブラリを直接ダウンロードできます: https://download.csdn.net/download/linyibin_123/87966470

1. サードパーティのライブラリをコンパイルする

1.1 X264 コンパイル:

1) ダウンロード:

git clone https://code.videolan.org/videolan/x264.git

2) 構成:

PREFIX_X264=/home/yibin/ffmpeg/build/libx264-build-x86
./configure --cross-prefix=i686-w64-mingw32- --host=i686-w64-mingw32  --enable-pic --enable-static --prefix=/home/yibin/ffmpeg/build/libx264-build-x86

libx264 ライブラリを初めて構成する可能性があります: アセンブラの問題は見つかりませんでした。
解決策は、コマンドラインに --disable-asm を追加するか、nasm をインストールすることです。

3) コンパイル:
make && make install

1.2 X265 コンパイル:

1.2.1 ダウンロード:

http://ftp.videolan.org/pub/videolan/x265/

1.2.2 cmake のインストール:

libx265 をコンパイルするには cmake が必要です。以下のコマンドに従って cmake 環境をインストールします。

sudo apt install cmake
sudo apt-get install cmake-curses-gui
1.2.3 クロスコンパイルプロセス:

参考:https://blog.csdn.net/m0_37554445/article/details/123727198

1) 解凍します:

tar zxvf x265_3.2.1.tar.gz

2) x265_3.2/build ディレクトリに新しいフォルダー build_i686 を作成し、新しく作成したファイルに build.cmake というファイルを作成し、内容を次のように編集します。

#!cmake
# this one is important
SET(CMAKE_SYSTEM_NAME Windows)

SET(cross_prefix i686-w64-mingw32-)

# specify the cross compiler
SET(CMAKE_C_COMPILER   ${cross_prefix}gcc)
SET(CMAKE_CXX_COMPILER ${cross_prefix}g++)
SET(CMAKE_RC_COMPILER  ${cross_prefix}windres)
SET(CMAKE_ASM_NASM_COMPILER nasm)

SET(CMAKE_CXX_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
SET(CMAKE_C_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")

3) コマンド入力:

PREFIX_X265=/home/yibin/ffmpeg/build/libx265-build-x86
cmake -DCMAKE_TOOLCHAIN_FILE=build.cmake -DCMAKE_INSTALL_PREFIX=${PREFIX_X265} -DENABLE_SHARED=0 -DENABLE_PIC=1 ../../source 
make 
make install

4) 生成された x265.pc を変更し、 -lstdc++ -lgcc -lgcc -static を追加します。

Libs: -L${libdir} -lx265 -lstdc++ -lgcc -lgcc -static
Libs.private: -lstdc++ -lgcc -lgcc

1.3 libfdk-aac

    libfaac は、収集した PCM データを aac データにエンコードできる aac オーディオ エンコード ライブラリです。AAC は MP3 と比較して、より高い符号化効果と優れた符号化音質を備えたオーディオ符号化形式です。FFMpeg が AAC を形成できる 3 つのエンコーダは、aac: FFmpeg 独自の AAC エンコード実装、libaac: サードパーティ AAC エンコーダ、libfdk_aac: サードパーティ AAC エンコーダです。FDK-AAC ライブラリは、FFMpeg がサポートするサードパーティのエンコード ライブラリの中で最高品質の AAC エンコード ライブラリです。

1)
git クローンをダウンロード https://github.com/mstorsjo/fdk-aac.git

2) 構成

./configure --host=i686-w64-mingw32 --prefix=/home/yibin/ffmpeg/build/libfdkaac-build-x86 --enable-static --disable-shared --with-mp4v2=no

3) コンパイル
、メイク、インストール

1.4 libfreetype (ffmpeg フィルター関数に必要)

    オープン ソース フォント ライブラリは、オープン ソース、高品質、スケーラブル、カスタマイズ可能、ポータブルなフォント エンジンであり、ドットマトリックス、TrueType、OpenType、Type1、CID、CFF、Windows などの複数のフォント形式ファイルにアクセスするための統合インターフェイスを提供します。 FON/FNT、X11 PCFなど libfreetype は ffmpeg フィルタ関数に使用されます。
    freetype2 が依存する開発パッケージは zlib、bzip2、libpng、harfbuzz であるため、これらのライブラリを最初にインストールする必要があります

1.4.1 zlibのインストール

1) ダウンロード:
http://www.zlib.net/
2) 設定:
export CC=i686-w64-mingw32-gcc
./configure --prefix=/home/yibin/ffmpeg/build/zlib-build-x86 - -static
3) コンパイル:
make -j8 && make install
export CC=""

1.4.2 libpngのインストール
  1. ダウンロード:
    https://sourceforge.net/projects/libpng/files/libpng16/1.6.39/
  2. 構成:
    ./configure --host=i686-w64-mingw32 --prefix=/home/yibin/ffmpeg/build/libpng-build-x86 LIBS=-L/home/yibin/ffmpeg/build/zlib-build-x86 /lib CPPFLAGS=-I/home/yibin/ffmpeg/build/zlib-build-x86/include --disable-shared
  3. コンパイル:
    make -j8 && make install
    (make -j オプションは並列コンパイルを意味します。make -j8 を使用すると、make では最大 8 つのコンパイル コマンドを同時に実行できるようになり、CPU リソースをより効率的に使用できます)
1.4.3 libfreetypeのインストール

1) ダウンロード: http://download.savannah.gnu.org/releases/freetype/

2)構成:
export PKG_CONFIG_PATH=/home/yibin/ffmpeg/build/libpng-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/zlib-build-x86/lib/pkgconfig

./configure --host=i686-w64-mingw32 CC=i686-w64-mingw32-gcc --prefix=/home/yibin/ffmpeg/build/freetype2-build-x86

ここに画像の説明を挿入
3) コンパイル:
make -j8 && make install

1.5 libfontconfig (ffmpeg フィルター機能に必要)

libfontconfig は、フォント構成およびカスタマイズ用のソフトウェア ライブラリです。
駐在員によります。

1.5.1 外部インストール:

1) ダウンロード:
http://distfiles.macports.org/expat/
2) 設定およびコンパイル:

./configure --without-tests --without-examples --prefix=/home/yibin/ffmpeg/build/expat-build-x86 --host=mingw32 CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++

make && make install
1.5.2 libfontconfigのインストール

1)
https://www.freedesktop.org/software/fontconfig/release/をダウンロードします
。 2) 設定してコンパイルします。

export CC=i686-w64-mingw32-gcc

./configure --host=i686-w64-mingw32   --prefix=/home/yibin/ffmpeg/build/libfontconfig-build-x86 FREETYPE_LIBS='-lfreetype -L/home/yibin/ffmpeg/build/freetype2-build-x86/lib' FREETYPE_CFLAGS=-I/home/yibin/ffmpeg/build/freetype2-build-x86/include/freetype2

1.6 libfribidi (ffmpeg フィルター機能に必要)

1)
https://www.linuxfromscratch.org/blfs/view/svn/general/fribidi.htmlをダウンロードします
。 2) 設定してコンパイルします。

export CC=i686-w64-mingw32-gcc
./configure --host=i686-w64-mingw32   --prefix=/home/yibin/ffmpeg/build/libfribidi-build-x86 --enable-static --disable-shared

2. ffmpeg をコンパイルし、サードパーティ ライブラリを導入する

2.1 環境変数を構成します。

export PKG_CONFIG_PATH=/home/yibin/ffmpeg/build/libx264-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/libx265-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/libfdkaac-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/zlib-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/libpng-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/freetype2-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/libfribidi-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/expat-build-x86/lib/pkgconfig:/home/yibin/ffmpeg/build/libfontconfig-build-x86/pkgconfig

2.2 設定コマンド:

    注: libx264 および libx265 を追加しても、ffplay のコンパイルは有効になりません。これは、SDL ライブラリと libx264 および libx265 ライブラリの間の競合が原因である可能性があります。

./configure --enable-static --enable-shared --enable-version3 --enable-gpl --enable-libx264 --extra-cflags="-I/home/yibin/ffmpeg/build/libx264-build-x86/include" --extra-ldflags="-L/home/yibin/ffmpeg/build/libx264-build-x86/lib -static"  --enable-libx265 --extra-cflags="-I/home/yibin/ffmpeg/build/libx265-build-x86/include" --extra-ldflags="-L/home/yibin/ffmpeg/build/libx265-build-x86/lib" --enable-asm --enable-nonfree --enable-openssl --enable-protocols  --enable-protocol=https --extra-cflags="-I/home/yibin/ffmpeg/build/openssl-build-x86/include/openssl" --extra-ldflags='-static-libgcc' --extra-ldflags="-L/home/yibin/ffmpeg/build/openssl-build-x86/lib" --disable-pthreads --enable-w32threads --enable-cross-compile --target-os=mingw32 --arch=x86 --enable-small --prefix=/home/yibin/ffmpeg/build/ffmpeg-build-x86 --extra-version=avbuild  --disable-doc --enable-runtime-cpudetect --disable-ptx-compression --enable-mediafoundation --disable-vulkan  --disable-postproc --disable-htmlpages --cross-prefix=i686-w64-mingw32- --disable-indevs --disable-outdevs --disable-debug    --enable-hwaccels --enable-dxva2   --enable-libfreetype --extra-cflags="-I/home/yibin/ffmpeg/build/freetype2-build-x86/include" --extra-ldflags="-L/home/yibin/ffmpeg/build/freetype2-build-x86/lib"  --enable-libfdk-aac --extra-cflags="-I/home/yibin/ffmpeg/build/libfdkaac-build-x86/include" --extra-ldflags="-L/home/yibin/ffmpeg/build/libfdkaac-build-x86/lib" --enable-libfontconfig --extra-cflags="-I/home/yibin/ffmpeg/build/libfontconfig-build-x86/include" --extra-ldflags="-L/home/yibin/ffmpeg/build/libfontconfig-build-x86/lib" --enable-libfribidi --extra-cflags="-I/home/yibin/ffmpeg/build/libfribidi-build-x86/include/fribidi" --extra-ldflags="-L/home/yibin/ffmpeg/build/libfribidi-build-x86/lib" --pkg-config-flags="--static" 

ここに画像の説明を挿入
上記の設定手順:
1) –extra-ldflags="-L/home/yibin/ffmpeg/build/libx264-build-x86/lib-static"

ffmpeg默认链接的是动态库,所以会出现该编译错误:
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_default,函数 _X264_init 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_parse,函数 _X264_init 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_cleanup,函数 _X264_close 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_default_preset,函数 _X264_init 中引用了该符号

在–extra-ldflags中加了“-static”可以解决。

2)–pkg-config-flags=“–static”

--pkg-config-flags="--static" を追加すると、サードパーティ ライブラリを静的にリンクする ffmpeg の問題を解決できます。

2.3 コンパイル:

メイク&&メイクインストール

生成する:
ここに画像の説明を挿入

3. テスト機能

FFmpeg にインストールされているエンコーダーを表示:
ffmpeg -encoders

3.1 ffmpeg は libx264 エンコーディングを使用します

ffmpeg -i input-h265.mp4 -c:v libx264 -x264-params threads=1:br:1000:maxrate=1000:minrate=1000:bufsize=1000 out.mp4

ここに画像の説明を挿入

3.2 ffmpeg は libx265 エンコーディングを使用します

ffmpeg -i input-h264.mp4 -c:v libx265 -x265-params threads=1:br:1000:maxrate=1000:minrate=1000:bufsize=1000 out.mp4

ここに画像の説明を挿入

3.3 ffmpeg は libfdk-aac エンコーディングを使用します

ffmpeg -i iuput.wav -c:a libfdk_aac -b:a 128k out.m4a
FFmpeg は libfdk_aac を使用して input.wav を 128kbit/s の固定ビット レートに変換し、AAC out.m4a オーディオ ファイルにエンコードします
。 https://zhuanlan.zhihu.com/p/605496943

3.4 ffmpeg フィルタの使用

ffmpeg --help filter=drawtext を使用すると、フィルター関数のパラメーターを表示できます。

ドローテキストを使用したい場合は、コンパイル時に --enable-libfreetype を追加する必要があります。
複数のフォントを選択する場合は、--enable-libfontconfig を追加する必要があります。
フォントの変形も必要な場合は、--enable-libfribidi を追加する必要があります。

1) テキストを追加します。

ffmpeg -i input-h264.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':x=20:y=20" output.mp4

ここに画像の説明を挿入

2) 写真を追加します:

ffmpeg -i input.mp4 -vf "movie=logo.png[wm]; [in][wm]overlay=30:10[out]" output.mp4

ここに画像の説明を挿入

参考:
https://blog.csdn.net/migu123/article/details/129314333 https://blog.csdn.net/u014552102/article/details/104442111

3. その他のサードパーティライブラリの説明

3.1 librtmp

librtmp は、RTMP サーバーに接続し、RTMP ストリームを送受信するための API を提供するオープン ソースの C 言語ベースのライブラリです。ストリーミング メディア プレーヤー、ウェブキャスト、その他のアプリケーションの開発に使用できます。その主な特徴は、高速、安定性、低遅延です。
librtmp は、RTMP、RTMPS、RTMPE、RTMPTE 暗号化プロトコルなどの複数のプロトコルをサポートします。それに加えて、PProxy、PPlayer、appspot のプロキシ サーバー プロトコルもサポートしています。Linux では、librtmp を使用して開発されたアプリケーションは、Windows や Android などの複数のシステム プラットフォームをサポートできます。
librtmp のコア コードは、ffmpeg の libavformat ライブラリに基づいて実装されています。これは、libz、libssl、libcrypto などのサードパーティ ライブラリに依存しており、独自にコンパイルしてインストールする必要があります。

ダウンロード:
git clone git://git.ffmpeg.org/rtmpdump

説明:
make CROSS_COMPILE=i686-w64-mingw32- INC=”-I/home/yibin/ffmpeg/build/openssl-build-x86/include -I/home/yibin/ffmpeg/build/zlib-build-x86/include ” XLDFLAGS=”-L/home/yibin/ffmpeg/build/openssl-build-x86/lib -L/home/yibin/ffmpeg/build/zlib-build-x86/lib” SYS=mingw32 prefix=/home/yibin /ffmpeg/build/rtmp-build-x86 インストール

3.2 libmp3lame

mp3エンコードライブラリ

CFLAGS=-DFORCEINLINE= ./configure --host=i686-w64-mingw32 --prefix=/home/×××/Desktop/ffmpeg282/opensdk --enable-static --disable-shared --disable-frontend
make
makeインストール

3.3 libspeex

「Speex コーデックの libspeex パッケージには、すべての音声エンコードおよびデコード機能が含まれています。 libspeexdsp 静的ライブラリには、プリプロセッサ、音響エコー キャンセラー、リサンプラー、適応ジッター バッファーおよびその他の関連機能が含まれています。 testdenoise : ノイズ抑制をテストします。 testecho: 音響エコー キャンセレーションをテストします。

3.4 libxvid

Xvid MPEG-4 のカプセル化パート 2

3.5 リブセオラ

libtheora オプションは品質とビットレートに影響します

3.6 リブボルビス

「libvorbis は、Xiph によって開発されたオーディオ圧縮および解凍エンコーダです。一般に、Vorbis データは ogg ファイルにカプセル化されます。このライブラリは、Vorbis オーディオ データのデコードおよびエンコードに使用されます。ただし、エンコードされたオーディオ データを ogg ファイルから変換するには libogg も必要ですつまり、ogg ファイル内のオーディオ データをデコードするには、libogg および libvorbis と一緒に使用する必要があります。

3.7 libopenjpeg

./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared
"OpenJPEG は、C 言語に基づいた圧縮および解凍用のオープン ソース コーデックです JPEG2000 画像を圧縮しますJPEG2000は、他の画像形式と異なり、高圧縮率、高画質、多重解像度、可逆圧縮といった特徴があり、医療画像処理、衛星リモートセンシング画像処理、ハイビジョン映像伝送などの分野で広く利用されています。基本的なコーデック機能に加えて、データストリーミング、さまざまな圧縮オプション、他の形式との変換など、複数の高度な機能もサポートしています。

3.8 リボッグ

Ogg の正式名は OGGVobis (oggVorbis) で、MP3 などの音楽形式と同様のオーディオ圧縮形式です。Ogg は完全に無料、オープン、特許フリーです。OggVorbis ファイルには拡張子「.ogg」が付いています。Ogg ファイル形式は、古いエンコーダーやプレーヤーに影響を与えることなく、サイズと音質を継続的に改善できます。

./configure --host=i686-w64-mingw32 --prefix=/home/×××/Desktop/ffmpeg282/opensdk --enable-static --disable-shared
make
make install

3.9 libmfx qsv ハードソリューション関数

参照:
https://blog.csdn.net/haiyangyunbao813/article/details/107829583

https://github.com/lu-zero/mfx_dispatch
autoreconf -i
./configure --host=i686-w64-mingw32
make -j$(nproc)
make install DESTDIR=/usr/x86_64-w64-mingw32

./configure --cross-prefix=i686-w64-mingw32- --host=i686-w64-mingw32 --prefix=/home/yibin/ffmpeg/build/libmfx-build-x86 --enable-static --disable -共有

https://github.com/Intel-Media-SDK/MediaSDK/releases

    qsv は mfx ライブラリに依存します。libmfx は、Linux および Windows で Quick Sync ハードウェアを使用するための Intel 独自のライブラリです。Windows では、DXVA2/D3D11VA を使用するよりも高度な機能、特にエンコードにアクセスする主な方法です。Linux では、最大のスループットが必要な特定のユースケースに役立つ、多少異なる機能セットがあります。

おすすめ

転載: blog.csdn.net/linyibin_123/article/details/131462858