はじめに1. FFmepg
ffmepgは、オーディオとビデオの開発ツールです。
これは、デジタルオーディオ、ビデオ、およびオープンフレームのストリームに変換して処理する、記録のために設定することができます。LPL、GPLライセンスシステムを使用することで記録、変換、ストリームのオーディオおよびビデオへの完全なソリューションを提供します。
1.1コマンドライン・ツールの概要
FFmepgの使用は、最も基本的な内容である場合は、以下のは、我々は我々だけで呼び出すと、書かれたコードの内部にFFmpegとあまり慣れていない、いくつかの基本的なコマンドです。
ffmpge -i input.avi -r 24 output.avi
あなたは、出力24fpsのビデオがoutput.aviで、フレームレートは24になりinput.avi置くことができます
- ffmpegの
ようなコーデックのようなGIF、フォーマット変換、テーマなどにFFmpegを含む様々な機能、 - ffmpegの-allは、
アセンブリのffmpegとffmpegのツールが含まれています - ffplay
簡単な、ポータブルメディアプレーヤーを使用してのFFmpegとSDLライブラリを - ffplay-すべて
備えfflpayツールアセンブリとffmpegの - ffprobe
マルチメディアファイルに関する情報を表示します - ffprobe-すべて
備えffprobeツールアセンブリとのFFmpeg - ffserver
要求をストリーミングクライアントへのサービスの応答をストリーミング関連、ストリーミングメディアデータをクライアントに送信します - ffserver-すべて
備えffserverツールアセンブリとのFFmpeg
1.2コンポーネントの概要
- ユーティリティ
機能やツールが提供libavutilsの一般的な - ビデオスケーリングとピクセルフォーマットコンバータ
ビデオスケーリングとピクセルフォーマットコンバータ - オーディオリサンプラー
オーディオの再サンプリング - エンコーダおよびデコーダ
符号化および復号化のために - ビットストリームは、フィルタ
ストリームフィルタを - ミュクサーとのデミュクサー
データとデータの分離合成 - プロトコル
合意 - 入出力デバイス
の入力および出力デバイス - フィルタ
フィルタ
1.3クラスライブラリの概要
- libavutilは、
いくつかの一般的なユーティリティ関数が含まれています - libswscale
映像シーンをスケーリングするため、色変換マッピング、画像のカラーフォーマット変換制御又は - libswresample
オリジナルのオーディオ形式のトランスコーディング - libavcodecの
様々な種類の音/映像トランスコーディング、オーディオおよびビデオコーディングライブラリのコアライブラリです - libavformatは、
さまざまなオーディオおよびビデオフォーマットのパッケージを生成し、解析するために使用しました。 - libavdeviceの
収集ハードウェア、加速度、ディスプレイ。 - libavfilterに
オーディオとビデオフィルタの開発。 - libavresample
オーディオおよびビデオコーデックのデフォルトのカプセル化などが挙げられます。 - libpostproc
、画像デブロッキングなどのポストエフェクト処理のために、
1.4概要文書
- よくあるご質問
よくあるご質問 - サポート外部ライブラリ、フォーマット、コーデックや機能
拡張、フォーマット、コーデックまたはプロパティのサポートを - プラットフォーム固有の情報
プラットフォーム固有の情報 - 開発者向けドキュメント
開発の概要 - Gitのハウツー
Gitリポジトリ - 自動テスト的環境FFmpegの
FFmpegのテスト環境を自動化。
R20コンパイルFFmpegの下Windows10、NDK 2.
WindowsのコンパイルFFmpegのニーズツールではMSYS2
とYasm
MSYS2のMinGW-W64は、パックマンを統合Cygwin
:で、ダウンロードのアップグレード版MSYS2ダウンロード
Yasmはアセンブラです。アドレスでは:yasmダウンロード、対応するダウンロード.exe
ライン上のWindows \ System32フォルダの下に置くために、ダウンロード後にファイルを。
:MSYS2をインストールした後、約、あなたはこのブログの焦点見るためには、configure何かに必要なのffmpeg + x265をインストールコンパイルwindows10でmsys2
265が最初にインストール考えることができたように。
この場所(使用WIN10コンパイル)で、私は、数え切れないほどのピットを踏んでようやく出てコンパイル休むために数日を要しました。
私は、リストにここにすべてのピットを強化しました:
- 書籍、オンラインメソッドはコンパイルする古すぎる
などのFFmpegは3.xxのある、NDKまたはR10、R12などの本を、オンラインにFFmpegを使用し、NDK比較的古い、さ
NDKの新バージョンがR20で、ffmpegのは4.2です
その差は、ということであるGCCコンパイラの古いバージョンは、新しいバージョンが打ち鳴らすコンパイラを使用する必要があります。 - msys2について
あなたが使用できるコマンドラインツールです./
非常に強力な、のような、ファイル、その役割と端末のLinuxを実行するために
、我々はffmpegのをコンパイルするためにそれを使用します。 - 打ち鳴らすを使用する場合は、configureファイルを変更するつもりはなく、古いバージョンが、古いものと新しい改革法は完全に異なっています。
ここではどのように変更する理由をどのように探求することではありません。:特定のは、この記事(完全にOK)を参照することができ、コンパイルFFmpegの打ち鳴らします
2.1のconfigureファイルの編集
最初の目的の下で:コンパイルするffmpeg4打ち鳴らすコンパイラの後に使用するが、それは、我々はいくつかのステートメントを追加しない場合は、その設定ファイルの結果打ち鳴らす文のために、具体的には、プログラムを持っていない、次の打ち鳴らす、私たちは失敗したffmpegのコンパイル、後者をリードします。
最初はテキストを開いて、ffmpegののconfigureファイルで見つかりました。
検索--cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
の以下の彼のパーティーを:
--corss-prefix-clang=PREFIX use PREFIX for compilation clang tools [$cross_prefix]
そして、見つけCMDLINE_SET="..... corss_prefix
、それは行を追加します。下:
cross_prefix_clang
次に見つけます
set_default target_os
if test "$target_os" = android; then
cc_default="clang"
fi
ar_default="${cross_prefix}${ar_default}"
cc_default="${cross_prefix}${cc_default}"
cxx_default="${cross_prefix}${cxx_default}"
nm_default="${cross_prefix}${nm_default}"
pkg_config_default="${cross_prefix}${pkg_config_default}"
に置き換え:
set_default target_os
if test "$target_os" = android; then
cc_default="clang"
cxx_default="clang++"
fi
ar_default="${cross_prefix}${ar_default}"
cc_default="${cross_prefix_clang}${cc_default}"
cxx_default="${cross_prefix_clang}${cxx_default}"
nm_default="${cross_prefix}${nm_default}"
pkg_config_default="${cross_prefix}${pkg_config_default}"
ファイルを保存し、実行のルートディレクトリにffmpegのmsys2を使用する./configure
側のプロファイルを実行します
2.2 build_android.shスクリプトの書き込み
ルートに名前のディレクトリを作成しtemp
、フォルダ、コンパイル時に一時ファイルとして。
ルートディレクトリで呼ばれるスクリプト記述ffmpegのbuild_android.sh
コンパイルのffmpegを使用し、。
内部エディタ(メモノートを参照してください):
#!/bin/bash
make clean
#指定ndk路径
export NDK=C:/Users/msn/AppData/Local/Android/Sdk/ndk-bundle
#指定ffmpeg路径
export FFMPEG=C:/Users/msn/Desktop/ffmpeg-4.2.1
#指定临时文件夹
export TMPDIR=$FFMPEG/temp
#指定sysroot
export SYSROOT=$NDK/toolchains/llvm/prebuilt/windows-x86_64/sysroot
#指定平台
export PLATFORM=$NDK//toolchains/llvm/prebuilt/windows-x86_64
#指定cpu(如果用clang编译,必须指定cpu为armv7-a)
export CPU=armv7-a
#指定产出文件
export PREFIX=C:/Users/msn/Desktop/ffmpeg-4.2.1/android/$cpu
function build
{
./configure \
--prefix=$PREFIX \
--target-os=android \
--arch=$CPU \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-symver \
--enable-cross-compile \
--sysroot=$SYSROOT \
--cross-prefix=$PLATFORM/bin/arm-linux-androideabi- \
#指定为android28编译,当然也可以把28换成16以上的其他数字
--cross-prefix-clang=$PLATFORM/bin/armv7a-linux-androideabi28- \
--extra-cflags="-I$SYSROOT/usr/include" \
--extra-ldflags="-L$SYSROOT/usr/lib" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j2
make install
}
build
保存編集した後。
ルートディレクトリの下で動作./build_android
操作後の結果、ディレクトリに出力ファイルが表示されます。
どのような内部のは、コンパイル後の結果です。