Kindle をオーディオブック化するためのツール・アプリケーション群です。
こちらの記事も合わせてご覧ください:Kindle に入っているビジネス書をオーディオブック化したい
以下の流れで書籍をオーディオブック化します。 1. のステップは最初に一度だけ必要です。
- Google Cloud Platform 上に PDF 音声化サービスをデプロイ
- ローカルマシンで書籍の内容を含む PDF ファイルを作成
- Google Cloud Storage に PDF ファイルをアップロード
このアプリケーションでは Google Cloud Platform の Cloud Vision API および Text-to-Speech API を使用します。そのため、 Google Cloud Platform 上に環境構築が必要です。
- Google Cloud Platform の初期設定を済ませます。請求情報などを登録してアカウントをアクティベートし、 Google Cloud SDK をインストール・初期化してください。
- 新しくプロジェクトを作成します。ここでは
my-kindle-audify
という project id を指定していますが、自分で使う際は適当な id に変更してください。gcloud projects create my-kindle-audify --set-as-default
- Cloud Storage 上に作業用のバケットを作成します。バケット名は世界で一意である必要があります。
my-kindle-audify-bucket
の部分を適当に変更してください。gsutil mb gs:https://my-kindle-audify-bucket
- Cloud Build, Cloud Functions, Cloud Text-to-Speech, Cloud Vision の API を有効化します。
gcloud services enable cloudbuild.googleapis.com cloudfunctions.googleapis.com texttospeech.googleapis.com vision.googleapis.com
- リポジトリ内の
env.yaml.template
をenv.yaml
にコピーします。cp env.yaml.template env.yaml
env.yaml
を自分の環境に合うように編集します。ファイル内のコメントを参考にしてください。- Cloud Functions にアプリケーションをデプロイします。 deploy コマンドの引数にハイフンを2つと対象のバケット名を指定してください。
npm install && npm run build && npm run deploy -- my-kindle-audify-bucket
Kindle で表示している書籍のスクリーンショットをとります。そのスクリーンショットを書籍の内容部分だけを抽出して1つのPDFファイルにまとめます。
macOS では、リポジトリ内の KindleScreenshot.workflow という Automator アプリを使って自動でページめくりとスクリーンショットの撮影ができます。
- ローカルに ImageMagick をインストールします。
brew install imagemagick
- ホームディレクトリに
KindleScreenshot
というフォルダを作成します。mkdir -p ~/KindleScreenshot
- このリポジトリに含まれる
marker.html
を作成したKindleScreenshot
フォルダにコピーします。cp /path/to/kindle-audify/marker.html ~/KindleScreenshot
- Kindle.app を開き、書籍の初めのほう (オーディオブック化したい最初のページ) を表示します。
- macOS の通知をオフ (Do not disturb) にします。
- このリポジトリの
KindleScreenshot.workflow
を開き、実行します。 - ImageMagick のパスを尋ねられます。
which magick
で出力されたファイルを含むフォルダを指定してください。 - 書籍のタイトルを尋ねられるので、入力します。
- Automator が Kindle アプリを自動で操作しながらスクリーンショットを撮影していきます。操作せずにお待ちください。
- その後しばらく経つとブラウザが起動し、撮影したスクリーンショットが表示されます。
- スクリーンショット上で書籍の内容部分だけを含むよう矩形選択し、 Go! ボタンをクリックしてください。
- しばらく待つと選択された矩形部分だけを抽出した PDF ファイルが作成され、 Finder に表示されます。
- 必要であれば macOS の通知を元に戻します。
上記 2. のステップで都度作成した PDF ファイルを Cloud Storage にアップロードすると、自動で Cloud Functions が起動して MP3 化されます。
- 作成した PDF ファイルを Cloud Storage の当該バケットにアップロードします。
- 数分待つとオーディオブック化された MP3 ファイルが
env.yaml
で指定された Cloud Storage 上のフォルダに作成されるので、ダウンロードしてください。
一部の書籍 (10%ほど?) において OCR 処理でうまくテキストを抽出できないケースがあることがわかっています。 画像切り抜きの方法などを調整したり Vision API のパラメータを調整するなどで修正できる可能性がありますが、現状ではできていません。
Cloud IAM 上で以下の権限を持ったサービスアカウントを作成し、キーをダウンロードします。
storage.objects.create
storage.objects.delete
storage.objects.get
storage.objects.list
storage.objects.update
開発は TypeScript および Node.js です。
npm install
npm run build
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json
npm run local -- '/cloud-storage-path/to/pdf-file.pdf'
とすることで、 Cloud Functions 上で動いているアプリケーションをローカルで動かすことができます。