クリスマスなのでLinuxでQSVエンコードする

クリスマスなのでLinuxでQSVエンコードする

こちらはDTV Advent Calendar 21日目の記事です。

みなさん録画データの管理はどうしていますか? 視聴したら消す人もいれば、視聴しても残しておく人、視聴してない詰みTSがたくさんある人、いろいろあると思います。 残しておけば不慮の事故がない限り、いつでも見返すことができますが、どんどんとHDDの空き容量が少なくなっていくのが現実です。 私は録画データは変換せずに取って置く人間なので、Disk fullで録画失敗した回数は数知れず、これまで2年間で10TB超の録画が溜まっています。 年末の大掃除も兼ねて、いくつか録画データを削除したくもなかなか踏み切れず、結局空き容量は一つも増えていません。

これでは年始の相棒スペシャルが録画できないので、録画データを消さずに空き容量を増やさなければなりません。 そこで考えられるのが動画のエンコード。DTV Advent Calendar経由でこの記事に他取り付いた人にとっては当たり前のことかもしれませんが、録画データをH.264エンコードして保管することにしました。

そこで検討する必要があるのがエンコード方法。 地デジにおいてはx264を用いたソフトウェアエンコードが一般的なようですが、他にもNVidia製GPUを用いたnvencやIntel CPUに搭載のグラフィックプロセッサによるQuick Sync Video(QSV)などがあります。 Linuxにおいてはffmpeg/x264のソフトウェアエンコードの方法ばかりがWebに蔓延する中、他の方法はほとんど取り上げられていません。寂しいです。

前置きが長くなりましたが、LinuxでQSVエンコードする方法をご紹介します。

目次

Open 目次

  1. FFmpegによるLinuxでのQSVエンコード
    1. 環境構築
      1. Intel HD Graphics Pass-through
    2. Intel Media Server Studio
    3. FFmpegによるQSVエンコード
    4. 地デジをエンコード
      1. 結果
        1. 元ファイル(MPEG-2)
        2. 変換後ファイル(H.264)

FFmpegによるLinuxでのQSVエンコード

今年の頭に書いた記事でもLinuxでのQSVを取り上げました(参照: Intel QSVのH.264エンコードをLinuxで! - 犬アイコンのみっきー)。しかしあれから約1年が経ち、いろいろと変わってきたので 環境の再構築とパッケージの修正などを行いました。 QSVエンコード環境の導入に関して必要なエンコーダーは、自分で用意する必要もなくなり、QSVを利用できる環境も大きく変わりました。

今回紹介するバージョンでは以下の環境でのみ動作します。

項目名対応環境
CPUHaswell/Broadwell Core iシリーズ, Xeon E3 v3/v4 with GPU
OSCentOS 7.1

環境構築

今回構成するシステムは下図のようになっています。

PT3とUSB ICカードリーダーをパススルーしたChinachu環境に加えて、Intel HD GraphicsをパススルーしたQSVエンコード用のCentOSをProxMox VEの上で動作させています。 今回はQSVのお話なのでChinachuの環境構築の紹介はしません。

Intel HD Graphics Pass-through

昨年のLinux Advent CalendarにてIntel HD Graphics Pass-throughを取り上げましたが(参照:KVMでQSVするためIntel HD Graphicsパススルーするー)、あれから1年が経ち色々と変わってきている部分があります。 1年前はProxMox 3.2で構築していた仮想マシンも今では4.1となり、自前でカーネルをビルドする必要がなくなったことが大きな違いです。 そのため、ProxMoxのカーネルはそのままに、Pass-through機能を有効にする設定をいじるだけでIntel HD Graphicsのパススルーができます。

前回の方法では自前ビルドのカーネルで有効にしていたIOMMUの機能が、ProxMox 4.1の標準カーネルではデフォルト無効になっているので、有効にしてあげるように起動時パラメータを指定します。 root権限で以下のように実行し、IOMMUを有効化します。

# sed -i -e 's/\(GRUB_CMDLINE_LINUX="\)\(.*"\)/\1intel_iommu=on \2/' /etc/default/grub
# grub-mkconfig -o /boot/grub/grub.cfg
# reboot

IOMMUが有効になれば、あとは仮想マシンの設定ファイルにIntel HD Graphicsをパススルーする記述を加えるのみです。 全体的には以下のようなPorxMox仮想マシン設定ファイルが出来上がりました。

bios: ovmf
boot: cdn
bootdisk: sata0
cores: 4
cpu: host
hostpci0: 00:02.0,pcie=1,rombar=on,x-vga=on
ide2: iso-image:iso/CentOS-7-x86_64-Minimal.iso,media=cdrom
machine: q35
memory: 4096
name: QSV
net0: e1000=66:63:63:25:51:27,bridge=vmbr0
numa: 0
ostype: l26
sata0: local:115/vm-115-disk-1.qcow2,size=32G
serial0: socket
smbios1: uuid=4b9f905b-66a5-4858-b1db-914bfd369aeb
sockets: 1

