虎之助の徒然記

自炊して本棚を捨てる (2) ソフトウェア編

 前回は、自炊のために用意した機器について説明しましたが、今回は、利用したソフトウェアを中心にまとめました。

 自炊本を読めるようになるまでの電子書籍化のステップは、以下の通り。

  1. Windows10上で本を高画質スキャンする。
  2. Ubuntu上で、高画質スキャンしたデータを高圧縮率で再圧縮する。
  3. 読書用に画像を1つのファイルにアーカイブする。
  4. MicroSDに保存して、タブレットで自炊本を読む。

以下では、スキャナソフトや再圧縮の方法について説明します。

1. スキャン用ソフトウェア: CapturePerfect (on Windows10)

 スキャナには、CaptureOnTouchとCapturePerfectというソフトが付属していました。CaptureOnTouchは、GoogleドライブやDropboxなどにも保存でき便利そうですが、CapturePerfectの方がスキャン条件の設定が詳細にできるので、CapturePerfectを使いました。

1.1 設定画面

 CapturePerfectは、以下の設定画面からいろいろ設定できるようになっています。

f:id:toranosuke_blog:20160520003737p:plain:w400
CapturePerfectの設定画面。
「スキャン(S)」→「スキャナの設定(S)...」から設定変更できます。

1.2 設定パラメータ

 ほとんどはデフォールトの設定のままで使っていますが、デフォールト値から変更したパラメータは、以下の項目です。

[基本]

  • カラーモード(M):「256階調グレー」「24ビットカラー」「自動で検知する」を適宜利用
  • 解像度(R): 300dpi。当初600dpiの利用でしたが、あまりにも遅いので300dpiに変更。
  • 読み取り面(S): 「両面」「片面」「白紙をスキップする」を適宜利用
  • 傾きを自動で補正する(L): 「搬送時の原稿の傾きを補正する(F)」。「画像 の傾きを補正する(C)」は挿絵などでときどき誤検知して、へんてこな補正 がかかってしまいます。

[画像処理]

  • 背景スムージング(A): 有効
  • 裏写り/地色除去(C): 除去レベルは4。黄ばんだ原稿ではときどき5に変更。
  • 影消し(S): 有効

[その他]

  • JPEG保存時の圧縮率(C): 85 (75でも十分高画質ですが念の為)。普段使い用のファイルは再圧縮します。

この設定では、黄ばんだ原稿の地色が除去できなかったり、フォント幅が細くなりすぎたりします。綺麗にスキャンするのであれば、原稿毎に調整した方がよいと思いますが、面倒なので、やっていません。

2. 画像の再圧縮とアーカイブ (on Ubuntu)

 画像の再圧縮とzipファイルへのアーカイブは、Linux(Ubuntu)で行いました。

2.1 VirtualBoxを用いたUbuntu環境

 画像の再圧縮・アーカイブは、ubuntu15.10で行いました。ubuntuは、Windows10上の仮想PCで、仮想化にはVirtualBoxを使いました。VirtualBoxでWindows側との共有フォルダの設定をしておくことで、Windows側のファイルをubuntu側で取り扱うことができます。

f:id:toranosuke_blog:20160520010700p:plain:w400
VirtualBoxの共有フォルダの設定。

上の例では、Windows側のC:\Users\toshi\homeを/media/sf_win10にマウントします。 /media/sf_win10/は、owner:root、group:vboxsfなので、/etc/groupを編集して、ユーザにアクセス権を設定します(*1)。

drwxrwx--- 1 root vboxsf 4096 5月 19 21:20 sf_win10

(*1) /media/sf_win10のファイル属性は変更できない仕様のようです。

2.2 インストールするパッケージ

 ubuntu上で用いるコマンドは、convert, zip, csh です。必要であれば、以下のパッケージをインストールします。

$ sudo apt-get install imagemagick zip tcsh

imagemagickはconvertコマンドが入っているパッケージです。

2.3 画像の再圧縮: convert

 JPEGの設定が高画質(Q=85)で設定しているとファイルサイズが大きいので、convertコマンドを用いて高圧縮率で再圧縮します。

$ convert foo_org.jpg -quality 20 foo_q20.jpg

 例えば、以下の文字中心の画像(Q=85)をQ=5,8,10,15,20,30,50で再圧縮すると、画質やデータサイズは、以下のように変わります。拡大すると画質の劣化はわかりますが、1920x1200画素の7インチ端末(MediaPad X1)では、Q=20ぐらいまではほとんど劣化は分かりません。再圧縮では、画質の劣化とデータサイズを考慮してQ=20に設定しました。

f:id:toranosuke_blog:20160520012947j:plain:w300
文字中心の画像(Q=85)

f:id:toranosuke_blog:20160520014414p:plain:w150 f:id:toranosuke_blog:20160520014423p:plain:w150 f:id:toranosuke_blog:20160520014436p:plain:w150 f:id:toranosuke_blog:20160520014444p:plain:w150
q=85 (306KB) q=50 (174KB) q=30 (133KB) q=20 (105KB)
f:id:toranosuke_blog:20160520014450p:plain:w150 f:id:toranosuke_blog:20160520014457p:plain:w150 f:id:toranosuke_blog:20160520014502p:plain:w150 f:id:toranosuke_blog:20160520014509p:plain:w150
q=15 (91KB) q=10 (73KB) q=8 (64KB) q=5 (48KB)
圧縮率を変更した場合の画質の変化。
f:id:toranosuke_blog:20160520015803p:plain:w150
600dpi、Q=100でスキャンした画像(1,848KB)

2.3 アーカイバ: zip

 次にページ毎のファイルを1つのファイルにアーカイブします。

 自炊のためのファイル形式としては、pdf形式とzip形式が候補となります。どちらの形式でもスマホ•タブレットの優れたビュアーがありますが、pdfは一旦変換してしまうと、その後にページ単位に取り扱いたい場合に面倒になるので、zip形式で保存することにしました。

 zipコマンドは、次のように使います。

$ zip book.zip page_001.jpg page_002.jpg page_003.jpg

 page_001.jpg, page_002.jpg, page_003.jpg は、ページ単位の画像のファイル名です。大量のファイルがあるので、実際には、アスタリスク(*)を用いて、次のように利用します。

$ zip book.zip page_*.jpg

2.4 画像圧縮とアーカイブのためのシェルスクリプト

 次のような自作のcshスクリプト(page2book.csh)を使って、一連の処理を実行しています。まず、本のスキャンされたページ単位のJPEGファイル(page_001.jpg,page_002.jpg)は、1つのディレクトリ(book1)の下に保存します。ディレクトリ名やページのファイル名は任意で構いません。但し、ページのファイル名は、"ls page_*.jpg"で順番に並ぶように命名する必要があります。

 使い方は、例えば2冊の本をアーカイブするのであれば、次のように実行します。

$ page2book.csh book1/ book2/

結果は、オリジナルの高画質ファイルは、ディレクトリorg/以下に、book1_org.zip, book2_org.zipで保存され、圧縮されたファイルは、ディレクトリq20/以下に、book1_q20.zip, book2_q20.zipとなります。オリジナルの*_org.zipファイルにオリジナルデータは保存されているので、book1/, book2/以下のデータは削除して構いません。

#!/bin/csh
# usage: pages2book.csh book1/ [ book2/ book3/ ... ]
#   book1's pages (e.g. page_001.jpg,page_002.jpg...) should be saved in a directory "book1/".
#   do the same with book2, book3, ..
#
# process:
#  - book1's original pages are moved to book1/org/, and zip to ./org/book1_org.zip
#  - book1's compress pages are saved to book1/q20/, and zip to ./q20/book1_q20.zip

set q = 20
set cdir = `pwd`

# make output directories
if !( -e $cdir/org/ ) mkdir -p $cdir/org/
if !( -e $cdir/q20/ ) mkdir -p $cdir/q{$q}/

foreach x ( $* )

  set bname = `basename $x`

  if !( -e $x/org/ ) mkdir -p $x/org/
  if !( -e $x/q{$q}/ ) mkdir -p $x/q{$q}/

  #---------------------------------
  pushd $x/org/

  # move original scan pages to "org/"
  mv -i ../*.jpg .

  # archive pages by zip
  zip ../{$bname}_org.zip *.jpg

  #---------------------------------
  cd ../q{$q}/

  #  re-compress scanned pages by quality=20 for example
  foreach y ( ../org/*.jpg )
    set a = $y:r
    set b = $a:t
    echo "convert $y -quality $q $b.jpg"
    convert $y -quality $q $b.jpg
  end

  zip ../${bname}_q{$q}.zip *.jpg

  # show files
  cd ../
  
  ls -al *.zip

  mv -i ${bname}_org.zip $cdir/org/
  mv -i ${bname}_q{$q}.zip $cdir/q{$q}/

  popd

end

exit

3. タブレット端末で読む

3.1 MicroSDへの保存

 2015年に購入したMediaPad X1(7インチ、1920x1200画素)にMicroSD 64GBを入れて使っています。MicroSDはexFatでフォーマットされていましたが、MediaPad X1では、exFATフォーマットを認識しないようでしたので、ntfsにフォーマットし直して利用しました。

toranosuke.hatenablog.com

 スキャンした本は 、rsync を用いてMicroSDに同期。

MicroSDがWindows側のドライブ(ここではFドライブ)をVirtualBoxの共有フォルダ機能を使ってマウントして、以下のコマンドを使います。

$ rsync -av --delete /home/tora/books/ /media/sf_F_DRIVE/books/

ファイルは、Googleドライブにも保存しているので、Googleドライブ経由でダウンロードできますが、いまのところほとんど使っていません。

3.2 PerfectViewer (on Android)

 ビュアーは、Androidの自炊ビュアーの定番PerfectViewerを利用しています。秀逸なソフトです。

f:id:toranosuke_blog:20160520141034j:plain:w300

PerfectViewerでは、ディレクトリの階層構造も保つので、ディレクトリをうまく整理しておけば、楽に本にアクセスできます。

おわりに

 これで一通り、ソフトウェアは使えるようになります。

 次回は、実際に自炊したときに生じた問題点などについて書きたいと思います。

2016/5/20

関連記事

ROOM

楽天ROOMに自炊関連の商品をまとめています(随時更新)。