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

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

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

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

  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.01/nasm-2.16.01.tar.xz
                cd ${CMPL}
                rm -fr nasm-*
                tar xf ${SRC}/nasm-2.16.01.tar.xz
                cd nasm-2.16.01
                ./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.16.5.tar.xz
                cd ${CMPL}
                tar xf ${SRC}/automake-1.16.5.tar.xz
                cd automake-1.16.5
                ./configure
                make && sudo make install
            
  9. libtoolのコンパイル&インストール(fribidiのコンパイルに用いる)

                cd ${SRC}
                curl -LO https://mirrors.sarata.com/gnu/libtool/libtool-2.4.7.tar.xz
                cd ${CMPL}
                tar xf ${SRC}/libtool-2.4.7.tar.xz
                cd libtool-2.4.7
                ./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.03.28時点でのバージョンは3.12.2である。

  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.03.28時点でのバージョンは1.11.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.43.tar.xz
                cd ${CMPL}
                rm -fr libpng-*
                tar xf ${SRC}/libpng-1.6.43.tar.xz
                cd libpng-1.6.43
                ./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.2.tar.xz
                cd ${CMPL}
                rm -fr freetype-*
                tar xf ${SRC}/freetype-2.13.2.tar.xz
                cd freetype-2.13.2
                ./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/8.3.1/harfbuzz-8.3.1.tar.xz
                cd ${CMPL}
                rm -fr harfbuzz-*
                tar xf ${SRC}/harfbuzz-8.3.1.tar.xz
                cd harfbuzz-8.3.1
                ./configure --prefix=${TARGET} --disable-shared --enable-static
                make && make install
            
  17. freetypeのコンパイル&インストール

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

                cd ${CMPL}/freetype-2.13.2
                ./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_2/expat-2.6.2.tar.xz
                cd ${CMPL}
                rm -fr expat-*
                tar xf ${SRC}/expat-2.6.2.tar.xz
                cd expat-2.6.2
                ./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.1/libass-0.17.1.tar.xz
                cd ${CMPL}
                rm -fr libass-*
                tar xf ${SRC}/libass-0.17.1.tar.xz
                cd libass-0.17.1
                ./configure --prefix=${TARGET} --disable-shared
                make && make install
            
  23. libblurayのコンパイル&インストール

    freetype、fontconfigは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} --without-libxml2 --disable-shared --disable-bdjava-jar
                make && make install
            
  24. 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
            
  25. 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
            
  26. 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
            
  27. 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
            
  28. 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
            
  29. mpvのコンパイルとインストール(更新)
    git headまたは、安定版リリースを用いる。

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

    安定版リリース Ver.0.37.0

                cd ${SRC}
                rm mpv-*
                curl -LO https://github.com/mpv-player/mpv/archive/refs/tags/v0.37.0.tar.gz
                cd ${CMPL}
                rm -fr mpv-*
                tar xf ${SRC}/v0.37.0.tar.gz
                cd mpv-0.37.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に置いている。

    2月末の更新以降、${TARGET}/binにインストールされるコマンドライン版のmpvは、正常に起動しない。コンパイルに用いるmesonというツールのバグらしいが、はっきり分からない。
    ${TARGET}/compile/mpv/buildにあるコマンドライン版のmpvは、正常に起動するので、こちらを/usr/local/binにコピーされたい。

    注意:
    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