・LinuxでのBluray Disc再生の現状(その1)
DVDに比べてはるかに強力なコピープロテクトを施しているBluray Disc(BD)、このコピープロテクトのせいでLinuxではロクに再生できないことを知ってはいたものの、収められている情報量がDVDよりもはるかに大きいこともあり、つい発注してしまったまま放置してたBDメディアがずいぶん溜ってしまったので、少し時間が取れた機会にPlamo-7.0上でどれくらいBDが再生できるものかを調べてみた。
BDに対応しているドライブを接続しておけば、特に何もしなくてもBDを挿入するだけで、udevあたりが認識し、自動的にマウントしてくれる。
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という、市販のDVD/BDデータ変換ツールを使うこと。 このソフトはWindows/Mac版のみならずLinux版も公開されている。
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"らしい。
BDドライブのところをクリックするとメディアのコンテンツが読み込まれ、 認識された動画データがリストアップされる。
変換したい動画データにチェックを入れて、出力フォルダを適切に指定し、 "MakeMkv"のアイコンをクリックすれば、指定した動画データが復号化された上で mkv形式に変換されて保存される。
取り出した動画データは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上でも自由に再生できる。
取り出した動画データはH.264形式。
音声はdca/dts形式らしい。
字幕データもちゃんと取り出せている。
ということで、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をアーカイブしておく、という用途には便利そう。 (続く)