FFmpegソースコードコンパイル環境構築

ffmpeg はビデオ開発に最も一般的に使用されているオープン ソース ソフトウェアです。ffmpeg は強力で多用途です。考えられるビデオ開発に関連するほぼすべての操作を提供します。多くの商用ソフトウェアが ffmpeg に基づいて開発およびカスタマイズされています。

FFmpeg: FFmpeg は、ビデオ、オーディオ、その他のマルチメディア ファイルとストリームを処理するためのライブラリとプログラムの膨大なソフトウェア スイートで構成される無料のオープンソース プロジェクトです。その中核となるのは FFmpeg プログラム自体であり、ビデオ ファイルとオーディオ ファイルをコマンド ライン ベースで処理するために設計されており、フォーマットのトランスコーディング、基本的な編集 (トリミングと連結)、ビデオ スケーリング、ビデオ ポスト プロダクション エフェクト、および標準への準拠に広く使用されています。 (SMPTE、ITU) 。抜粋自ウィキペディア

ffmpeg には巨大な関数があり、開発者に豊富な関数ライブラリ呼び出しを提供します。一般的に使用される関数ライブラリは次のとおりです。

  • libavcodec - さまざまな形式のオーディオおよびビデオ コーデック

  • libavformat - さまざまなオーディオおよびビデオのパッケージ化フォーマットの生成および分析。デコードに必要な情報の取得、オーディオおよびビデオ データの読み取りなどの機能が含まれます。

  • libswscale - ビデオ画像スケーリング用のライブラリ。色空間変換と画像形式変換の関数を提供します。

  • libavutil - 算術演算、文字演算などを含むツール ライブラリ。

  • libpostproc - ビデオの前処理用ライブラリ

  • libpostproc - フィルター関数ライブラリ

  • libavdevice - キャプチャおよび再生デバイスへのアクセスを提供します

さらに、ffmpeg は開発者に豊富なコマンド ライン ツールも提供します。ffmpeg に慣れていない開発者は、まずこれらのコマンド ライン ツールを使用して、ffmpeg の基本機能を一般的に理解することができます。正式な説明を始めましょう。

1.ffmpegのインストール

ここではUbuntu 16 LTS版を例にFFmpegのインストールを紹介します。

1.1 PPA ソースの追加

ffmpeg 4 は最新のリリース バージョンです。このバージョンをインストールする場合は、PPA ソースを追加する必要があります。次のコマンドを実行して、PPA ウェアハウスを Ubuntu システムに追加します

sudo add-apt-repository ppa:jonathonf/ffmpeg-4

1.2 ffmpegをインストールする

次のコマンドでffmpegをインストールします

sudo apt-get update
sudo apt-get install ffmpeg

x264などの関連するダイナミックライブラリファイルも一緒にインストールされることがわかります。

sudo apt-get install ffmpeg
[sudo] password for ron: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libaom0 libavcodec58 libavdevice58 libavfilter7 libavformat58 libavresample4 libavutil56 libbs2b0 libchromaprint1 libcodec2-0.4
  libflite1 liblilv-0-0 libmysofa1 libnorm1 libopenjp2-7 libopenmpt0 libpgm-5.2-0 libpocketsphinx3 libpostproc55 librabbitmq4
  librubberband2v5 libserd-0-0 libsodium18 libsord-0-0 libsphinxbase3 libsratom-0-0 libsrt1-gnutls libswresample3 libswscale5
  libvdpau1 libvidstab1.1 libx264-155 libx265-192 libzmq5 mesa-vdpau-drivers vdpau-driver-all
Suggested packages:
  ffmpeg-doc serdi sordi libvdpau-va-gl1 nvidia-vdpau-driver nvidia-legacy-340xx-vdpau-driver
Recommended packages:
  pocketsphinx-hmm-en-hub4wsj | pocketsphinx-hmm-zh-tdt | pocketsphinx-hmm-en-tidigits pocketsphinx-lm-en-hub4
  | pocketsphinx-lm-zh-hans-gigatdt | pocketsphinx-lm-zh-hant-gigatdt
The following NEW packages will be installed:
  ffmpeg libaom0 libavcodec58 libavdevice58 libavfilter7 libavformat58 libavresample4 libavutil56 libbs2b0 libchromaprint1
  libcodec2-0.4 libflite1 liblilv-0-0 libmysofa1 libnorm1 libopenjp2-7 libopenmpt0 libpgm-5.2-0 libpocketsphinx3 libpostproc55
  librabbitmq4 librubberband2v5 libserd-0-0 libsodium18 libsord-0-0 libsphinxbase3 libsratom-0-0 libsrt1-gnutls libswresample3
  libswscale5 libvdpau1 libvidstab1.1 libx264-155 libx265-192 libzmq5 mesa-vdpau-drivers vdpau-driver-all
0 upgraded, 37 newly installed, 0 to remove and 233 not upgraded.
Need to get 29.2 MB of archives.
After this operation, 106 MB of additional disk space will be used.
Do you want to continue? [Y/n]

1.3 ffmpegが正常にインストールされていることを確認する

