mpv

提供: ArchWiki
2021年6月16日 (水) 02:32時点におけるKgx (トーク | 投稿記録)による版 (→‎トラブルシューティング: 一般的なデバッグを翻訳して追加)
ナビゲーションに移動 検索に移動

関連記事

mpvMPlayer と MPlayer2 がベースの動画プレイヤーです。幅広いフォーマットの動画ファイル、オーディオ・ビデオコーデック、字幕タイプをサポートしています。mpv と前出のプレイヤーとの違いは このページ で包括的に (一部不完全ですが) リストアップされています。

インストール

公式リポジトリから mpv パッケージをインストールするか Arch User Repository から mpv-gitAUR をインストールしてください。

フロントエンド

mpv には OSC という名前のすっきりとしたユーザーインターフェイスがあり、マウスを動かした時に表示されます。カジュアルユーザー向けに、他のグラフィカルインターフェイスも存在します:

  • Baka MPlayer — フリーでオープンソース、クロスプラットフォームの、libmpv ベースのマルチメディアプレイヤー。Qt 5 を使用。
http://bakamplayer.u8sand.net/ || baka-mplayer, baka-mplayer-gitAUR
  • bomi — 強力で使いやすいマルチメディアプレイヤー (Qt 5)。
https://bomi-player.github.io/ || bomiAUR, bomi-gitAUR
  • Celluloidmpv のシンプルな GTK フロントエンド。
https://celluloid-player.github.io/ || celluloidAUR, celluloid-gitAUR
https://github.com/cmdrkotori/mpc-qt || mpc-qt-gitAUR
  • SMPlayer — CSS テーマや YouTube 統合などの機能が追加された Qt マルチメディアプレイヤー (Qt 5)。
http://smplayer.sourceforge.net/ || smplayer
  • xt7-player-mpv — フィルターやドライバー、ladspa プラグインのサポート、ライブラリ・プレイリストの管理、YouTube、オンラインラジオ、ポッドキャスト、DVB-T などの豊富な設定オプションが存在する mpv の Qt/Gambas による GUI。
https://github.com/kokoko3k/xt7-player-mpv || xt7-player-mpv-gitAUR
ノート: CMPlayer/bomi パッケージには内部に mpv が入っています。

設定

Mpv の設定は mpv.conf (設定) と input.conf (キーバインド) と lua-settings/osc.conf (オンスクリーンディスプレイ) ファイルから読み込まれます。オプションのリストは、man ページや github にあるドキュメントを参照してください: mpv(1) または GitHub ドキュメント

XDG_CONFIG_HOME 環境変数が設定されてない場合、ユーザーの設定ファイルは ~/.config/mpv フォルダから読み込まれます。全ユーザー共通の設定は /etc/mpv フォルダから読み込まれます。

一般設定

次の設定を ~/.config/mpv/mpv.conf に追加します。

字幕の設定

ファジー検索を有効にする。

sub-auto=fuzzy

字幕を太字にして読みやすくします。

sub-bold=yes

高度な設定

これにより、vo=gpu をビデオ出力として使用するときに高品質の OpenGL オプションが読み込まれます(デフォルト)。ほとんどのユーザーは問題なくこれらを実行できますが、実行できない少数のユーザーに問題が発生しないように、デフォルトでは有効になっていません。

profile=gpu-hq

gpu-hq プロファイルは、中程度の品質と速度を実現するために、デフォルトで spline36 スケーリングフィルターに設定されています。最高品質のビデオ出力を得るには、ハードウェアで実行できる場合は ewa_lanczossharp を使用する必要があるとマニュアルに記載されています。

profile=gpu-hq
scale=ewa_lanczossharp
cscale=ewa_lanczossharp

これらの最後の3つのオプションは、もう少し複雑です。最初のオプションでは、オーディオとビデオが同期しなくなった場合、ビデオフレームをドロップする代わりに、オーディオをリサンプリングします(オーディオピッチのわずかな変化は、ドロップされたフレームよりも目立たないことがよくあります)。 mpv wiki には、 DisplaySynchronization というタイトルの詳細な記事があります。残りの2つは、フレームの表示方法を変更することで、基本的にディスプレイ上で動きがスムーズに見えるようにし、ソースフレームレートがディスプレイのリフレッシュレートとより良く調和するようにします(実際にビデオを60 fpsに変換するSVPの手法と混同しないでください)。 mpv wiki には、 Interpolation というタイトルの詳細な記事がありますが、一般に スムーズモーション としても知られています。

