PCで遊んだ日々の備忘録

Making PC and Customization PC

mpv nvdec YouTubeで動画再生支援の確認 | Ubuntu Studio

サブPC に搭載しているグラボRTX 3060の動画再生支援を 動画プレイヤーmpv、デコーダーnvdec、YouTubeを利用してUbuntu Studio上で確認してみました。

上の画像は CLI(Command Line Interface)から下記のコマンドで起動した mpvプレイヤーで YouTube動画 をストリーミング再生しているスクリーンショットです。動画再生支援が有効なのでCPU使用率は5%です。

Konsole :
  $ mpv 動画のURL

通常は mpvインターフェースにURLをドラッグ・ドロップで再生しますがコマンド起動ですと動画の情報が表示されるので調整の際、便利です。

動画再生支援が効いているか否かは、デスクトップ上に表示している Conky(ハードウェア モニタリング アプリ) のGPU温度上昇とCPU使用率、温度で判断できます。

当方の環境では、効いていればGPU温度が上昇(VP9で+2~4℃、AV1で+30℃ほど)しCPU使用率は5%程度、そうでなければGPU温度に変化なくCPU使用率は30~60%程度になります。

例えば、下の画像は av1デコードをサポートしていないFirefoxで8K動画(av1コーデック)を再生した時のスクリーンショットですが

GPUの温度上昇はなく CPU使用率が37%になっています。60%を超えたあたりからバッファが底を付く(上手く繋がらない)と画像がカクつきます。

以上かいつまんで説明しましたが、この方法を使用するため mpvプレイヤーとyt-dlpで YouTubeストリーミング再生時の nvdecハードウェア デコーディングを有効にしました。

このページは、その備忘録です。(2024年4月)


PC仕様とデスクトップ環境

主なPC仕様

マザーボード ASUS PRIME Z390-A
CPU Core i9-9900K
CPUクーラー DeepCool AK500
メモリーモジュール XMP,32GB
グラフィックスボード GeForce RTX3060
電源ユニット 750W
2.5" SSD Ubuntu Studio 120GB
 

デスクトップ環境

Ubuntu Studio 22.04.4 LTS
デスクトップ KDE Plasma 5.24
ディスプレイサーバ X.org
NVIDIAドライバ nvidia-driver-535
CUDAドライバ none
mpv none
yt-dlp none
FFmpeg 4.4.2

none …パッケージあり、未インストール

ディスプレイサーバ …nvidiaドライバをインストールするとX.orgに切り替わりWaylandセッションは選択できなくなる

▲ 目次へ

既存の .deb版(Ubuntu公式リポジトリ)ドライバをアンインストールして こちらのサイト に倣ってNVIDIAリポジトリ版のドライバをインストールします。

既存ドライバのアンインストール

ドライバのみインストールの場合、端末から

Konsole :
  $ sudo apt --purge remove nvidia*
  $ sudo apt --purge remove libnvidia*
  $ sudo apt autoremove
  $ sudo apt autoclean

CUDAもUbuntu公式リポジトリ(apt install cuda)でインストールしている場合

  $ sudo apt --purge remove cuda*
  $ sudo apt --purge remove cudnn*
  $ sudo apt --purge remove libcuda*
  $ sudo apt --purge remove libcudnn*
  $ sudo apt autoremove
  $ sudo apt autoclean
  $ sudo rm -rf /usr/lib/cuda*

PC再起動しなくてもよい。

CUDAをインストール

NVIDIAリポジトリ からCUDAをインストールすればグラボのドライバも同時にインストールされます。まずNVIDIAリポジトリを /etc/apt/sources.listに追加しキーをインストールします。端末から

Konsole :
  $ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
  $ sudo dpkg -i cuda-keyring_1.1-1_all.deb
  $ sudo apt update

CUDAをインストールします。

  $ sudo apt install cuda-drivers

PC再起動します。

CUDAバージョンを確認して CUDA ToolKitをインストールします。

  $ nvidia-smi
  $ sudo apt install cuda-toolkit-12-4

nvidia-smiの結果は… Driver Version:550.54.15、CUDA Version:12.4

環境変数の設定

CUDAのインストール先にパスを通します。ホームディレクトリ内の.bashrcファイルの最終行に次のコードを追記して保存します。

# nvidia CUDA location
export PATH="/usr/local/cuda/bin${PATH:+:${PATH}}"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
 

cuDNNをインストール

必要かどうか分からないがとりあえずインストール。CUDA ToolKitのバージョンに合わせます。

  $ sudo apt install cudnn9-cuda-12

NVIDIAリポジトリにあるのはcudnn9。

-以上-

Ubuntu公式リポジトリとの違い

NVIDIAリポジトリとの違いはCUDAライブラリのインストール先(ディレクトリ)です。

  • NVIDIAリポジトリ… /usr/local/cuda
  • Ubuntu公式リポジトリ… /usr/bin/cuda

CUDAを利用するアプリは /usr/local/cudaを参照するのでUbuntu公式リポジトリからインストールした場合、CUDAは機能しません。次のコマンドでインストール先を確認できます。

Konsole :
  $ whereis cuda

とすると結果は

CUDA: /usr/lib/cuda

この場合の解決策は、端末から

  $ sudo ln -s /usr/lib/cuda/ /usr/local/cuda

のように /usr/local/cuda に向けてシンボリックリンクを設定してやればよいです。

▲ 目次へ

mpvプレイヤーの設定

まず mpvプレイヤーをインストールします。

Konsole :
  $ sudo apt install mpv

FFmpegはインストール済みでした。

ダウンロードアプリについて

ストリーミング再生のためダウンロードアプリが必要です。youtube-dlは開発停止のため使用できません。変わりに yt-dlpを使用しますが、Ubuntu公式リポジトリからインストールした場合次のようなエラーになります。

  $ mpv 動画のURL
エラーメッセージ:
 [ytdl_hook] ERROR: [youtube] 動画のURL: Unable to extract uploader id;
 please report this issue on https://github.com/yt-dlp/yt-dlp/issues?q= 
 , filling out the appropriate issue template. Confirm you are on the 
 latest version using yt-dlp -U
[ytdl_hook] youtube-dl failed: unexpected error occurred
Failed to recognize file format.

要約すると 「アップローダー ID を抽出できない。 yt-dlp -U コマンドで最新バージョンか確認して...」とのこと。原因はバージョンが古いためでした。いろいろ調べたところ解決法が分かったので次のセクションで説明します。

yt-dlpの再インストール

yt-dlpをアンインストール後、GitHubから最新バージョンのバイナリファイルをダウンロードし手動で所定の場所に配置します。以下その手順。

1.debバージョンの yt-dlp を削除

Konsole :
  $ sudo apt remove yt-dlp

apt autoremove は行わない。依存パッケージを残す(python3-brotli python3-mutagen python3-websockets)

2.GitHub からバイナリファイル yt-dlp_linux をダウンロードする

3.ファイル名をリネームして実行権を付与する・・・ yt-dlp_linux → yt-dlp

4./usr/binディレクトリに移す

  $ sudo mv ~/ダウンロード/yt-dlp /usr/bin/yt-dlp

5.yt-dlpをアップデートする

  $ yt-dlp -U
結果:
Latest version: stable@2024.04.09 from yt-dlp/yt-dlp
yt-dlp is up to date (stable@2024.04.09 from yt-dlp/yt-dlp)

以上。これは Linux Mint ForumsLinux for Devices に掲載されています。

mpv設定ファイル:mpv.conf

mpvの設定ファイル mpv.confは無いので ~/.config/mpv/ に作成します。

Konsole :
  $ touch ~/.config/mpv/mpv.conf

下記が今回設定した内容です。

# ビデオ出力
profile=gpu-hq
vo=gpu
hwdec=nvdec
scale=ewa_lanczossharp
cscale=ewa_lanczossharp
video-sync=display-resample
interpolation
tscale=oversample

# ビデオウィンドウのサイズをビデオサイズの倍数に変更
window-scale=0.5

# 起動時の音量
volume=60

# ビデオがない場合でもビデオ出力ウィンドウを作成
force-window=yes

# ウィンドウの境界線と装飾を非表示にしてビデオを再生
border=no

# 動画サイズ[MAX1440pの最高画質]の指定
ytdl-format=bestvideo[height<=?1440]+bestaudio/best
# ↑をコメントアウトすると最大サイズ、最高画質で再生される

8K動画を再生するなら ytdl-format=…の行は不要です。

その他ビデオフォーマットに関するコマンドのサンプルは次のサイトを参照してください。

debian manpages

下記は mpv-Gentoo Wiki よりの引用です。テンプレートが紹介されていました。

mpv のコントリビュータたちの、高度な実世界での設定です: mpv , mpv-config

 
その他参考にしたサイトです

AchWiki

備忘録

Arch manual

▲ 目次へ

動画再生支援の確認

下の画像は YouTubeの 8K動画タイトル(av1 7680×4320 60fps) を再生したスクリーンショットです。

左の画像が Firefoxで再生したもので GPU温度は30℃で温度上昇はなくCPU使用率は62%(ちなみに Chromiumでは90%)、CPU温度は64℃となりこれが継続します。

右の画像が mvp+yt-dlpでストリーミング再生したもので GPU温度は66℃、CPU使用率は5%、CPU温度は38℃と動画再生支援が効いているのが確認できました。端末からコマンドで起動しているので下記の様に情報が表示されます。

 (+) Video --vid=1 (*) (av1 7680x4320 60.000fps)
 (+) Audio --aid=1 --alang=eng (*) (opus 2ch 48000Hz)
File tags:
 Uploader: 8K VIDEOS ULTRA HD
 Channel_URL: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ
Using hardware decoding (nvdec).
AO: [pulse] 48000Hz stereo 2ch float
VO: [gpu] 7680x4320 cuda[nv12]

下から3行目 Using hardware decoding (nvdec) がそれです。

▲ 目次へ

雑感

これまでメディアプレイヤーと言えばVLCとSMPlayerしか使ってこなかったが今回mpvを使ってみてかなり気に入ってしまった。なにが良いってメニューバー、ステータスバーを簡単なコード「border=no」たったこれだけで非表示に出来るところ。

画面キャプチャーした動画の枠消しクロップ作業の手間が省ける~

X.orgをWaylandへ切り替える

ページ冒頭で nvidiaドライバを使用するとディスプレイサーバは X.org 一択になると書きましたが Waylandセッションに切り替える方法があるようです。

  $ sudo nano /etc/default/grub 
nano :
GRUB_CMDLINE_DEFAULT="quiet splash"
 ↓
GRUB_CMDLINE_DEFAULT="quiet splash nvidia-drm.modeset=1" 
  $ sudo update-grub

PCを再起動後ログイン画面の右下に歯車アイコンが現れ、Weylandセッションを選択出来るようです。

ただし、いろいろ未知の問題があるようで 日経XTECHに記事(要ユーザー登録)がありました。もちろん試していませんけど。

▲ 目次へ

クリエイティブ・コモンズ・ライセンス
Top of Pageの画像
sidemenuの画像