EPUBを
オーディオブックに

EPUB形式の電子書籍を、章ごとのMP3に変換します。使うのはコマンドラインでも、ローカルのWebページでもかまいません。1つの声が地の文を読み、かぎかっこの中で話す登場人物には、それぞれ別の声が付きます。どの章にも単語ごとのタイミングと字幕が付くので、再生しながら本文を目で追えます。
alice_sample.epubをプレビュー実行した後のAudiobook Webアプリ。Preview onlyにチェックが入り、キャストモードはPer speaker、ナレーターはArchie、言語はEnglish。ログには約15065 Cartesiaクレジット、音声の割り当て(Alice = Maya、Mouse = Leo)、2章とも処理済みであることが表示されている

スクリーンショット. ローカルで動かしたテンプレート。

モデル
sonic-3.6
言語
初期設定は英語。ほかの言語は--languageで指定
ライセンス
MIT
技術スタック
PythonGradioEbookLibffmpeguv
Cartesia の製品
Sonic 3.6

できること

コマンドラインツールとWebアプリは、同じ変換を実行します。このプロジェクトは、p0n1によるオープンソースのepub_to_audiobookのフォークです。

同梱の読み上げ用ページでは、再生に合わせて単語が1つずつ強調され、単語をクリックするとその位置に移動します。字幕ファイルは、たいていのプレーヤーで使えます。

自分で動かす

  1. キーなしでプレビューする

    下のコマンドを実行します。Python 3.10から3.12と、インストール済みのuvとffmpegが必要です。--previewでの実行は音声を作らず、キーも要りません。サンプルの本を章に分け、15,065文字(約15,000クレジット)と数え、登場人物ごとに選んだ声を記したout/cast.jsonを書き出します。

    npx degit cartesia-ai/cookbook/examples/audiobook audiobook
    cd audiobook
    uv sync
    uv run python main.py samples/alice_sample.epub out --preview --no_prompt
    

    環境変数
    CARTESIA_API_KEY
    play.cartesia.ai/keys。--previewでは不要
  2. 音声を作る

    .env.exampleを新しい.envファイルにコピーします。そこにCARTESIA_API_KEYを追加します。set -a; . ./.env; set +aでシェルに読み込みます。そのあと--previewを外して同じコマンドを実行します。スクリプトから実行するときは、-yを付けると料金の確認を省略できます。

  3. Webアプリを使う

    uv run python main_ui.pyを実行します。次にhttp://127.0.0.1:7860を開きます。そのシェルでCARTESIA_API_KEYを設定しておく必要があります。ホストは初期設定のローカルのままにしてください。アプリにはログインがなく、アクセスできる人なら誰でもあなたのクレジットを使えてしまいます。

  4. 文字を追いながら聞く

    プロジェクトのreadalong.htmlをブラウザーで開きます。章のMP3を選び、次にその隣にある.timings.jsonファイルを選びます。再生に合わせて今の単語が光ります。

コーディングエージェントで作る

どこから始めて、最初に何を読むべきかをコーディングエージェントに伝えるプロンプトです。

プロンプト

Claude CodeCursorCodex

Convert an EPUB into an audiobook with Cartesia. Start from https://github.com/cartesia-ai/cookbook/tree/main/examples/audiobook and follow its AGENTS.md for the commands, files and rules. It uses the cartesia Python SDK to stream sonic-3.6 from /tts/sse with add_timestamps and use_normalized_timestamps=False, joins the raw PCM with ffmpeg into one MP3 per chapter, and writes .timings.json and .vtt files for read-along. Run a --preview first, which needs no key, to check the character count and out/cast.json. If I don't have a Cartesia API key yet, follow https://www.cartesia.ai/agent-quickstart.md to get one.

仕組み

EPUB章と段落に分ける
キャスト各引用の話し手を見つけ、音声を割り当てる
Sonic 3.6単語タイムスタンプ付きで/tts/sseをストリーミング。1リクエスト最大1,500文字
ffmpegPCMをつなぎ、ID3タグ付きのMP3にエンコードする
文字を追う章ごとに.timings.jsonと.vttファイル

この設計にした理由

単語ごとのタイミングはストリーミングで得る

Cartesiaの通常の音声合成エンドポイントは、音声しか返しません。文字を追うためのファイルには各単語の時刻が必要で、それを返すのはストリーミングのエンドポイントだけです。アプリはuse_normalized_timestamps=Falseも設定し、$5のような単語を書かれたとおりに残すので、強調表示が本の文と一致します。

音声はどの章よりも先に決まる

配役は変換を始める前に一度だけ決めるので、並列の処理や再実行でも、どの登場人物をどの声が読むかが変わりません。「とアリスは言った」のような話し手の表示がないせりふは、直前の話し手に割り当てます。ただし、2人が続けて段落ごとにせりふを交わしている場合は、もう一方の人物に割り当てます。

会話の手がかりで感情を決める

英語の会話では、せりふの隣にwhispered、shouted、sobbedのような言葉があると、Sonicはそのせりふを穏やかに、怒って、悲しげに読みます。laughedがあると、せりふの前に笑い声が入ります。

カスタマイズする

音声を選ぶ

out/cast.jsonを編集して、もう一度実行します。配役を使い回すには、--cast_fileで自分のファイルを渡します。値には、Archieのような組み込みの声の名前を使えます。play.cartesia.ai/voicesにある任意の音声IDも使えます。

音声を1つにする

--cast_mode narratorで実行すると、会話も含めて本全体を1つの声で読みます。その声は--voice_nameで選びます。

別の言語の本を変換する

--language frなど、Sonicの言語コードを渡します。登場人物ごとの声はそのまま使えます。感情や笑いの指定は英語でしか働きません。

よくある質問

本1冊を変換する料金はいくらですか?

Sonicの料金は1文字あたり約1クレジットで、段落の間の無音はローカルで無料で追加します。まず--previewで実行して文字数を確認してください。1クレジットの値段はプランによって違うので、ツールは金額を表示しません。

登場人物ごとに正しい声が付きますか?

「とアリスは言った」のように話し手を示す本なら、たいていは付きます。暗に示されているだけの話し手は見落とし、表示のない2人のやり取りは入れ替わることがあります。プレビューの後で配役ファイルを確認して直すか、本全体を1つの声で読んでください。

Audiobookshelfのようなオーディオブックアプリで聞けますか?

はい。どのMP3にもタイトル、著者、アルバム、トラックのタグが付いているので、Audiobookshelfなどのサーバーが章を1冊の本にまとめます。

どんな本でも変換できますか?

変換するのは、自分が所有する本か、権利を持つ本だけにしてください。公開する出力にはAI生成の音声であることを明記します。テスト用に、パブリックドメインの『不思議の国のアリス』から2章を同梱しています。

このテンプレートの詳しい手順ガイドはありますか?

はい。レシピでコードを順に解説しています。セットアップ、環境変数、デプロイはREADMEに、Cartesia側の仕様はTTS over server-sent eventsリファレンスにまとめています。

今すぐ始める

専門家に相談する。

音声体験の開発にCartesiaをどう活用できるか、私たちのチームにご相談ください。

営業に問い合わせる

開発を始める。

APIでモデルにアクセスし、数分で音声エージェントを本番環境に導入できます。

Cartesiaを試す