mpvプレーヤーをコンパイルする

mpvという名前の動画プレーヤーがある。かってVLCとしのぎを削ったmplayer/mplayer2の流れを汲むソフトだ。

筆者も長い間VLCを使ってきた。だが、ブルーレイディスクの再生時に音が途切れたりするのと、余計なファイルタイプまで開けると主張するのがうるさく、別のソフトを探していた。そこに現れたのがmpvである。

本稿では、そのmpvを利用するにあたってのコンパイル方法について述べる。(最終更新日:2024.12.21)

  1. 用意するもの
    XcodeとCommand line Tools for Xcodeが必要である。
    XcodeはMac App Storeから、
    Command Line Tools for Xcodeは、ターミナル.appでxcode-select –installを実行することでインストールできる。

  2. ディスクイメージの作成
    始めにディスクユーティリティを用いてmpv_compileというボリューム名のディスクイメージを作る。容量は4GBもあれば十分である。

  3. 環境変数のセット

    export VOLNAME=mpv_compile
    export TARGET="/Volumes/${VOLNAME}"
    export SRC="${TARGET}/src"
    export CMPL="${TARGET}/compile"
    export PATH=${TARGET}/bin:$PATH
    mkdir -p ${CMPL}
    mkdir -p ${SRC}
    export PKG_CONFIG_PATH=${TARGET}/lib/pkgconfig
    export LIBTOOL=`which glibtool`
    export LIBTOOLIZE=`which glibtoolize`
    #macOS Ctalina以降向け
    export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"

    git pullでvimエディタが開くのを防止(1回のみ)

    echo 'export GIT_MERGE_AUTOEDIT=no' >> $HOME/.bash_profile && . $HOME/.bash_profile
  4. pkg-configのコンパイル&インストール

    cd ${SRC}
    curl -LO https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
    cd ${CMPL}
    tar xf ${SRC}/pkg-config-0.29.2.tar.gz
    cd pkg-config-0.29.2
    ./configure --with-internal-glib
    make && sudo make install
  5. nasmのコンパイル&インストール(ffmpeg, libass等のコンパイルに用いる)

    cd ${SRC}
    rm nasm-*
    curl -LO https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/nasm-2.16.03.tar.xz
    cd ${CMPL}
    rm -fr nasm-*
    tar xf ${SRC}/nasm-2.16.03.tar.xz
    cd nasm-2.16.03
    ./configure --prefix=/usr/local
    make && sudo make install
  6. GNU M4のコンパイル&インストール(autocoonfのコンパイルに用いる)

    cd ${SRC}
    curl -LO https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz
    cd ${CMPL}
    tar xf ${SRC}/m4-1.4.19.tar.xz
    cd m4-1.4.19
    ./configure
    make && sudo make install
  7. autoconfのコンパイル&インストール(fribidiのコンパイルに用いる)

    cd ${SRC}
    curl -LO https://ftp.gnu.org/gnu/autoconf/autoconf-2.72.tar.xz
    cd ${CMPL}
    tar xf ${SRC}/autoconf-2.72.tar.xz
    cd autoconf-2.72
    ./configure
    make && sudo make install
  8. automakeのコンパイル&インストール(fribidiのコンパイルに用いる)

    cd ${SRC}
    curl -LO https://ftp.gnu.org/gnu/automake/automake-1.17tar.xz
    cd ${CMPL}
    tar xf ${SRC}/automake-1.17.tar.xz
    cd automake-1.17
    ./configure
    make && sudo make install
  9. libtoolのコンパイル&インストール(fribidiのコンパイルに用いる)(更新)

    cd ${SRC}
    curl -LO curl -LO https://repo.jing.rocks/gnu/libtool/libtool-2.5.4.tar.xz
    cd ${CMPL}
    tar xf ${SRC}/libtool-2.5.4.tar.xz
    cd libtool-2.5.4
    ./configure --program-prefix=g
    make && sudo make install
  10. python3のインストール(mpvのコンパイルに用いる)(更新)

    mpvは、バージョン0.33.0から、python2.xのサポートを止めた。よってpython3.xをインストールする必要がある。

    Python3ダウンロードリンク

    このpythonは、起動ディスク直下のライブラリにpython.frameworkとしてインストールされ、呼び出しはpython3となる。

    インストーラーパッケージの処理が終わった後、Finderで、/Applications/Python 3.12フォルダが開く。ここでフォルダ内のInstall Certificates.commandをダブルクリックして実行すること。

    なお、2024.12.21時点でのバージョンは3.13.1である。

  11. mesonビルドシステムのインストール(mpvのコンパイルに用いる)(更新)

    mesonビルドシステムはpip3を用いてインストールする。

    pip3 install meson

    アップデートの確認

    pip3 list -o

    アップデート

    pip3 install -U meson
  12. packagingモジュールのインストール(mpvのコンパイルに用いる)
    python 3.12以降でmpvをコンパイルする際に必要である。

    packagingモジュールはpip3を用いてインストールする。

    pip3 install packaging

    アップデートの確認

    pip3 list -o

    アップデート

    pip3 install -U packaging
  13. ninjaビルドシステムのインストール(mpvのコンパイルに用いる)

    mesonビルドシステムに加えてninjaビルドシステムも必要である。

    Ninjaダウンロードリンク

    ダウンロードしたファイルを解凍するとできるninjaバイナリをパスが通っている場所(筆者は/usr/local/bin)に入れる。

    なお、2024.12.21時点でのバージョンは1.12.1である。

    Big Sur以降では、以下のコマンドを実行すること。

    sudo xattr -dr com.apple.quarantine /usr/local/bin/ninja
  14. libpngのコンパイル&インストール

    cd ${SRC}
    rm libpng-*
    curl -LO http://prdownloads.sourceforge.net/libpng/libpng-1.6.44.tar.xz
    cd ${CMPL}
    rm -fr libpng-*
    tar xf ${SRC}/libpng-1.6.44.tar.xz
    cd libpng-1.6.44
    ./configure --prefix=${TARGET} --disable-shared
    make && make install
  15. freetypeの仮コンパイル&インストール

    freetypeとharfBuzzは、お互いが依存しあっているので、まず、harfBuzzなしでfreetypeをビルドする。

    cd ${SRC}
    rm freetype-*
    curl -LO https://download.savannah.gnu.org/releases/freetype/freetype-2.13.3.tar.xz
    cd ${CMPL}
    rm -fr freetype-*
    tar xf ${SRC}/freetype-2.13.3.tar.xz
    cd freetype-2.13.3
    ./configure --prefix=${TARGET} --disable-shared --with-harfbuzz=no
    make && make install
  16. harfBuzzのコンパイル&インストール

    freetypeとharfBuzzは、お互いが依存しあっているので、次に、harfBuzzをfreetypeを含めてビルドする。

    cd ${SRC}
    rm harfbuzz-*
    curl -LO https://github.com/harfbuzz/harfbuzz/releases/download/10.1.0/harfbuzz-10.1.0.tar.xz
    cd ${CMPL}
    rm -fr harfbuzz-*
    tar xf ${SRC}/harfbuzz-10.1.0.tar.xz
    cd harfbuzz-10.1.0
    meson setup --prefix ${TARGET} \
    --default-library static \
    --buildtype=release build
    cd build
    ninja
    ninja install
  17. freetypeのコンパイル&インストール

    freetypeとharfBuzzは、お互いが依存しあっているので、今度は、harfBuzzありでfreetypeをビルドする。

    cd ${CMPL}/freetype-2.13.3
    ./configure --prefix=${TARGET} --disable-shared
    make clean
    make && make install
  18. Expat XML Parserのコンパイル&インストール(更新)

    cd ${SRC}
    rm expat-*
    curl -LO https://github.com/libexpat/libexpat/releases/download/R_2_6_4/expat-2.6.4.tar.xz
    cd ${CMPL}
    rm -fr expat-*
    tar xf ${SRC}/expat-2.6.4.tar.xz
    cd expat-2.6.4
    ./configure --prefix=${TARGET} --disable-shared --enable-static
    make && make install
  19. libuuidのコンパイル&インストール

    fontconfigのコンパイルに必要である。

    cd ${SRC}
    curl -LO http://sourceforge.net/projects/libuuid/files/libuuid-1.0.3.tar.gz
    cd ${CMPL}
    tar xf ${SRC}/libuuid-1.0.3.tar.gz
    cd libuuid-1.0.3
    ./configure --prefix=${TARGET} --disable-shared --enable-static
    make && make install
    mv ${TARGET}/include/uuid/uuid.h ${TARGET}/include/uuid/uuid.h.bak
  20. fontconfigのコンパイル&インストール

    freetypeとexpatはfontconfigの依存ライブラリである。

    cd ${SRC}
    rm fontconfig-*
    curl -LO https://www.freedesktop.org/software/fontconfig/release/fontconfig-2.15.0.tar.xz
    cd ${CMPL}
    rm -fr fontconfig-*
    tar xf ${SRC}/fontconfig-2.15.0.tar.xz
    cd fontconfig-2.15.0
    ./configure --prefix=${TARGET} --disable-shared --disable-docs --enable-static --with-add-fonts=/Library/Fonts,~/Library/Fonts
    make && make install
  21. fribidiのコンパイル&インストール(更新)

    新規インストールの場合

    cd ${CMPL}
    git clone https://github.com/fribidi/fribidi.git
    cd fribidi
    ./autogen.sh
    ./configure --prefix=${TARGET} --disable-shared --enable-static
    make && make install

    更新インストールの場合

    cd ${CMPL}/fribidi
    git pull
    ./autogen.sh
    ./configure --prefix=${TARGET} --disable-shared --enable-static
    make clean
    make && make install
  22. libassのコンパイル&インストール

    fontconfigとFriBidiは、libassの依存ライブラリである。

    cd ${SRC}
    rm libass-*
    curl -LO https://github.com/libass/libass/releases/download/0.17.3/libass-0.17.3.tar.xz
    cd ${CMPL}
    rm -fr libass-*
    tar xf ${SRC}/libass-0.17.3.tar.xz
    cd libass-0.17.3
    ./configure --prefix=${TARGET} --disable-shared
    make && make install
  23. libxml2のコンパイルとインストール

    cd ${SRC}
    curl -LO curl -LO https://download.gnome.org/sources/libxml2/2.13/libxml2-2.13.5.tar.xz
    tar xf libxml2-2.13.5.tar.xz
    cd libxml2-2.13.5
    ./configure --prefix=${TARGET} --without-python
    make && make install
  24. libblurayのコンパイル&インストール

    freetype、fontconfigとlibxml2はlibblurayの依存ライブラリである

    cd ${SRC}
    rm libbluray-*
    curl -LO https://download.videolan.org/pub/videolan/libbluray/1.3.4/libbluray-1.3.4.tar.bz2
    cd ${CMPL}
    rm -fr libbluray-*
    tar xf ${SRC}/libbluray-1.3.4.tar.bz2
    cd libbluray-1.3.4
    ./configure --prefix=${TARGET} --disable-shared --disable-bdjava-jar
    make && make install
  25. libdav1dのコンパイルとインストール(更新)

    CFLAGSのセット/解除は、Apple Silicon Macのみ(Rosetta 2?)

    新規インストールの場合

    cd ${CMPL}
    git clone https://code.videolan.org/videolan/dav1d.git
    cd dav1d
    mkdir -p build
    export CFLAGS="-arch arm64"
    meson setup --prefix ${TARGET} \
    --default-library static \
    --buildtype=release build
    cd build
    ninja
    ninja install
    unset CFLAGS

    更新インストールの場合

    cd ${CMPL}/dav1d
    git pull
    export CFLAGS="-arch arm64"
    meson setup --wipe --prefix ${TARGET} \
    --default-library static \
    --buildtype=release build
    cd build
    ninja
    ninja install
    unset CFLAGS
  26. ffmpegのコンパイル&インストール(更新)

    新規インストールの場合

    cd ${CMPL}
    git clone git://source.ffmpeg.org/ffmpeg.git
    cd ffmpeg

    更新インストールの場合

    cd ${CMPL}/ffmpeg
    git pull
    make clean

    configureとmake(共通)

    ./configure \
    --prefix=${TARGET} \
    --pkg-config-flags=--static \
    --enable-libass \
    --enable-libbluray \
    --enable-libdav1d \
    --disable-programs \
    --disable-doc
    make && make install
  27. libplaceboのコンパイル&インストール(更新)
    libplaceboは、mpvから分離独立された必須モジュールである。

    新規インストールの場合

    cd ${CMPL}
    git clone https://github.com/haasn/libplacebo.git
    cd libplacebo
    git submodule update --init
    export CFLAGS="-arch arm64"
    export CPPFLAGS="-arch arm64"
    meson setup --prefix ${TARGET} \
    --default-library=static \
    build
    cd build
    ninja
    ninja install
    unset CFLAGS
    unset CPPFLAGS

    更新インストールの場合

    cd ${CMPL}/libplacebo
    git pull
    git submodule update --init
    export CFLAGS="-arch arm64"
    export CPPFLAGS="-arch arm64"
    meson setup --wipe --prefix ${TARGET} \
    --default-library=static \
    build
    cd build
    ninja
    ninja install
    unset CFLAGS
    unset CPPFLAGS
  28. luaスクリプト言語のコンパイルとインストール
    (現行バージョンではなく、5.2.xを用いる)
    luaはmpvビルドに必須ではない。yt-dlpと連携して、youtubeストリーミング動画を再生するために導入する。

    cd ${SRC}
    curl -LO https://www.lua.org/ftp/lua-5.2.4.tar.gz
    cd ${CMPL}
    tar xf ${SRC}/lua-5.2.4.tar.gz
    cd lua-5.2.4
    make macosx install INSTALL_TOP=${TARGET}

    mpvがluaパッケージを見つけられるようにlua.pcファイルを作成する。

    cat >${TARGET}/lib/pkgconfig/lua.pc <<EOF
    prefix=/Volumes/mpv_compile
    exec_prefix=\${prefix}
    libdir=\${prefix}/lib/
    includedir=\${prefix}/include
    Name: lua
    Description: lua
    Requires:
    Version: 5.2.4
    Libs: -L\${libdir} -llua
    Cflags: -I\${includedir}
    EOF
  29. luaだけでなくluaJITも必要である。よってluaJITをコンパイル&インストールする。(更新)

    新規インストールの場合

    git clone https://luajit.org/git/luajit.git
    cd luajit
    export MACOSX_DEPLOYMENT_TARGET=14.0
    make PREFIX=${TARGET}
    make install PREFIX=${TARGET}

    更新インストールの場合

    cd ${CMPL}/luajit
    git pull
    export MACOSX_DEPLOYMENT_TARGET=14.0
    make clean
    make PREFIX=${TARGET}
    make install PREFIX=${TARGET}

    3行目、MACOSX_DEPLOYMENT_TARGETは、お使いのmacOSバージョンに合わせる。

    ダイナミックローダブルライブラリの削除

    rm -v ${TARGET}/lib/libluajit*dylib
  30. mpvのコンパイルとインストール(更新)
    git headまたは、安定版リリースを用いる。

    CFLAGS/CPPFLAGSおよび-Dswift-flagsのセットは、Apple Silicon Macのみ(Rosetta 2?)

    安定版リリース Ver.0.39.0

    cd ${SRC}
    rm v0.3*
    curl -LO https://github.com/mpv-player/mpv/archive/refs/tags/v0.39.0.tar.gz
    cd ${CMPL}
    rm -fr mpv-*
    tar xf ${SRC}/v0.39.0.tar.gz
    cd mpv-0.39.0
    export CFLAGS="-arch arm64"
    export CPPFLAGS="-arch arm64"
    meson setup --prefix ${TARGET} \
    --default-library=static \
    -Dswift-flags="-target arm64-apple-macosx14.0" \
    build

    git head

    新規インストールの場合

    cd ${CMPL}
    git clone https://github.com/mpv-player/mpv.git
    cd mpv
    export CFLAGS="-arch arm64"
    export CPPFLAGS="-arch arm64"
    meson setup --prefix ${TARGET} \
    --default-library=static \
    -Dswift-flags="-target arm64-apple-macosx14.0" \
    build

    更新インストールの場合

    cd ${CMPL}/mpv
    git pull
    export CFLAGS="-arch arm64"
    export CPPFLAGS="-arch arm64"
    meson setup --wipe --prefix ${TARGET} \
    --default-library=static \
    -Dswift-flags="-target arm64-apple-macosx14.0" \
    build

    ビルドとインストール(共通)

    meson compile -C build
    meson install -C build

    macOSアプリケーションバンドルパッケージの作成

    meson compile -C build macos-bundle

    出来上がったコマンドライン版のmpvは${TARGET}/binに、GUI版のmpvは${TARGET}/compile/mpv/buildにある。筆者の場合、コマンドライン版は/usr/local/binに置いている。

    なお、確認の結果、mpvのコンパイルに用いるmesonビルドシステムのバージョン1.6.xには、依然として、コマンドライン版のmpvを${TARGET}/binにインストールする際、mpvのファイル属性を変更してしまうバグがあると思われる。
    これを避けるためには、${TARGET}/compile/mpv/buildにあるコマンドライン版のmpvを用いられたい。

    注意:
    macOS 10.14 Mojave以降でアプリケーションバンドルを起動しようとすると、次のようなダイアログが出る。これを拒否せずに、システム環境設定のアクセシビリティ項目で許可する必要がある。
        
    アクセス許可要求ダイアログ


    アクセシビリティ環境設定