profile=gpu-hq
scale=ewa_lanczossharp
cscale=ewa_lanczossharp
video-sync=display-resample
補間
tscale=oversample
ノート: NVIDIA Optimus が使用されている場合、行 video-sync=display-resample により、ビデオが高速化される可能性があります。

これ以外にもできることはたくさんありますが、物事はより複雑になり、より強力なビデオカードが必要になります。簡単な概要として、画像でトレーニングされたディープニューラルネットワークを実際に使用するものを含む、エキゾチックなスケーリングとシャープニングの手法を実行する特別なシェーダーをロードすることができます(実世界とアニメーションコンテンツの両方)。これについて詳しくは、 mpv wiki、特に user-shaders のセクション をご覧ください。

あなたが同様に望ましいと思うかもしれない他のたくさんのオプションもあります。 mpv(1) を見る価値があります。コマンドラインから mpv を実行して、構成に関するエラーメッセージを確認することも役立ちます。

カスタムプロファイル

mpv.conf では、基本的に次のような オプションのグループ である プロファイル を作成できます。

  • ファイルを書き直すことなく、異なる構成をすばやく切り替えることができます。
  • 特別なコンテンツ用の特別なプロファイルを作成します。
  • ネスト プロファイル。これにより、単純なプロファイルからより複雑な プロファイル を作成できます。

プロファイルの作成は簡単です。 mpv.conf の上部の領域はトップレベルと呼ばれ、そこに書き込んだオプションはすべて、mpv が開始されると有効になります。ただし、名前を角かっこで囲んでプロファイルを定義すると、その下に書き込むすべてのオプション(新しいプロファイルを定義するまで)はそのプロファイルの一部と見なされます。 mpv.conf の例を次に示します。

profile=myprofile2            #トップレベルエリア、myprofile2をロード
ontop=yes                     #最前面に

[myprofile1]                  #シンプルなプロファイル、トップレベルの領域はここで終わります
profile-desc="a profile"      #プロファイルのオプションの説明
fs=yes                        #フルスクリーンで開始

[myprofile2]                  #別の簡単なプロファイル
profile=gpu-hq                #mpv に付属する組み込みプロファイル
log-file=~~/log               #ログファイルを書き込む場所を設定します。~~/ translates は ~/.config/mpv に変換されます

トップレベルエリア内には2つの線しかなく、その下に2つの別々のプロファイルが定義されています。 mpv が開始すると、最初の行が表示され、 myprofile2 にオプションが読み込まれます(つまり、gpu-hqlog-file=~~/log)最後に ontop=yes をロードし、起動を終了します。 myprofile1 は最上位領域で呼び出されないため、ロードされないことに注意してください。

または、次のコマンドラインから mpv を呼び出すこともできます。

$ mpv --profile=myprofile1 video.mkv

また、myprofile1 のオプションを除くすべてのオプションを無視します。

キーバインディング

キーの割り当ては、/usr/share/doc/mpv/input.conf の例と manual の関連するセクションを参考にして下さい。

~/.config/mpv/input.conf に次の例を追加します。

shift+s         screenshot each-frame
Shift+UP        seek  600
Shift+DOWN      seek -600
=               cycle video-unscaled
-               cycle-values window-scale 2 3 1 .5
WHEEL_UP        add volume 5
WHEEL_DOWN      add volume -5
WHEEL_LEFT      ignore
WHEEL_RIGHT     ignore
Alt+RIGHT       add video-rotate 90
Alt+LEFT        add video-rotate -90
Alt+-           add video-zoom -0.25
Alt+=           add video-zoom 0.25
Alt+j           add video-pan-x -0.05
Alt+l           add video-pan-x 0.05
Alt+i           add video-pan-y 0.05
Alt+k           add video-pan-y -0.05
Alt+BS          set video-zoom 0; set video-pan-x 0; set video-pan-y 0

mpv で MPC-HC キーバインディングを再現する試みについては、 [1] を参照してください。

その他の設定ファイル

さらに、いくつかの構成ファイルとディレクトリを作成できます。その中には次のものがあります。

  • ~/.config/mpv/script-opts/osc.conf は、 On Screen Controller を管理します。
  • Lua スクリプト用の ~/.config/mpv/scripts/script-name.lua。 例については、 [2] を参照してください。

詳細については、https://mpv.io/manual/master/#files を参照してください。

スクリプト

mpv にはプレイヤーの機能を拡張する 多種多様なスクリプト があります。そのために、 Lua と JavaScript の両方の内部バインディングがあります (最近追加されました) 。

スクリプトは通常、 ~/.config/mpv/scripts/ ディレクトリに配置してインストールします (最初に作成する必要があります) その後、 mpv の起動時に自動的にロードされます mpv の場合一部のスクリプトには独自のインストール手順と設定手順が付属していますので、必ず確認してください。また、古いスクリプト、壊れたスクリプト、メンテナンスされていないスクリプトもあります。

JavaScript

JavaScript (ES5 via MuJS ) は、2014から mpv スクリプト言語としてサポートされています。現在利用できるのは a some scripts のみですが、 documentation exists は独自のものを作りたい人のためのものです。

まず、 mpv scripts ディレクトリに、拡張子 .js を持つスクリプトをドロップします。例えば:

~/.config/mpv/scripts/fullscreen-off-on-pause.js

function onPauseChange (prop, enabled) {
    if (enabled) {
        mp.set_property('fullscreen', 'no')
    }
}

mp.observe_property('pause', 'bool', onPauseChange)

require を使用して CommonJS モジュールをロードする方法などの詳細については、 documentation を参照してください。

JavaScript のサポートは mpv パッケージだけでなく、 mpv-fullAURmpv-full-gitAUR などの AUR パッケージでも利用できます。

Lua

mpv 用の興味深い Lua スクリプトがたくさんあります。独自のスクリプトを作成したい場合は、 こちら を参照してください。

mpv-ytdlAutoFormat

mpv-ytdlautoformat は、 Youtube や Twitch やあなたが望むドメインの ytdl-format を 480p やあなたが望む品質に自動変更する Lua スクリプトです。

mpv-stats

mpv-stats (または単に stats) は Lua スクリプトで、現在の状態を示す多くのライブ統計を出力します。これは、ハードウェアが構成に対応できることを確認したり、異なる構成を比較したりする場合に非常に便利です。バージョン v0.28.0 以降、スクリプトは mpv に組み込まれており、 i キーまたは I キー (デフォルト) を使用してオン/オフを切り替えることができます。

mpv-webm

mpv-webm (または単に webm) は、ビデオを見ながら WebM ファイルを作成できる非常に使いやすい Lua スクリプトです。いくつかの機能が含まれており、追加の依存関係はありません (完全に mpv に依存します)

C

mpv-mpris

C プラグイン mpv-mpris を使用すると、プロトコルを介して他のアプリケーションを MPRIS と統合できます。たとえば、mpv-mpris がインストールされている場合、 kdeconnect は電話がかかってきたときにビデオ再生を自動的に一時停止できます。別の例として、 bluetooth オーディオデバイスのボタン (play\pauseなど) があります。

mpv-mprisAUR をインストールし、 Pacman によって表示されるインストール後の手順に従います。

Vapoursynth

Vapoursynth は AviSynth に代わるもので、 Linux で使用でき、 Python スクリプトによるビデオ操作が可能です。 Python スクリプトの Vapoursynths は mpv のビデオフィルタとして使うことができます。

vapoursynth フィルターを使用するには、 vapoursynth パッケージ (または vapoursynth-gitAUR) をインストールし、--enable-vapoursynth ビルドフラグでコンパイルする必要があります。

これは、Vapoursynth をインストールしてから mpv-gitAUR をインストールする (すでにインストールされている場合は再インストールする) 方が簡単です。 mpv-gitAUR の configure スクリプトは (インストールされている限り) Vapoursynth を自動検出し、手動で設定オプションなどを変更することなく自動的に Vapoursynth をサポートしてコンパイルします。

SVP 4 Linux (SmoothVideoProject)

SmoothVideoProject SVP は、ビデオを 60fps に変換することで主に知られているプログラムです。無料で、 64bit Linux でフル機能を利用できます (32bit Linux とは互換性がありません) 。

これには3つの主要な機能があり、それぞれを必要に応じて無効または有効にすることができます (モーション補間の使用は強制されません)

  1. Motion interpolation (youtube video) -ビデオを 60fps に変換するアルゴリズム。これは、一部の人々が愛し、他の人々が嫌う、いくぶん物議を醸す 人工的な効果 を作り出します。残念なことに、このアルゴリズムは完璧ではなく、奇妙な人工的な効果を大量に含んでいます。アルゴリズムは、パフォーマンスまたは品質のいずれかについて (スライダを介して) 調整できます。また、生成されたフレームで実際のフレームを補間するいくつかの人工的な効果削減設定があり、人工的な効果の通知性が低下します。フレームレート検出は自動または手動に設定できます (一部のユーザでは手動でパフォーマンスの問題を解決できるようです)
  2. Black bar lighting (youtube video) -イメージのアスペクト比が黒のバーをディスプレイに表示する場合、 SVP は画面上のコンテンツによって生成される lights で黒のバーを明るくします。ある程度のカスタマイズはできますが、デフォルトはほぼ最適です。
  3. LED ambient lighting control (youtube video) -テレビに接続されている LED アンビエント照明をコントロールする機能があります。
mpv.conf
[svp]
input-ipc-server=/tmp/mpvsocket     # Receives input from SVP
hr-seek-framedrop=no                # Fixes audio desync
resume-playback=no                  # Not compatible with SVP

# ノイズが治まる場合もあれば、原因となる場合もあります。ノイズがあったら試してみてください。
#opengl-early-flush=yes

SVP を使用するには、そのプロファイルを使用してファイルを開く前に、 SVP プログラムをバックグラウンドで実行しておく必要があります。次のいずれかを実行します。

$ mpv --profile=svp video.mkv

または、最上位の部分に profile=svp を設定します。

ハードウェアデコードを使用する場合は、通常のデコーダは Vapoursynth と互換性がないため、コピーバックデコーダを使用する必要があります (-copy で終わる hwdec オプションを選択します) 例えば、

hwdec=auto-copy
hwdec-codecs=all

いずれにしても、ハードウェアのデコードは、あまり推奨されず、パフォーマンスに大きな違いをもたらすことはありません。

ヒントとテクニック‎

ハードウェアデコード

mplayermplayer2 と違って、mpv は始めから VA-APIVDPAU の両方をサポートしています。利用できる設定については man ページ--hwdec=<api> オプションのリファレンスを見て下さい。設定を永続化するには、設定ファイルに hwdec=method という行を追加します。

ハードウェアデコードを使用するとき、ビデオ出力は opengl, opengl-hq, vdpau (hwdec=vdpau を使う場合) のどれかに設定する必要があります。hwdec=vaapi を使用する場合は profile=opengl を使ってください (opengl-hq を使用した場合、動画を読み込むときに CPU に過度の負担がかかるときがあります [3])。ハードウェアデコードが使用できない場合、mpv は自動的にソフトウェアデコードにフォールバックします。詳細は options.rstvo.rst を見て下さい。

h264, vc1, wmv3, hevc, mpeg2video, vp9 コーデックではデフォルトでハードウェアデコードが有効になります。ただし、ハードウェアデコードを使用するコーデックを指定したり (例: --hwdec-codecs=h264,mpeg2video)、あるいは全てのコーデックでハードウェアデコードを有効にする (--hwdec-codecs=all) こともできます。

高品質なビデオ出力

opengl-hq プロファイルは mpv の開発者によって事前に設定された様々なオプションを使用する OpenGL 出力です。opengl-hq を使用するには、設定ファイルで以下のように指定してください:

~/.config/mpv/mpv.conf
profile=opengl-hq

opengl-hq にはデフォルトで GLSL デバンドフィルダーが有効になっており、ユーザーによっては性能が劣化したりコンテンツの見た目が悪くなることがあります。以下の設定によって、フィルターは簡単に無効化できます:

~/.config/mpv/mpv.conf
profile=opengl-hq
deband=no

停止した位置からの自動レジューム再生

動画の現在の位置を保存して mpv を終了するデフォルトのキーは Shift+q です。このキーはキーバインドの設定ファイルに quit_watch_later を追加することで変更できます。

プレイヤーの終了時に自動的に現在の再生位置を保存したい場合、--save-position-on-quit フラグを付けて mpv を起動してください。オプションを永続化させるには、設定ファイルに save-position-on-quit という行を追加します。

ボリュームが小さすぎる

設定ファイルに volume-max=value を設定して volume-max=600 など然るべき値にしてください。さらに (または)、af=acompressorダイナミックレンジ圧縮を利用することもできます。

複数のアスペクト比のクイック切り替え

バージョン 0.8.0 から Shift+a を使ってアスペクト比を切り替えることができます。

アスペクト比を無視する

--keepaspect=no を使うことでアスペクト比を無視できます。オプションを永続的にしたい場合、設定ファイルに keepaspect=no という行を追加してください。

ルートウィンドウに描画

--wid=0 を付けて mpv を実行してください。これによって mpv はウィンドウ ID が 0 のウィンドウに描画するようになります。

GUI を常時表示

mpv をターミナル以外から起動する場合、音声ファイルなどでも、GUI ウィンドウが表示されていたほうが便利です。--force-window オプションを使うことで常時表示させることができます。

動画ファイルで GUI を非表示にする

動画ファイルでは GUI ウィンドウを隠したい場合もあるでしょう。--no-video オプションを使うことで非表示にできます。

昔の OSC に戻す

バージョン 0.21.0 から、mpv のオンスクリーンコントールはボトムバーに置き換えられました。オンスクリーンコントール (OSC) に戻したい場合、こちら に書かれているように mpv の設定を編集してください。

ブラウザプラグインとして使う

mozpluggerAUR を利用することで、サポートされているブラウザにおいて mpv を使って動画を再生することができます。設定の詳細は ブラウザプラグイン#MozPlugger を見て下さい。ViewTube などのユーザースクリプトと組み合わせて、mpv を使用してサイトに埋め込まれた動画プレイヤーを置き換えることもできます。

HTTP ストリーミングを使用するときはユーザーエージェントの設定が必要な場合があります。例: user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0"

Lua スクリプトを使って mpv を音楽プレイヤーとして磨き上げる

mpv の Lua スクリプトの開発方法は mpv リポジトリDOCS/man/lua.rst にまとまっており、サンプルが TOOLS/lua にあります。このブログ記事 では Lua スクリプトを使って mpv を使いやすくする例として music.lua スクリプトを紹介しています。

mpv で Twitch.tv のストリーミングを視聴

youtube-dl がインストールされている場合、mpv は直接 Twitch のライブストリームを開くことができます。

また、streamlink を使って Twitch をストリーミングする方法もあります。GUI でストリームを視聴したい場合 streamlink-twitch-guiAUR を使ってください。Streamlink#Twitch を見て下さい。

さらに Livestreamer を利用する Lua スクリプトが存在します: https://gist.github.com/ChrisK2/8701184fe3ea7701c9cc

youtube-dl とフォーマットの選択

--ytdl-format のデフォルトは bestvideo+bestaudio/best となっています。4K 解像度で見ることができる YouTube 動画の場合、たとえ接続しているモニターが 4K に対応していなくても、4K の VP9 でエンコードされた動画をソフトウェアデコードすることになります。

youtube-dl のフォーマットを適切に設定することで問題は簡単に解決します。以下の設定例では、縦の解像度が1080ピクセル以下の動画だけが再生されます:

ytdl-format=bestvideo[height<=?1080]+bestaudio/best

ハードウェアデコードできない特定のコーデックだけを避けたい場合、同じように追加できます。例えば、VP9 を無視するには以下のように設定します:

ytdl-format=bestvideo[height<=?1080][vcodec!=vp9]+bestaudio/best

youtube-dl の音声検索

.bashrc に以下の関数を記述することでターミナルから mm "search terms" を実行して音声を検索・再生できます:

function mm() {
    mpv --no-video --ytdl-format=bestaudio ytdl://ytsearch10:"$@"
}

コンポジタで mpv を使う

コンポジタ (例: KDE Plasma 5) を使っていて、mpv で動画を再生するときにコンポジットが無効になってしまう場合 (Plasma でウィンドウが表示されなくなったりデフォルトのアプリスイッチャでウィンドウのサムネイルが表示されなくなる場合)、x11-bypass-compositor=no を使ってみてください。

OSC を古いものに戻したい

以下のように設定してください:

~/.config/mpv/lua-settings/osc.conf
layout=box

スクリーンショットの作成

再生時間を指定してスクリーンショットを作成するには (HH:MM:SS):

$ mpv --no-audio --profile=image --start=00:01:30 --frames=1 /path/to/video/file

スクリーンショットはカレントディレクトリに 00000001.jpg として保存されます。

Vapoursynth

AviSynth の代わりとして Linux では Vapoursynth を使うことができます。Python スクリプトで動画を操作することが可能です。Vapoursynth の Python スクリプトは mpv の動画フィルターとしても使えます。

Vapoursynth フィルターを使うには vapoursynth パッケージをインストールして --enable-vapoursynth ビルドフラグを付けて mpv をコンパイルしてください。

バンディングを消去 (flash3kyuu)

ノート: Mpv にはバンディング消去シェーダが同梱されており opengl-hq プロファイルではデフォルトで有効になっています。設定を調整する方法はマニュアルを参照してください。

f3k_db のバンディング消去フィルターを使うには vapoursynth-plugin-f3kdbAUR をインストールして vapoursynth 拡張を使用する Python スクリプトを書いて下さい。

以下は mpv でバンディング消去を有効にするサンプルスクリプトです。

import vapoursynth as vs
core = vs.get_core()

clip = video_in
clip = core.std.Trim(clip, first=0, length=500000)
clip = core.f3kdb.Deband(clip, grainy=0, grainc=0, output_depth=16)
clip.set_output()

設定ファイルで Python スクリプトを指定するか mpv を実行するときにコマンドライン引数で指定してください:

$ mpv --vf=vapoursynth=f3k_db.py <video_file>

トラブルシューティング

一般的なデバッグ

mpv の再生に問題がある場合 (またはフラットアウトが実行できない場合) は、最初に次の3つのことを行う必要があります。

  1. コマンドラインから mpv を実行します (-vフラグは冗長性を高めます) 。運が良ければ、そこに何が間違っているかを知らせるエラーメッセージが表示されます。$mpv -v video.mkv
  2. mpv のログファイルを出力します。ログファイルをふるいにかけるのは難しいかもしれませんが、何かが壊れている場合は、ログファイルを見ることができます。
    $ mpv -v --log-file=./log video.mkv
  3. 設定なしで mpv を実行します。これがうまく動作するなら、問題は設定のどこかにあります $mpv--no-config video.mkv

mpv が実行されても正常に実行されない場合は、 mpv-stats スクリプトをインストールして、そのスクリプトの実行状況を確認することをお勧めします。

再生が途切れたりティアリングが発生する

OpenGL をサポートしているハードウェアを使っている場合 mpv はデフォルトで OpenGL ビデオ出力デバイスを使用します。Intel HD4XXX シリーズなどのカードで 4K ディスプレイに動画を映そうとすると、動画の再生が不安定になって一時的に止まってしまったり盛大にティアリングが発生することがあります。そのような問題が起こる場合、XV (XVideo) ビデオ出力デバイスを使うことで解決できるかもしれません:

~/.config/mpv/mpv.conf
profile=xv

現在 XV ビデオ出力は非推奨となっており、新しいバージョンの mpv では osd の表示がおかしくなるなど問題を起こすことがあります。

また、(低性能なハードウェアで) 再生のパフォーマンスを改善するかわりに、動画の品質が著しく落ちるという問題もあります。

動画の再生性能を高めるオプションとして以下のようなものもあります:

~/.config/mpv/mpv.conf
vd-lavc-fast
vd-lavc-skiploopfilter=<skipvalue>
vd-lavc-skipframe=<skipvalue>
vd-lavc-framedrop=<skipvalue>
vd-lavc-threads=<threads>