[[diary/Kojima]]

・LinuxでのBluray Disc再生の現状(その1)

DVDに比べてはるかに強力なコピープロテクトを施しているBluray Disc(BD)、このコピープロテクトのせいでLinuxではロクに再生できないことを知ってはいたものの、収められている情報量がDVDよりもはるかに大きいこともあり、つい発注してしまったまま放置してたBDメディアがずいぶん溜ってしまったので、少し時間が取れた機会にPlamo-7.0上でどれくらいBDが再生できるものかを調べてみた。

- BDの構造

BDに対応しているドライブを接続しておけば、特に何もしなくてもBDを挿入するだけで、udevあたりが認識し、自動的にマウントしてくれる。

#ref("BD_01.png")

BDメディアのファイル形式はUDFで、

  $ mount | grep sr1
  /dev/sr1 on /run/media/kojima/GUP_TV_AND_OVA_51CH_BDBOX_D1 type udf
    (ro,nosuid,nodev,relatime,uid=1000,gid=100,iocharset=utf8,uhelper=udisks2)

中身を一覧することもできる。

  $ ls -lR /run/media/kojima/GUP_TV_AND_OVA_51CH_BDBOX_D1/
  /run/media/kojima/GUP_TV_AND_OVA_51CH_BDBOX_D1/:
  合計 6,144
  dr-xr-xr-x  3 kojima users 644 10月 31日  15:08 AACS/
  dr-xr-xr-x 10 kojima users 520 10月 31日  15:08 BDMV/
  dr-xr-xr-x  3 kojima users 136 10月 31日  15:08 CERTIFICATE/
  
  /run/media/kojima/GUP_TV_AND_OVA_51CH_BDBOX_D1/AACS:
  合計 4,630,528
  -r--r--r-- 1 kojima users     2,048 10月 31日  14:54 CPSUnit00001.cci
  -r--r--r-- 1 kojima users       288 10月 31日  15:08 Content000.cer
  ....  

これらファイルのうち、実際の動画データらしいのは、BDMV/STREAM 以下。

  /run/media/kojima/GUP_TV_AND_OVA_51CH_BDBOX_D1/BDMV/STREAM:
  合計 33G
  -r--r--r-- 1 kojima users  58M 10月 31日  14:54 00000.m2ts
  -r--r--r-- 1 kojima users  98M 10月 31日  14:54 00001.m2ts
  -r--r--r-- 1 kojima users 7.6G 10月 31日  15:00 00002.m2ts
  -r--r--r-- 1 kojima users 7.6G 10月 31日  15:01 00003.m2ts
  -r--r--r-- 1 kojima users 7.6G 10月 31日  15:07 00004.m2ts
  -r--r--r-- 1 kojima users 7.6G 10月 31日  15:08 00005.m2ts
  -r--r--r-- 1 kojima users  61M 10月 31日  15:07 00006.m2ts
  -r--r--r-- 1 kojima users 417M 10月 31日  15:07 00007.m2ts
  ....

これらのファイルはH.264形式でエンコードされた動画と音声のデータなはずだけど、
AACSと呼ばれる暗号化が施されていて、そのままでは無意味なバイト列でしかない。

  $ file /run/media/kojima/GUP_TV_AND_OVA_51CH_BDBOX_D1/BDMV/STREAM/00002.m2ts 
  /run/media/kojima/GUP_TV_AND_OVA_51CH_BDBOX_D1/BDMV/STREAM/00002.m2ts: data

  $ od -cx /run/media/kojima/GUP_TV_AND_OVA_51CH_BDBOX_D1/BDMV/STREAM/00002.m2ts  | head
  0000000 342   n 273   h   G   @  \0 020  \0  \0 260 021  \0  \0 301  \0
             6ee2    68bb    4047    1000    0000    11b0    0000    00c1
  0000020   g   ,   >   O   Q   s 270   Q 262 336 316 221  \t   ;   M 352
             2c67    4f3e    7351    51b8    deb2    91ce    3b09    ea4d
  0000040 343 243   p   0 371 316   , 362 002 263 207 255 366   # 321 034
             a3e3    3070    cef9    f22c    b302    ad87    23f6    1cd1
  ...

問題は、この暗号化されたデータをいかに復号して動画と音声データに戻すか、ということになる。

- MakeMKV