参考サイト

以上

この投稿へのコメント

  1. kannagi said on 2023年7月16日 at 2:19 PM

    一通りやりましたが、
    26のビルドとインストール meson compile -C buildの所で、fatal error: ‘uchardet.h’ file not foundと出てビルドが失敗してしまいます。
    解決策をご提示いただけないでしょうか

    • xanadu6291 said on 2023年7月16日 at 4:56 PM

      kannagiさん、初めまして。xanadu6291です。
      ご指摘の現象を経験していないので、何とも言えないのですが、エラーが出ているのが、

      ../misc/charset_conv.c:32:10: fatal error: ‘uchardet.h’ file not found

      である場合、mpvのソースコード内miscフォルダに「charset_conv.c」というファイルがあり、このファイルに、「uchardet」がある場合は、そのヘッダーを参照すると書いてあります。
      「uchardet」は、エンコーディングを検出するライブラリのようです。もしかして、ご自身で入れた覚えはありませんか?

      • kannagi said on 2023年7月17日 at 5:33 AM

        ご返信ありがとうございます。解決できましたのでご報告をさせていただきます。
        問題箇所はご指摘のとおりでしたが、別のMacで試したらうまくいけました。
        最初はM2 ProのMac Miniでうまくいかず、M1 MaxのMacbook Proでは成功しました。
        OSなどは全て最新にしてあります。環境は同じのはずなので、自分には理由はよく分かりません。

        記事は大変分かりやすかったです。ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL