Windows 10のUbuntuアプリ18.04でFFmpegをビルドする

Build FFmpeg on windows on WSL Ubuntu 18.04
改めてWindows 10でFFmpegをビルドする方法をまとめました。
Windows Subsystem for LinuxのUbuntuを使ってWindows用FFmpegをビルドします。
この記事公開時でのUbuntuのバージョンは18.04です。


以前にもWindowsでFFmpegをビルドする手順を説明しました。
関連記事:Windows用FFmpegをWindows 10でビルドする (Bash on Ubuntu on Windows)

このころと手順は同じですが、Ubuntuのバージョンが変わりいろいろ問題が生じています。
関連記事:久しぶりにFFmpegのビルドに成功した

そこで、この記事公開時でのWSL環境でビルドする手順を確認してみました。
Bash on Ubuntu on WindowsはWindows Subsystem for Linux(WSL)と呼ばれるようになりました。Ubuntuの名前が無くなりより汎用的なイメージです。
WSL上でLinuxの一つとしてUbuntuが動きます。
Ubuntuのバージョンは18.04.1になっています。

WSLを使えるようにする所からビルド完了までをビデオにしました。ご自身で試す前のイメージトレーニングにどうぞ。


チャンネル登録もお願いします。

FFmpegビルド手順の解説

少し解説をしておきます。

Windows Subsystem for Linuxを有効にする

Windows 10でubuntuアプリを使うにはWSLを有効にする必要があります。
コントロールパネルの「windowsの機能の有効化または無効化」を開きます。
Check WSL
Windows 10では辿り着くのが面倒になってしまいました。
タスクバーの検索バーに
optionalfeatures.exe
と入れてしまうのが簡単でしょう。エクスプローラのアドレスバーに入れてもいいですし、コマンドプロンプトでももちろんいいです。

チェックしOKを押すと再起動を促されます。再起動します。

Ubuntuアプリのインストール

Ubuntuアプリをインストールします。Microsoftストアで"Ubuntu"を検索します。
何個か似たようなのが出てきますが、"Ubuntu"とだけ書かれたものでいいです。最新リリースが使えます。
この記事公開時ではバージョン18.04です。

Ubuntuの初期設定

Ubuntuアプリを実行します。
最初に数分間待たされます。Ubuntuの環境を作っているようです。

Ubuntuのユーザーを最初に登録します。このユーザーはWindowsとは関係ないユーザーになります。Ubuntuだけのユーザーです。
ビデオでは"user1"としました。

そしてパスワードを設定します。このパスワードはUbuntuの管理者権限を使うのに必要になります。

これでUbuntuを使えるようになりました。
始めはuser1のホームディレクトリでターミナル画面が動きます。

Ubuntuバージョンの確認

Ubuntuアプリのバージョンを確認します。
UbuntuなどLinuxのOSはバージョンが異なるとめんどくさい事がたくさん起きます。Webなどにある手順を真似る時は自分の使っているバージョンと同じかどうか確かめましょう。
$ uname -a
Linux xxxx 4.4.0-17134-Microsoft #285-Microsoft Thu Aug 30 17:31:00 PST 2018 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:        18.04
Codename:       bionic
ちなみにUbuntuの最新バージョンへアップデートするには
do-release-upgrade
とコマンドを入れます。

レポジトリ更新

Linuxの多くはレポジトリと言われる方法でいろいろなプログラムやライブラリをパッケージにして簡単にインストール/削除できるようになっています。
Linuxは多数のライブラリで動いており、そのライブラリは日々更新されます。複数のライブラリが連携して動きますが、依存するライブラリでバージョンが想定と異なるとエラーで動かなくなる事が良くあります。
レポジトリを使うとできるだけ新しいライブラリバージョンの組み合わせに一括して更新する事ができます。
最新のバージョンになるわけではありません。最新のバージョンの組み合わせで動くとは限らないからです。

レポジトリupdate

レポジトリデータベースを最新の状態にします。
sudo apt update

ライブラリの更新

レポジトリデータベースに基づきパッケージを最新の状態にします。
sudo apt upgrade

ビルド用ディレクトリの作成

Ubuntuアプリの初期状態ではホームディレクトリにファイルもサブディレクトリも無いようです。これでは不便そうなのでFFmpegをビルドするディレクトリを用意します。
"Downloads"ディレクトリを作り、そこに必要なファイルを置くようにします。
mkdir Downloads
cd Downloads

ffmpeg-windows-build-helpersのダウンロード

今回は"ffmpeg-windows-build-helpers"を使ってFFmpegをビルドします。
ffmpeg-windows-build-helpersをダウンロードします。
git clone https://github.com/rdp/ffmpeg-windows-build-helpers.git
cd ffmpeg-windows-build-helpers

ビルドに必要なライブラリパッケージのインストール

ビルドスクリプトを実行します。
./cross_compile_ffmpeg.sh
何やら英文が出て終わるでしょう。
Could not find the following execs (svn is actually package subversion, makeinfo is actually package texinfo, hg is actually package mercurial if you're missing them): 7z
Install the missing packages before running this script.
for ubuntu: $ sudo apt-get install subversion curl texinfo g++ bison flex cvs yasm automake libtool autoconf gcc cmake git make pkg-config zlib1g-dev mercurial unzip pax nasm gperf autogen bzip2 autoconf-archive -y
for gentoo (a non ubuntu distro): same as above, but no g++, no gcc, git is dev-vcs/git, zlib1g-dev is zlib, pkg-config is dev-util/pkgconfig, add ed...
for OS X (homebrew): brew install wget cvs hg yasm autogen automake autoconf cmake libtool xz pkg-config nasm bzip2 autoconf-archive p7zip
for debian: same as ubuntu, but also add libtool-bin and ed
for RHEL/CentOS: First ensure you have epel repos available, then run $ sudo yum install subversion texinfo mercurial libtool autogen gperf nasm patch unzip pax ed gcc-c++ bison flex yasm automake autoconf gcc zlib-devel cvs bzip2 cmake3 -y
for fedora: if your distribution comes with a modern version of cmake then use the same as RHEL/CentOS but replace cmake3 with cmake.
for linux native: libva-dev
必要な実行ファイルが無いと言われます。
よく見ると「ubuntuならこうしろ」と書いてあります。
そのまま実行します。
sudo apt-get install subversion curl texinfo g++ bison flex cvs yasm automake libtool autoconf gcc cmake git make pkg-config zlib1g-dev mercurial unzip pax nasm gperf autogen bzip2 autoconf-archive -y

この記事公開時、これだけではこのメッセージから抜け出せません。まだ足りないプログラムがあるようです。スクリプトを覗くと7zipが無いようです。
sudo apt-get install p7zip-full

ビルドスクリプトの実行

再び
./cross_compile_ffmpeg.sh
今度は動くでしょう。
次に32ビットか64ビットあるいは両方をビルドするのか聞かれます。
ビデオでは64ビットをビルドするので"3"を押しました。

今回はi7-2600kを約4.3GHzで動かしましたが、ビルドが完了するまで2時間10分ほどかかりました。

ビルドしたファイルの場所

ビルドが完了したらビルドしたファイルがどこにあるか表示されます。
しかしそのディレクトリはUbuntuアプリ上での場所です。Windowsではどこにあるのでしょうか?
今回の場合はここがホームディレクトリになります。ユーザーフォルダ内の隠しフォルダの下にあります。
C:\Users\[ユーザー名]\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home
このパスが誰でも同じなのか良くわかりません。Ubuntuを入れた時期により変わるかも?

この場所はubuntuユーザーのホームフォルダが作られる場所です。
FFmpegの実行ファイルはさらに下にあります。

圧縮された再配布用ファイルは
user1\Downloads\ffmpeg-windows-build-helpers\sandbox\redist
にあります。

実行ファイル単体、今回は64ビットのファイルは
user1\Downloads\ffmpeg-windows-build-helpers\sandbox\win64\ffmpeg_git
にあります。
ffmpeg.exe,ffplay.exeとffprobe.exeがあるでしょう。

他にx264.exeとx265.exeもできています。win64下のライブラリのフォルダを開いてみましょう。

まとめ

WSLのUbuntu 18.04でFFmpegをビルドできました。ビルドにはffmpeg-windows-build-helpersを使いました。

今回の難所は7zipをインストールする所でした。そのうちスクリプトの説明文が改善されるでしょう。

多くのライブラリを使うFFmpegのビルドは毎回成功するとは限りません。個々のライブラリの更新によりエラーが出る事があります。
今回のビデオを作る1日前は、あるライブラリの仕様変更でビルドに失敗していました。
修正は常に行われているのでエラーがでても数日ビルドを試せば成功する事があります。

ビルドスクリプトは最新のソースを自動的に取ってきてくれます。
2回目からの実行はクロスコンパイラをビルドしないので短い時間でビルドできるでしょう。
どうしてもおかしいと思うときはffmpeg-windows-build-helpersディレクトリ下のsandboxディレクトリを削除します。
rm -rf sandbox

WSLのおかげでLinuxでビルドする必要があるプログラムを簡単にビルドできるようになりました。

FFmpegは多くのライブライを使っておりライセンスなど権利関係は複雑です。この記事を参考にビルドしたファイルを商用に使ったり人に渡したりする場合はご自身の責任で行ってください。

コメント

最近のコメント

Threaded Recent Comments will be here.