CentOSにてQSV対応カーネルをビルドする都合上、4コア割り当てていますが環境構築後は1コアに変更しても十分なパフォーマンスが発揮できます。 あとはこのパススルーした仮想マシンにCentOS 7.1をインストールし、QSVエンコード環境を作っていきます。 仮想マシンであろうがなかろうが続くQSV環境の導入に関する話で行うことは全く一緒なので、素のCentOS 7.1で行っているものとして読んでください。

Intel Media Server Studio

今年の頭に書いた記事でもIntel Media Server Studio(以下、MSS)を紹介しましたが、当時は数千ドルする有償SDKのみの公開だったため、試用期間しか利用できず、導入方法とエンコードの実験を行うだけでした。 しかし、今年9月にMSSのアップデートがあり、バージョンR6の登場とともに無償のCommunity Editionが公開され、私的利用の範囲で無期限で利用することができるようになりました。 今回はそれを導入し、QSVによる動画のH.264エンコードを行います。

Intel® Media Server Studio | Intel® Developer Zone

Get Intel Media Server Studio

手順は前に紹介した時のものとあまり大きくは変わらないのですが、今回もMSSのインストールスクリプトに少々バグがあります。 文字でつらつらと説明するのも読者側からすればめんどくさいの一言で嫌われてしまう記事になってしまうので、MSSのインストールスクリプトを用意しました。

mzyy94/QSV-on-Linux on GitHub

README.mdを読み、スクリプトの内容を確認し、MSSを用意したら以下のようにコマンドを叩くとインストールされます。

$ ./install-MSS.sh

FFmpegによるQSVエンコード

FFmpegもバージョンアップがあり、昨日2015/12/20にバージョン2.8.4が公開されました。 この1年のバージョンアップの間に標準でQSVエンコーダーが搭載され手動で追加する必要がなくなりました。 しかし今回導入したMSS 2015 R6では必要なファイルが不足しているため、いくつか手を加えなければいけません。 これもまた何をするかを事細かに説明するよりかはスクリプト実行で導入できた方が楽なので、よしなにしてくれるものを用意してあります。

先ほどのリポジトリに移動し、以下のようにすることでQSVに対応したFFmpegができあがります。

$ ./build-ffmpeg.sh

他のエンコーダー/デコーダーが必要な場合は適宜修正して導入してください。

地デジをエンコード

DTV(Digital TeleVision = デジタルテレビ放送) Advent Calendarのネタなので、地上デジタル放送の録画TSファイルをエンコードしてやっと完結です。 ということで、2015/12/19放映のご注文はうさぎですか??第11羽をエンコードしてみます。

$ ffmpeg -y -i gr23608-18yd.m2ts -f mp4 -vcodec h264_qsv -vprofile main -level 4.1 -s 1280x720 -r 24 -q 20 -acodec copy gochiusa11.mp4

と、エンコードしてみたものの、ProxMox 4.xのバグらしいものを踏んでしまい、ホストOSがカーネルパニックになってしまったために、エンコードが終了しませんでした。 なので投稿日の夕方になってベアメタルマシンに導入して試しています(故にAdvent Calendarに間に合わなカッタ)。

結果

約9分でQSVによるH.264エンコードが終わりました。

項目元ファイル変換後ファイル
長さ29:5629:56(カットなし)
ファイルサイズ1963490988 bytes (1.87GB)62257131 bytes (594MB)
解像度1440x10881280x738
フレームレート29.9724.00
動画コーデックMPEG-2H.264
音声コーデックAACAAC(無変換)
元ファイル(MPEG-2)

シャロシコ Original

変換後ファイル(H.264)

シャロシコ QSV


以上、DTV Advent Calendar 21日目の記事でした。 明日はrndomhackさんです。

Related Posts

KVMでQSVするためIntel HD Graphicsパススルーするー

この記事は Linux Advent Calendar 2014 12日目の記事です。12月も中頃となり寒い日が続きますね。みなさん体調はいかがでしょうか。先日の こたつを温める実験 で十分な...

read more

Intel QSVのH.264エンコードをLinuxで!

前回の記事 から1ヶ月以上空いてしまいました。遅ればせながらで申し訳ありません。続編です。 Intel QSVは高速にある程度の画質のエンコードできてよいです。とても。今回はKVMでIntel H...

read more

LinuxでQSVとH.264のエンコード対決

先日の記事、でLinuxでH.264の動画をエンコードできることを紹介しました。 そのベンチマークをとってみました。QSVでのエンコードとlibx264を用いたエンコードの比較となります。今回エン...

read more
Raspberry Pi2にOSMC入れてKodi(旧:XBMC)日本語化するまで

Raspberry Pi2にOSMC入れてKodi(旧:XBMC)日本語化するまで