一番簡単なのは、[[MakeMKV:https://www.makemkv.com/]]という、市販のDVD/BDデータ変換ツールを使うこと。
このソフトはWindows/Mac版のみならず[[Linux版:https://www.makemkv.com/forum/viewtopic.php?f=3&t=224]]も公開されている。

Linux版のMakeMKVは、makemkv-binとmakemkv-ossという2つのファイルから構成されていて、

  $ ls -lh *tar.gz
  -rw-r--r-- 1 kojima users 9.0M  1月 30日  23:42 makemkv-bin-1.14.2.tar.gz
  -rw-r--r-- 1 kojima users 4.2M  1月 30日  23:42 makemkv-oss-1.14.2.tar.gz

このうち、makemkv-ossはQt5を用いたGUIや共有ライブラリの部分で、ソースコードを公開されているものの、ここには暗号化されたデータを復号する機能は含まれていない。

その機能を提供しているのがmakemkv-binの方で、こちらはコンパイル済みのバイナリ配布で、コアになるのは makemkvcon というコマンド。

  $ tar tvf makemkv-bin-1.14.2.tar.gz 
  drwxr-xr-x nobody/nogroup    0 2018-12-01 10:21:21 makemkv-bin-1.14.2/
  drwxr-xr-x nobody/nogroup    0 2018-12-01 10:21:21 makemkv-bin-1.14.2/src/
  -rw-r--r-- nobody/nogroup 23952 2018-12-01 10:21:21 makemkv-bin-1.14.2/src/eula_en_linux.txt
  -rw-r--r-- nobody/nogroup   306 2018-12-01 10:21:21 makemkv-bin-1.14.2/src/ask_eula.sh
  drwxr-xr-x nobody/nogroup     0 2018-12-01 10:21:21 makemkv-bin-1.14.2/src/share/
  -rw-r--r-- nobody/nogroup   101 2018-12-01 10:21:21 makemkv-bin-1.14.2/src/share/blues.policy
  -rw-r--r-- nobody/nogroup 231936 2018-12-01 10:21:21 makemkv-bin-1.14.2/src/share/appdata.tar
  -rw-r--r-- nobody/nogroup 2850026 2018-12-01 10:21:21 makemkv-bin-1.14.2/src/share/blues.jar
  -rw-r--r-- nobody/nogroup    1026 2018-12-01 10:21:21 makemkv-bin-1.14.2/Makefile
  drwxr-xr-x nobody/nogroup       0 2018-12-01 10:21:21 makemkv-bin-1.14.2/bin/
  drwxr-xr-x nobody/nogroup       0 2018-12-01 10:21:21 makemkv-bin-1.14.2/bin/i386/
  -rw-rw-r-- nobody/nogroup 6019032 2018-12-01 10:21:21 makemkv-bin-1.14.2/bin/i386/makemkvcon
  drwxr-xr-x nobody/nogroup       0 2018-12-01 10:21:21 makemkv-bin-1.14.2/bin/amd64/
  -rw-rw-r-- nobody/nogroup 6218344 2018-12-01 10:21:21 makemkv-bin-1.14.2/bin/amd64/makemkvcon

makemkvconの依存関係はこんな感じ。

  $ readelf -d  /usr/bin/makemkvcon 
  
  Dynamic section at offset 0x5ec0a0 contains 30 entries:
   タグ        タイプ                       名前/値
   0x0000000000000001 (NEEDED)             共有ライブラリ: [libmakemkv.so.1]
   0x0000000000000001 (NEEDED)             共有ライブラリ: [libdriveio.so.0]
   0x0000000000000001 (NEEDED)             共有ライブラリ: [libpthread.so.0]
   0x0000000000000001 (NEEDED)             共有ライブラリ: [libc.so.6]
   0x0000000000000001 (NEEDED)             共有ライブラリ: [libdl.so.2]
   0x0000000000000001 (NEEDED)             共有ライブラリ: [libstdc++.so.6]
   0x0000000000000001 (NEEDED)             共有ライブラリ: [librt.so.1]
   0x000000000000000c (INIT)               0x405700
   0x000000000000000d (FINI)               0x6d2c54
   ....

ここで参照しているlibmakemkv.so.1とlibdriveio.so.0は、makemkv-oss のソースコードからビルドできる。

  $ less makemkv_oss-1.14.2-x86_64-B1.txz 
  drwxr-xr-x root/root         0 2019-01-30 23:49:45 usr/
  drwxr-xr-x root/root         0 2019-01-30 23:49:45 usr/lib/
  -rw-r--r-- root/root     26936 2019-01-30 23:49:45 usr/lib/libdriveio.so.0
  -rw-r--r-- root/root    589472 2019-01-30 23:49:45 usr/lib/libmakemkv.so.1
  -rw-r--r-- root/root     39296 2019-01-30 23:49:45 usr/lib/libmmbd.so.0
  drwxr-xr-x root/root         0 2019-01-30 23:49:45 usr/bin/
  -rwxr-xr-x root/root  25352192 2019-01-30 23:49:45 usr/bin/makemkv

ソースコードをビルド、インストールしてやると、"makemkv"コマンドでGUIな画面が表示され、
接続しているBDドライブを選ぶとデバイス情報が表示される。BDドライブはfirmwareにAACSが実装されているそうで、このBDドライブは"AACS v65"らしい。

#ref("makemkv_01.png")

BDドライブのところをクリックするとメディアのコンテンツが読み込まれ、
認識された動画データがリストアップされる。

#ref("makemkv_02.png")

変換したい動画データにチェックを入れて、出力フォルダを適切に指定し、
"MakeMkv"のアイコンをクリックすれば、指定した動画データが復号化された上で
mkv形式に変換されて保存される。

#ref("makemkv_03.png")

取り出した動画データはmkv(Matroska)形式になっている。

  $ ls -lh ガールズ&パンツァー TV&OVA\ 5.1ch\ Blu-ray\ Disc\ BOX\ 1_t0*
  -rw-r--r-- 1 kojima users 29G  1月 31日  16:15 ガールズ&パンツァー TV&OVA 5.1ch Blu-ray Disc BOX 1_t00.mkv
  -rw-r--r-- 1 kojima users 25G  1月 31日  16:37 ガールズ&パンツァー TV&OVA 5.1ch Blu-ray Disc BOX 1_t01.mkv
  $ file ガールズ&パンツァー TV&OVA\ 5.1ch\ Blu-ray\ Disc\ BOX\ 1_t0*
  ガールズ&パンツァー TV&OVA 5.1ch Blu-ray Disc BOX 1_t00.mkv: Matroska data
  ガールズ&パンツァー TV&OVA 5.1ch Blu-ray Disc BOX 1_t01.mkv: Matroska data

mkv形式は、smplayerやvlcといったメディアプレイヤーが対応しているので、
Linux上でも自由に再生できる。

#ref("makemkv_04.png")

取り出した動画データはH.264形式。

#ref("makemkv_05.png")


音声はdca/dts形式らしい。

#ref("makemkv_06.png")

字幕データもちゃんと取り出せている。

#ref("makemkv_07.png")

ということで、MakeMKVを使えば、BDのコンテンツを復号してmkv形式に取り出すことは可能で、Plamo-7.0でもちゃんと動いた。

MakeMkvは、復号化のコアの部分は公開されていない市販ソフトウェアなものの、30日の試用期間が設けられていて、その間は無料で試用可能。しかも、現在はβ版ということで、
毎月月末に試用期間を30日間延すためのキーが公開されているそうで、実質無料で使い続けられる模様。

もっともMakeMkvは「BDプレイヤー」ではなく「データコンバータ」なので、所有しているBDメディアをポンと入れて再生する、というわけにはいかず、Linux環境で見たいメディアは、いったんmkv形式に変換してHDD上にアーカイブしておく必要がある。圧縮率や含まれているデータ量にもよるだろうけど、今回試したBDでは約100分のコンテンツが30GB程度になったので、HDDはそれなりに手配しておく必要がありそう。

まぁ、暗号化されていないmkv形式で取り出せるので、必要ならばBD-R等に書き出し直すことも可能だろうし、最近のHDDは3TBで10k、8TBでも20K強くらいだから、ファイルサイズはあまり気にする必要は無い気もする。

MakeMKVがいつまでLinuxで使い続けられるかという懸念はあるものの、とりあえず手元のBDをアーカイブしておく、という用途には便利そう。
([[続く:http://plamo.linet.gr.jp/index.html/index.php?cmd=edit&page=diary%2FKojima%2F2019-02-17]])
([[続く:http://plamo.linet.gr.jp/index.html/index.php?diary%2FKojima%2F2019-02-17]])

- 書き忘れてたけど、makemkvはBDドライブなどをsgドライバ経由のSCSIメディアとして操作するので、使う前には modprobe sg でsgドライバをロードしておく必要あり。 -- [[kojima]] &new{2019-01-31 (木) 23:51:54};

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS