テレビ録画メディアサーバー構築入門(第16回)
Intel内蔵GPUでハードウェアアクセラレーション
ハードウェアアクセラレーション(HWA)とは?
ハードウェアアクセラレーションは、動画処理タスクをソフトウェア(CPU)ではなく、専用のハードウェア(GPUなど)に処理させることで、パフォーマンスを向上させる技術です。
必要?
使えるのであれば、使わない手はない。
サーバーPCと生活していると、高負荷時に動作するファンの音が気になるときがあります。うちのfearowちゃん頑張っているなぁ、で済めばよいですが、夏場の殺人的な暑さの中で、筐体(ボディー)が「チンチン」に熱くなっていることに一度気づくと、愛機のCPUが溶けるのではと不安になります。
本稿で構築した方法(第8回)では、CPU負荷が録画に影響しないよう、最大限の配慮をしているのですが、実のところ、メディアサーバー(jellyfin)で視聴する行為もCPU負荷の要因となっています。
たとえば、病院で長い待合時間に、撮りだめしておいた録画番組。家では視る機会がなかったが、せっかく暇なので、いまスマホで視ちゃいたい。が、通信環境が理想的ではなく、動画が「カクついて」録画した画質では、どうにも快適に視聴できない。そんなときは、画質を下げて、通信量を減らせば、とりあえず視られるようにはなる。のですが、このとき自宅のサーバーでは必死の圧縮作業を肩代わりしています。このように、それとは知らずに、貧者のモットー?「録画するなら動画処理するな。」に反して、愛機に負担をかけている可能性があるわけです。JellyfinのHWA対応は(特にインテルCPUに対して)優秀なので、利用できるのに利用しない選択肢はありません。
とはいえ、PCスペック的に利用可能であっても、設定方法がわからない、ネットに書いてあるとおりコピペしても動かない、面倒くさい、ていうか利用可能かどうかすら わ か ら な い 、など、使用する人間の側の問題なのですが、時間は貴重で有限ですから、これらは十分にあきらめる理由になります。(そもそも、ほとんどの社会人は、こんな面倒なことに足を踏み入れません。)
とりあえず試してみて、ダメそうならあきらめましょう。
長々と言い訳するのは、今回は「入門」編というより、個別の対応が必要になる可能性があるという意味で、中級者向けな気がするためです。
VAAPI/QSV
VAAPI (Video Acceleration API) と QSV (Quick Sync Video) はどちらも、ビデオ処理のハードウェアアクセラレーションを利用するための技術ですが、それぞれ異なるグループによって開発され、異なるハードウェアプラットフォームを対象としています。
VAAPIはオープンソースコミュニティにより開発され,QSV はIntelにより開発されIntel 製 GPU 専用です。VAAPIは幅広いハードウェアに対応していますが,Intel製CPUではQSVのほうが優秀です。最近の Intel 製 CPU に内蔵されている GPU は、ほとんどの場合 QSV に対応しています。
ドライバのインストール
sudo apt-get install libva-dev libmfx-dev v4l-utils intel-media-va-driver
sudo apt-get install intel-media-va-driver-non-free デバイス確認
takya@fearow22:~$ ls -l /dev/dri
合計 0
drwxr-xr-x 2 root root 80 6月 28 10:55 by-path
crw-rw----+ 1 root video 226, 0 6月 28 10:55 card0
crw-rw----+ 1 root render 226, 128 6月 22 18:57 renderD128Jellyfin再起動
sudo docker stop jellyfin
sudo docker rm jellyfin
cd
sudo docker run -d --name jellyfin --user 1000:1000 --group-add="110" --device /dev/dri/renderD128:/dev/dri/renderD128 --net=host --volume ./jellyfin/config:/config --volume ./jellyfin/cache:/cache --mount type=bind,source=./media,target=/media --mount type=bind,source=./movies,target=/movies --mount type=bind,source=./downloads,target=/downloads --restart=unless-stopped --volume /usr/share/fonts:/usr/share/fonts --volume /usr/share/fontconfig:/usr/share/fontconfig jellyfin/jellyfin:10.10.7(2025/11/7追記: 末尾にバージョン10.10.7を追加。Jellyfinは10/19に最新安定版10.11.0がリリースされた。大型アップデートのため、最新版に更新すると、バックアップなしでは、旧版には戻せない(新規インストールが必要となる)。基本機能が安定するまでは、10.10.7の使用を推奨します。)
Jellyfin設定
ダッシュボード、プレイバック、トランスコーディングのハードウェアアクセラレーションより「Video Acceleration API(VAAPI)」(または「Intel QuickSync(QSV)」)「ハードウェアエンコーディングを有効にする」
保存すると、以下の表示がでる。
ハードウェアアクセラレーション
ハードウェアアクセラレーションを有効にすると、環境によっては不安定になる可能性があります。 オペレーティングシステムとビデオドライバが完全に最新であることを確認してください。 これを有効にした後でビデオの再生が困難な場合は、設定を[なし]に戻す必要があります。
うまくいったかどうか、動画を再生して、右下の歯車マーク⚙、「品質」を下げてみる。低画質で再生されていれば問題ない。CPU負荷が軽減されているはず。端末から top でみてみる。あるいは、
takya@fearow22:~$ ps xau |grep ffmpeg
takya 2325173 88.8 0.1 2290916 68660 ? Sl 12:39 1:21 /usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -probesize 1G -f mov,mp4,m4a,3gp,3g2,mj2 -init_hw_device vaapi=va:,vendor_id=0x8086,driver=iHD -init_hw_device qsv=qs@va -filter_hw_device qs -hwaccel qsv -hwaccel_output_format qsv -noautorotate -c:v h264_qsv -i file:/media/パディントンのぼうけん/たえられない夏のおくりもの/アニメ パディントンのぼうけん「たえられない夏のおくりもの」ほか[二][字]__06月28日08時10分GR13.mp4 -noautoscale -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 h264_qsv -preset veryfast -b:v 292000 -maxrate 292000 -bufsize 584000 -profile:v:0 high -level 40 -g:v:0 90 -keyint_min:v:0 90 -vf setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,vpp_qsv=w=960:h=720:format=nv12 -codec:a:0 libfdk_aac -ac 2 -ab 128000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type fmp4 -hls_fmp4_init_filename 618562a61c289d278b0e5c92d07e66cc-1.mp4 -start_number 0 -hls_segment_filename /cache/transcodes/618562a61c289d278b0e5c92d07e66cc%d.mp4 -hls_playlist_type vod -hls_list_size 0 -y /cache/transcodes/618562a61c289d278b0e5c92d07e66cc.m3u8うまくいっていないなら、あきらめる(設定を[なし]に戻す)。もしくは、がんばって原因を追求する。
低画質にしすぎると再生できなくなることがある。再生できなくなった場合は、トランスコーディングのハードウェアアクセラレーション設定を[なし]に戻す。
うまくいったならば
上記はJellyfin 同梱のffmpegで、第4回にコンパイルしたffmpeg とは別ものです。Jellyfinのものは視聴用。コンパイルしたものは編集用。
編集設定変更
自家製 ffmpegのOPTIONを、libx264 (ソフトウェアエンコーディング)から h264_qsv (ハードウェアエンコーディング)に変更してエラーがでないかどうかテスト確認してみる(第4回の「動画変換テスト」)。
負荷軽減に加えて、処理速度 speed が改善されるのではないでしょうか。
問題なさそうなら、enc0.shとenc1.shの OPTIONを -c:v libx264 から -c:v h264_qsv に変更する。可変ビットレートにするなら、-c:v libx264 -ar 48000 -b:v 5000k を -c:v h264_qsv -global_quality 20 -preset slower に変更する。
encode.sh の変数 speed を変更する。(第8回)
Jellyfinおすすめ設定
Jellyfinでハードウェアアクセラレーションが使えるようになったのであれば、Trickplayをオンにしてもよいかもしれません。
Trickplay 機能とは、動画をシーク(早送り/巻き戻し)する際に、シークバーにサムネイル画像を表示する機能のことです。
ライブラリに動画が追加されると、自動で必要な画像が生成されはじめるのですが、これが結構サーバーに負荷をかけるので、この機能はデフォルトではオフになっています。
Jellyfin「ダッシュボード」「ライブラリ」のライブラリの各ライブラリから、「ライブラリを管理」から、下の方の、項目Trickplayの「トリックプレイ画像の抽出を有効にする」「ライブラリスキャン中にトリックプレイ画像を抽出する」をチェック。
Save trickplay images next to mediaをチェックしない理由は、空フォルダの削除(第9回)で動画mp4の存在しないフォルダを削除しているためです。
追記:「チャプターイメージ」にチェックを入れておくと、チャプター割りされた動画を視聴するときに役立ちます。最新のenc01.shでは、chapter_exe(第4回)を使用して、チャプター情報を入れるようにしました。
続いて、ダッシュボードの「プレイバック」の「Trickplay」で「ハードウェアデコーディングを有効にする」「 ハードウェアアクセラレーションを使用したMJPEGエンコーディングを有効にする」「Only generate images from key frames」をチェックし、保存。
関係ないですが、おすすめ設定つながり、ということで、右上の「人」マークから個人設定をひらき、「ディスプレイ」の「背景」をチェックすると見た目がカッコよくなります。
ライブラリを閲覧している間、背景画がいくつかのページの背景に表示されます。
Jellyfinのおすすめ設定(プラグイン)は定番のネタですが、日本でのユーザーベースがそれほど大きくないため、日本語の情報は限られている印象です。Jellyfinがもっと普及することを願うひとりとして、この記事の執筆が普及の一助になると信じ、時間を割いているところです。
注意(言い訳)
上記内容は、メモと記憶に基づくものです。実をいうと、ハードウェアアクセラレーションは早い段階で使えるようにしていたのですが、いろいろ面倒なのと初心者向けではないために、あえて、ここ(入門講座)に書き残しておこう、とは考えていませんでした。必要な作業工程が抜けているかもしれません。



コメント