Hatena::ブログ(Diary)

m-kawato@hatena_diary

2010-10-11

EPUB→Kindle (MOBI) 変換メモ

| 19:24 | EPUB→Kindle (MOBI) 変換メモを含むブックマーク

ローレンス・レッシグ「CODE Version 2.0」Kindleで読みたいという動機から。

「CODE」の英語版PDFは上記のページから無償でダウンロード可能ですが、Kindleで読むにはKindleネイティブ形式の方が読みやすいです (可変文字サイズなどの理由で)。

ただし、「CODE」のKindle版は存在するらしいものの、残念ながら日本を含むAsia&Pacific地域では購入できないようです。(なぜ?)

幸いなことに、「CODE」のWikiサイト上にEPUB版のスナップショットが置かれているので、これをKindleで読めるMOBI形式に変換することを試みます。

ここでは、Amazon公式のMOBIファイル生成ツール「KindleGen」を使います。

参考にした情報

作業手順

ここではWindows版を前提とします。コマンドラインツールなので、おそらくLinux版、MacOS版でも大きな違いはないと思います。

KindleGenのインストール

KindleGenのアーカイブを適当なディレクトリに展開した後、そのディレクトリにPATHを通します。

とりあえず変換してみる

KindleGenは入力としてEPUB形式のファイルを受け取り、MOBIファイルを出力することができるので、まずは何も考えずに試してみます。

D:\work\kindle>kindlegen codev2.epub -o codev2.mobi

***********************************************
* Amazon.com kindlegen(Windows) V1.1 build 99 *
* A command line e-book compiler              *
* Copyright Amazon.com 2010                   *
***********************************************

opt -o:  output file name
opt version: try to minimize (default)
Info(prcgen): Added metadata dc:Title        "Code 2.0 : Table of Contents"
Info(prcgen): Added metadata dc:Date         "2010-09-04T04:00:00+00:00"
Info(prcgen): Added metadata dc:Creator      "Lawrence Lessig"
Info(prcgen): Added metadata dc:Subject      "law 708"
Info(prcgen): Added metadata dc:Contributor  "calibre (0.6.42) [http://calibre-ebook.com]"

Error(prcgen): Language not recognized in metadata. The dc:Language field is mandatory. Ab
orting.

どうやら、入力ファイル中にdc:Languageというメタデータが欠けているためにエラーが出ているようです。

メタデータの編集

EPUBファイルはzip形式のアーカイブになっているので、これを展開してみます。

(ここでは、input\ というディレクトリの下に展開)

この中に conent.opf というメタデータファイルがあります。これを覗いてみると、以下のような箇所があることが確認できます。

  <metadata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:calibre="http://calibre.kovidgoyal.net/2009/metadata" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <meta name="calibre:rating" content="0.00"/>
    <meta name="calibre:series_index" content="1"/>
    <dc:language>UND</dc:language>
    ...
  </metadata>

dc:language要素の値が "UND" (未定義?) になっており、これがエラーの原因になっているようです。そこで、この値を "en" に変更してみます。

  <metadata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:calibre="http://calibre.kovidgoyal.net/2009/metadata" xmlns:dc="http://purl.org/dc/elements/1.1/">
    ...
    <dc:language>en</dc:language>
    ...
  </metadata>
KindleGen再実行

content.opf編集後、KindleGenを再実行してみます。編集後にEPUBファイルを作る (zipで固めて .epubリネーム) 方法もありますが、KindleGenにはopfファイルを入力として与えることもできるので、これを試してみます。

 D:\work\kindle>kindlegen input/content.opf -o codev2.mobi
 ...
 Info(prcgen): Saving MOBI file
 Info(prcgen): MOBI File generated with WARNINGS!

大量の警告が出ますが、ひとまずMOBIファイルの生成には成功しているようです。ここでは、input\codev2.mobi という名前で出力されます。

生成されたMOBIファイルを実際にKindleに転送してみたところ、ひとまず目次情報を含めてちゃんと読めていることを確認しました。