3 ポイント 投稿者 GN⁺ 2024-08-18 | 1件のコメント | WhatsAppで共有
  • mpv はコマンドライン中心の自由・オープンソースなメディアプレーヤーで、さまざまなメディアファイル形式、オーディオ・ビデオコーデック、字幕形式をサポートする
  • 強力な スクリプティング 機能とユーザースクリプト集により、標準プレーヤーを好みの形に拡張しやすい
  • ミニマルな設計を維持しているため独立した GUI はないが、映像上で基本操作を行える小さなオンスクリーンコントローラーを提供する
  • OpenGL、Vulkan、D3D11 ベースの 高品質なビデオ出力 とハードウェアデコード API のサポートにより、さまざまな環境で再生品質を調整できる
  • 最初からライブラリ統合を考慮した C API があり、他のアプリケーション内に mpv を組み込んで活用できる

コマンドライン中心のメディアプレーヤー

  • mpv はコマンドラインで使用する自由なメディアプレーヤー
  • 多様な メディアファイル形式、オーディオ・ビデオコーデック、字幕形式をサポートする

スクリプティングと操作方法

  • スクリプティング 機能により、プレーヤーの動作を幅広く拡張できる
  • ミニマリズムを志向しており、独立した GUI は提供しない
  • 基本操作には、映像上に表示される小さな オンスクリーンコントローラー を利用できる

ビデオ出力とデコード

  • OpenGL、Vulkan、D3D11 ベースの ビデオ出力 を提供する
  • ビデオ愛好家向けの再生機能も含まれる
    • 高品質アルゴリズムベースの ビデオスケーリング
    • カラー管理
    • フレームタイミング
    • 補間
    • HDR
  • ほとんどのプラットフォームで複数の ハードウェアデコード API を利用できる
  • ハードウェアデコードは実行中に必要に応じて有効化できる

アプリケーション統合と開発状況

  • mpv は他のアプリケーションに容易に統合できるよう、最初から C API を設計している
  • プロジェクトは活発に開発中で、コードのリファクタリングと整理、機能追加に重点を置いている
  • 機能要望やパッチは mpv GitHub issues を通じて送ることができる

関連リソース

1件のコメント

 
GN⁺ 2024-08-18
Hacker Newsでの意見
  • mpv は優れたメディアプレーヤー。かなりミニマルで性能もよく、やるべきことをきちんとこなす。
    作者がロケール(locale)について怒りをぶちまけた素晴らしいコミットもある: https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f02... 笑いながら読む価値あり

    • 奇妙に聞こえるかもしれないが、こうした問題を避けられることが Go、Rust、Swift のような新しい言語がもたらす最大級の生産性向上の一つかもしれない。新しいエコシステムは標準ライブラリを作り直す機会を得られ、ロケールや UTF-16 のような、よく分かる前に選ばれたひどいレガシーを捨てられる。
      Zig、Go、Rust など多くの言語の標準ライブラリは、C 標準ライブラリや POSIX API よりはるかに先を行っている。それだけでも使う十分な理由になる
    • 長く有益な文章で、罵り言葉も少しある。強くおすすめする。
      25年前に Spolsky が「everything you wanted to know about Unicode and character sets」という記事を書いているが、Unicode/UTF 以後の世界しか知らない人にも有益かもしれない
    • C のロケール API の壊れっぷりのように、errno でもこんなことをやったと想像してみろ、という話については、実際にそうなっている例がある。localtimelocaltime_rtzset のような 時刻関数 がそれだ。
      ロケールに依存するのでロケール隣接領域ではあるが、タイムゾーンもグローバル状態なので、POSIX 移植可能なマルチスレッド C コードで標準 API だけを使って別のタイムゾーンの時刻を得ることは不可能だ
    • 「C のロケールと wchar_t はどちらも壊れたレガシーの脳死状態だ。C/POSIX 標準委員会に有能な人がいたなら、とっくに廃止されるか削除されていただろう。gets() は削除したではないか。知らない人には侮辱的に感じられるかもしれないこの感情的爆発を正当化するために、長い文章を書くことにする。きつい表現が苦手な人は、これを宗教文書だと思ってほしい。」
      本当に伝説的
    • そのコミットの作者は、ここ数年 mpv の開発 には関わっていないことは知っておくとよい
  • 数年前に Linux で使い始めたが、今では Android タブレットまで含め、すべてのデバイスにインストールしている。完璧。ミニマルなデフォルト、妥当な設定、速さ、ただちゃんと動く。
    SSH 越しでもネイティブ再生できるのがすごい: mpv sftp://mit@nyx/home/mit/Work/merged.mp4
    最近、動画を回転させるショートカットが必要になったが、他のプレーヤーでは簡単にはできなさそうで、mpv では input.confr cycle_values video-rotate "90" "180" "270" "0" を入れればよかった

    • HTTP でも動画を再生でき、YouTube を含む多くのウェブサイトに対応している: mpv
  • Linux なら、mpv.confhwdec=auto を追加して ハードウェアアクセラレーション を有効にするのを忘れてはいけない。AMD/Intel/NVIDIA で動作する。
    https://interfacinglinux.com/2024/01/10/hardware-acceleratio...

    • 分かってみると、何年も mpv で動画を見ながら ハードウェアアクセラレーション なしで使っていた。これを読めてよかった
    • こういう設定で使っている: vo=gpu-nextgpu-api=vulkanhwdec=vulkangpu-context=waylandvk
      Vulkan Video が動作しない場合は、hwdec=vulkanhwdec=vaapi に変えられる
    • なぜこれがデフォルトでオフなのか気になる
    • 理由はよく分からないが、Fedora、おそらくカーネル 6.10 と Vega 64 の組み合わせで、性能が悪化し、遅延やカクつきが発生する問題が多かった。毎年一度くらい再挑戦するが、うまくいかずまた諦めることになる
    • さっき pacman で mpv をインストールして 4K 動画を再生してみたところ、CPU ファンがすぐに回り始め、top では複数のコアが使われているのが見えた。この HN スレッドを読み進めていて hwdec=auto を知った。
      mplayer と VLC を使ってきた立場からすぐに浮かぶ疑問は、「メンテナーはこれをデフォルトにしないことで、どんな トレードオフ を受け入れようとしているのだろうか?」というもの
  • このプロジェクトは非常に古い系譜を持つプロジェクトで、以前は mplayer として知られていた。2001年まで遡るコミットが50万件もあり、それも CVS リポジトリが Subversion に変換された後の基準だ。
    Ubuntu を動かすファンレスの Minix z100 で streamlink と mpv を併用すると、オリンピック視聴環境としてほぼ完璧だった。
    https://streamlink.github.io/
    https://www.minix.com.hk/products/z100-0db-fanless-n100-mini...

    • mplayer と mpv が同じものだとは言いにくい。mpv が mplayer などからフォークされたのは確かだが、mplayer は今も別個のプロジェクトだ
  • ばかげて聞こえるかもしれないが、個人的に中核機能は複数の字幕を同時に表示できることだと思う。トラック、オフセット、位置、サイズなどを、いくつかのショートカットキーで簡単に設定できる。
    どのストリーミングサービスもこれを提供しておらず、ユーザーの所在地と「関係ない」と判断した字幕言語は積極的に隠す。そういうサービスは尊重しにくい。

    • 本当に素晴らしい機能だ。ショートカットキーもちゃんと覚えていないし、おそらく覚えるべきなのだろうが、--sid1=--sid2= から始めれば十分うまく動く。
      私と配偶者はどちらも英語ネイティブではなく、母語も互いに違う。私は英語にはかなり慣れているが、一部の方言は難しく、音声が騒がしいと単語を聞き逃すことがあるので英語字幕を好む。配偶者は自分の母語の字幕を好む。
      複数の字幕を表示できれば、少し画面スペースを使う代わりに、二人とも望む視聴体験を得られるので、十分に価値がある。
    • mpv は字幕処理に強い。字幕トラックを切り替えて位置を設定できるだけでなく、動画を再生するときに外部字幕ファイルを自動で探して再生することもできる。
      これについて記事を書いた: https://www.baeldung.com/linux/mpv-subtitles-automatic。ただし、対応字幕形式のドキュメントが不足しているのは残念で、実際の対応形式を確認するには ffmpeg のコードをのぞく必要があった。
      さらに https://subdl.com/https://github.com/alexanderwink/subdl は、コマンドラインで字幕を探してダウンロードするのに良いリソースだ。
    • 特に言語学習には、こうした機能がとても良い。ところが Amazon のようなサービスは、実際には30個ほど持っている字幕のうち、英語と現地語の2つ程度しか表示しない。字幕と吹き替えの違いについては言い出さないでおく。
    • 所在地と「関係ない」字幕言語を隠すのは、法的な問題や、そのコンテンツの権利者・字幕提供者との契約上の制限が理由かもしれない。
  • mpv はいつもよく動き、投げ込まれたほぼ何でも簡単に処理してきた。
    今は変わっているかもしれないが、数年前に初めて触れたとき、このプロジェクトが他のプレイヤーと違っていた点は、正確性と正確な再生を非常に重視しているように感じられたことだった。たとえば VLC では色再現が少しおかしいといった特異な問題を示すファイルでも、mpv では完璧に再生されたことがある。

    • VLC では妙な問題が起き、mpv では完璧に再生されるということは、昔からあった。2000年代初頭の MPlayer 時代にもそうだった。
      ただ、なぜそうなのかはよく分からない。どちらも多くのコーデックについて、概ね同じライブラリに依存していると思うからだ。
    • VLC が事実上、防弾仕様と言えるほどどんなファイルでも再生する傾向があることを考えると、mpv もその水準に達しているのは喜ばしいことだ。
    • mpv で「HDR」メディアを再生するとき、色表現にかなり大きな問題があった。
  • mpv は素晴らしい。順不同でおすすめできるもの: Seeds of Might/JySzE の基本 mpv.conf、機能豊富だが依然としてミニマルな UI である uosc、uosc や他のカスタム UI と一緒に使う高速サムネイラー thumbfast、音声ベースでオープニングなどをスキップする Eisa01 の SmartSkip。
    [1] Windows: https://gist.github.com/JySzE/db4149cad726b3b6955dca8d47a197...、macOS: https://gist.github.com/JySzE/34ee131da3974811a9469e1e3b7d4d...
    [2] https://github.com/tomasklaen/uosc
    [3] https://github.com/po5/thumbfast
    [4] https://github.com/Eisa01/mpv-scripts#smartskip

    • そのプラグインの取り組みをけなすつもりはないが、それは「基本的な」オープニングスキップの実装だ。
      オープニングやエンディングクレジットを安定して見つけるには、非局所的な分析が必要になる。基本的には、1シーズンまたは作品全体のエピソード間で共通して現れる音声区間を見つける必要がある。
      それを行える CLI ツールを作ったが、正直なところ「完成」した状態ではなく、おそらく今後もそうだと思う。当初の目標は Jellyfin プラグインを開発することだったが、後になって、すでにそういうプラグインがあることを知った。
      https://github.com/aksiksi/needle
  • 現存する最高のメディアプレイヤーだ。優れたミニマル UI、ハードウェアアクセラレーションの活用、ただ動画を再生するという点が良い。
    これほど優れ続けているので、おそらく一生、海賊版利用を続ける理由の一つになる。ストリーミングサービスはプレイヤーに何百万ドルも費やしているのに、この水準には近づけていない。

    • YouTube はアプリのダウンロードと Premium へのアップグレードを促すために、意図的にウェブプレイヤーを弱体化させているように見える
  • MPV には多才なスクリプトがある。たとえば、視聴中の動画を切り出したりクロップしたりできる[1]
    ほかのプレーヤーでは見たことのない機能をショートカットキーに割り当てることもできる。ときどき視聴中のシーンの明るさと色を正規化するために input.confn vf toggle normalize=smoothing=100 と書いているが、ハードウェアデコードを使うと動作しない場合がある
    動画の回転は Ctrl+r no-osd cycle-values video-rotate "90" "180" "270" "0" のように設定する
    [1] <https://github.com/occivink/mpv-scripts>

    • 個人的には、MPV では主に FLAC ファイルの入った音楽ライブラリを再生し、JS でプラグイン[1]を作って再生履歴を listenbrainz.org に送っている。とても単純だが、この数か月はうまく動いている
      [1]: https://gist.github.com/madeindjs/f33225cf4d8fdc9f61e0fe3ebe...
    • mpv には堅実な Lua スクリプティングインターフェースもある。Golang と Lua でツールを作り、mpv がトレントファイルとマグネットリンクを HTTP リンクのように扱えるようにした結果、トレントをそのままストリーミングできるようになった
      あまり知られていない点として、mpv は YouTube 動画をストリーミングできるだけでなく、CLI から mpv ytdl://ytsearch:query で YouTube 検索もできる
      また ASCII、sixel、kitty 画像プロトコルを使って、ターミナル内で動画を直接再生することもできるが、この中では kitty 画像プロトコルの品質が圧倒的に良い
  • これまで mpv でいちばん気に入っている機能は、コンテンツに CRT シェーダーをリアルタイムで適用できる点だ。この方式では、HD 映像を実際の 240p バッファへ適切にダウンスケールしたうえで、シェーダーが画面解像度に合わせたアップスケール処理も行う
    https://i.imgur.com/akmgzxX.png
    https://github.com/hhirtz/mpv-retro-shaders