ffmpeg のインストールが完了したら、ffmpeg -version コマンドを使用して FFmpeg のバージョン番号を出力できます。正常に出力できれば、ffmpeg のインストールが成功したことを確認できます。

ffmpeg -version

2. ffmpeg ソースコードのコンパイル

ffmpeg ソース コードのコンパイルには複雑なコンパイル環境は必要ありません。基本的なコンパイラと依存ライブラリのみが必要です。ffmpeg は複数の主流プラットフォームの開発をサポートしています。ここでは主に Linux 環境でコンパイルする方法について説明します。

2.1 ffmpegコンパイル環境の準備

ここでは例として ubuntu システムを取り上げますが、他の Linux ディストリビューションの原理も同様です。Linux システムでコンパイルするには、gcc make およびその他のコンポーネントのインストールが必要です。これらは次のコマンドでインストールできます。

sudo apt-get install build-essential

gcc -v コマンドを入力して、現在の gcc バージョン番号を照会します。

gcc -v

2.2 ffmpeg依存ライブラリの準備

ffmpeg ソース コードのコンパイルは、主に x264 と yasm の 2 つのコンポーネントに依存しています。検索エンジンでソース コード パッケージを見つけるのは非常に簡単です。ソース コード パッケージのコンパイルとインストールの方法は、組み込み環境でも使用できます。

x264: x264 is a free software library and application for encoding video streams into the H.264/MPEG-4 AVC compression format, and is released under the terms of the GNU GPL.

Yasm: Yasm is a complete rewrite of the NASM assembler under the “new” BSD License,Yasm currently supports the x86 and AMD64 instruction sets, accepts NASM and GAS assembler syntaxes, outputs binary, ELF32, ELF64, 32 and 64-bit Mach-O, RDOFF2, COFF, Win32, and Win64 object formats, and generates source debugging information in STABS, DWARF 2, and CodeView 8 formats.

ソースパッケージのリンクアドレスは以下のとおりです。

FFmpeg のダウンロード /pub/videolan/x264/snapshots/ の インデックス ダウンロード - Yasm モジュラー アセンブラー プロジェクト

[学習アドレス]: FFmpeg/WebRTC/RTMP/NDK/Android オーディオおよびビデオ ストリーミング メディアの高度な開発
[記事の特典]: より多くのオーディオおよびビデオ学習教材パッケージ、Dachang インタビューの質問、技術ビデオ、および学習ロードマップを無料で受け取ります。 C/C++、Linux、FFmpeg webRTC rtmp hls rtsp ffplay srs など) 必要な場合は、 1079654574 をクリックしてグループに参加して受信できます~

ここでテストしたソースコードのバージョンは次のとおりです。

x264-0.148 (x264 snapshot-20170307-2245)
yasm-1.3.0
ffmpeg-3.2.4

このうち、x264 は h.264 エンコーダのサポートを提供し、アセンブリ最適化のサポートには yasm が使用されます。アセンブリ最適化のサポートが必要ない場合は、コンパイル オプション (-disable-yasm) で yasm をオフにすることができます。

Linux では、コンパイル オプションは次の方法で構成できます。

2.2.1 yasm 構成の構成

./configure --prefix=/usr/local/3rdparty/yasm

2.2.2 x264 構成の構成

./configure --prefix=/usr/local/3rdparty/x264 --enable-shared --enable-static --enable-yasm

Makefile が生成されたら、make コマンドを入力してコンパイル処理を開始し、コンパイルが完了したら、make install コマンドを実行してインストールします。

make 
sudo make install

x264 と yasm のコンパイルが完了したら、システムは対応するインストール場所を見つけられる必要があります。/etc/profile 構成ファイルを開き、ファイルの最後に各コンポーネントの環境変数を追加します。

# YASM
export PATH="$PATH:/usr/local/3rdparty/yasm/bin/"
export LD_LIBRARY_PATH=/usr/local/3rdparty/yasm/lib:$LD_LIBRARY_PATH
​
# X264
export PATH="$PATH:/usr/local/3rdparty/x264/bin/"
export LD_LIBRARY_PATH=/usr/local/3rdparty/x264/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/3rdparty/x264/lib/pkgconfig:$PKG_CONFIG_PATH

source /etc/profile コマンドを使用して環境変数を更新します

source /etc/profile

環境変数の構成が完了したら、次のコマンドを使用して、x264 などの依存コンポーネントが正常にコンパイルおよびインストールされているかどうかを確認できます。

x264 --version
x264 0.148.x
built on May 22 2019, gcc: 5.4.0 20160609
x264 configuration: --bit-depth=8 --chroma-format=all
libx264 configuration: --bit-depth=8 --chroma-format=all
x264 license: GPL version 2 or later
​
yasm --version
yasm 1.3.0
Compiled on May  6 2015.
Copyright (c) 2001-2014 Peter Johnson and other Yasm developers.
Run yasm --license for licensing overview and summary.

2.3 ffmpeg ソースコードのコンパイル

Linux では、コンパイル オプションは次の方法で構成できます。

2.3.1 ffmpeg 構成の設定

./configure --prefix=/usr/local/3rdparty/ffmpeg --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags=-I/usr/local/3rdparty/x264/include --extra-ldflags=-L/usr/local/3rdparty/x264/lib

Makefile が生成されたら、make コマンドを入力してコンパイル処理を開始し、コンパイルが完了したら、make install コマンドを実行してインストールします。

make 
sudo make install

コンパイルが完了すると、ffmpeg、ffserver、ffprobe などのコマンド ライン ツールがソース コード ディレクトリに生成されます。

  • ffmpeg - ビデオ コーデック、ビデオ トランスコーディング、ビデオ形式変換、ビデオ ストリーミング、その他の機能をサポートするコマンド ライン ツール

  • ffserver - コマンド ライン ツールは ffmpeg と連携し、クライアントのストリーミング メディア要求に応答し、ストリーミング メディア データをクライアントに送信する役割を果たします。

  • ffprobe - マルチメディア ファイルの説明情報を表示するコマンド ライン ツール

2.4 ffmpeg 環境変数の設定

ffmpeg とその依存環境のコンパイルが完了したら、システムは対応するインストール場所を見つけることができる必要があります。/etc/profile 構成ファイルを開き、ファイルの最後に各コンポーネントの環境変数を追加します。

# FFMPEG
export PATH="$PATH:/usr/local/3rdparty/ffmpeg/bin/"
export LD_LIBRARY_PATH=/usr/local/3rdparty/ffmpeg/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/3rdparty/ffmpeg/lib/pkgconfig:$PKG_CONFIG_PATH

source /etc/profile コマンドを使用して環境変数を更新します

source /etc/profile

ffmpeg -version コマンドを使用してバージョン番号を出力します。ここで使用されている ffmpeg はバージョン 3.2.4 です。

ffmpeg -version
ffmpeg version 3.2.4 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
configuration: --prefix=/usr/local/3rdparty/ffmpeg --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags=-I/usr/local/3rdparty/x264/include --extra-ldflags=-L/usr/local/3rdparty/x264/lib
libavutil      55. 34.101 / 55. 34.101
libavcodec     57. 64.101 / 57. 64.101
libavformat    57. 56.101 / 57. 56.101
libavdevice    57.  1.100 / 57.  1.100
libavfilter     6. 65.100 /  6. 65.100
libswscale      4.  2.100 /  4.  2.100
libswresample   2.  3.100 /  2.  3.100
libpostproc    54.  1.100 / 54.  1.100

ffmpeg ソース コード パスの下で、ldd コマンドを使用して、ffmpeg が依存するすべてのコンポーネントをクエリできます。コンポーネントの一部が見つからない場合は、この記事を参照して、環境が設定されていない依存コンポーネントがあるかどうかを確認する必要があります。変数。同様に、ldd コマンドを使用して、対応するパス内の x264 などのコンポーネントの依存関係をクエリすることもできます。

ldd ffmpeg
    linux-vdso.so.1 =>  (0x00007ffc24f84000)
    libavdevice.so.57 => /usr/local/3rdparty/ffmpeg/lib/libavdevice.so.57 (0x00007fc17da42000)
    libavfilter.so.6 => /usr/local/3rdparty/ffmpeg/lib/libavfilter.so.6 (0x00007fc17d613000)
    libavformat.so.57 => /usr/local/3rdparty/ffmpeg/lib/libavformat.so.57 (0x00007fc17d1f3000)
    libavcodec.so.57 => /usr/local/3rdparty/ffmpeg/lib/libavcodec.so.57 (0x00007fc17bcbf000)
    libpostproc.so.54 => /usr/local/3rdparty/ffmpeg/lib/libpostproc.so.54 (0x00007fc17baa3000)
    libswresample.so.2 => /usr/local/3rdparty/ffmpeg/lib/libswresample.so.2 (0x00007fc17b887000)
    libswscale.so.4 => /usr/local/3rdparty/ffmpeg/lib/libswscale.so.4 (0x00007fc17b5ff000)
    libavutil.so.55 => /usr/local/3rdparty/ffmpeg/lib/libavutil.so.55 (0x00007fc17b385000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc17b07c000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc17ae5f000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc17aa95000)
    libXv.so.1 => /usr/lib/x86_64-linux-gnu/libXv.so.1 (0x00007fc17a890000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fc17a556000)
    libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fc17a344000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fc17a122000)
    libxcb-shm.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007fc179f1e000)
    libxcb-xfixes.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0 (0x00007fc179d16000)
    libxcb-shape.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shape.so.0 (0x00007fc179b12000)
    libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007fc179812000)
    libSDL2-2.0.so.0 => /usr/local/3rdparty/sdl2/lib/libSDL2-2.0.so.0 (0x00007fc1794df000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc1792c5000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc1790c1000)
    libx264.so.148 => /usr/local/3rdparty/x264/lib/libx264.so.148 (0x00007fc178d1b000)
    liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fc178af9000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fc17dc5a000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fc1788f5000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fc1786ef000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc1784e7000)

元のリンク: ffmpeg ソース コード コンパイル環境 construction_ffmpeg コンパイル環境_breakpointlab のブログ - CSDN ブログ

おすすめ

転載: blog.csdn.net/irainsa/article/details/130630343