今月頭の発表で一気に盛り上がりを見せた Raspberry Pi 2 Model B 。もちろん発売日に購入しました。 手元にはRaspberry Pi BとGalileo Gen2の2つのLinux...

read more
KodiとChinachuで地デジLive視聴 on Raspberry Pi2 w/ OSMC

KodiとChinachuで地デジLive視聴 on Raspberry Pi2 w/ OSMC

どうも、Raspberry Pi2で遊ぶ毎日が続いております。 Raspberry Pi model B(2ではない)にRaspbmcを入れて昨年の夏頃からChinachu経由で地上デジタル放送を視聴...

read more
KodiでChinachuの録画を観るAdd-on作った

KodiでChinachuの録画を観るAdd-on作った

Raspberry Pi2でKodi(旧:XBMC)が快適に動き、地デジのLIVE視聴環境として優れているので、 Chinachuの本領である録画した動画の視聴したみが高まってきました。Kodiに...

read more
Kodi Chinachu PVRアドオンでRasPi2/Android TVをテレビに

Kodi Chinachu PVRアドオンでRasPi2/Android TVをテレビに

暑い日が続きますね。こういう日はエアコンの効いた部屋でだらだらとテレビを見たいものです。 しかしテレビをもっておりません。27インチのモニタを持っているのみです。ただ、今年2月に記事にしたように、...

read more
Harekaze for Kodi (pvr.chinachu) 4.0.0 リリース

Harekaze for Kodi (pvr.chinachu) 4.0.0 リリース

KodiとChinachuがシームレスに連携し、快適に地デジが視聴できるアドオン Harekaze for Kodi(pvr.chinachu) をKodi 17 Krypton に対応したバージョン...

read more
HDMI入力をRaspberry Piで駆使する

HDMI入力をRaspberry Piで駆使する

昨今の衰えることのない技術トレンドに追従すべく、映像配信とかやりたいなーと思っていた2019年。 めっきり時間がなく何もできず、気付けば2020年になっていました。今年も時間がないだろうなぁと思っ...

read more
UAC GadgetでNintendo Switchの音声出力をRaspberry Piに取り込む

UAC GadgetでNintendo Switchの音声出力をRaspberry Piに取り込む

前回の記事 でHDMI映像入力をRaspberry Piで扱う方法を紹介し、その最後に音声の取り込みについて、まだ課題が残っていると書きました。 HDMI入力からの音声取り込みといった、本質的な課題の...

read more
Raspberry PiでHDMIディスプレイを調査する[EDID/CEC]

Raspberry PiでHDMIディスプレイを調査する[EDID/CEC]

みなさん、テレビやディスプレイに備わるHDMIの情報を確認する必要に迫られることはありませんか? 1年に一度くらいはありますよね。映像がうまく映らなかったり、操作がうまくいかなかったり。 そんな時にパ...

read more
LibreELECで地デジを楽しむためにMirakurunとEPGStationを一発で動かす

LibreELECで地デジを楽しむためにMirakurunとEPGStationを一発で動かす

地上デジタル放送をRaspberry Piで視聴する定番の組み合わせを、ノーコード・コマンドライン操作なしに、すなわち一発でセットアップできるようにした。...

read more
SIRUI 35mm/F1.8 1.33xアナモルフィックレンズで夜景を撮る

SIRUI 35mm/F1.8 1.33xアナモルフィックレンズで夜景を撮る

ずっと欲しかったアナモルフィックレンズを手に入れた。SIRUI 35MM /F1.8 1.33X ANAMORPHIC LENS最近カメラを手にする人が増えているようなので、どうせならとレンズ...

read more
Raspberry Pi CM4とCSI-2接続HDMI入力基板で音も取る

Raspberry Pi CM4とCSI-2接続HDMI入力基板で音も取る

2年前に投稿した HDMI入力をRaspberry Piで取り込む記事 では映像しか取得していませんでしたが、このHDMI入力基板には音声も取り込めるチップ TC358743 が搭載されています。 取...

read more
自宅サーバーを増やした

自宅サーバーを増やした

増税前のPCパーツ買いだめイベントに便乗して、3月中に自宅サーバーを増設しました。 どんな構成で組み立てたのかの紹介になります。...

read more
NAS用OSにRockstorという選択

NAS用OSにRockstorという選択

みなさんはNASのOSとして何を使っていますか? FreeNAS、OpenMediaVault、巷にはいくつもOSSのNAS用OSがあります。 なにを選んだらいいのでしょう?少し前までは非力なAt...

read more
RockstorにChinachuを詰め込んで録画NAS作ろ

RockstorにChinachuを詰め込んで録画NAS作ろ

昨日紹介したRockstor というNAS用OS、とても便利で快適に使っています。 今まで低消費電力で非力なマシンで動作させていたNASもCore i5で動作するようになり、 もっといろいろとやらせて...

read more