BookTranslator
BookTranslator

ページ順を崩さずにCBZまたはCBRコミックアーカイブを翻訳する方法

CBZまたはCBRコミックを翻訳する前に、ページ順、表紙、不要なファイル、右から左への設定を修正しましょう。無料のアーカイブチェッカーとサンプルファイル付きです。

BookTranslator

BookTranslator Team

18 分で読了

CBZファイルはページ画像をまとめたZIPアーカイブで、CBRファイルは同じものをRARでパックしたものです。アーカイブの中には「これが2ページ目だ」と示す情報はありません。コミックリーダーや翻訳ツールは、ファイル名を並べ替えてページ順を判断します。つまり、翻訳されたコミックのほとんどの問題は翻訳前に始まっているのです。表紙が最後に回ったり、10ページ目が1ページ目の後に来たり、右から左に読むべき漫画が左から右に開いたりします。

アップロードする前に3つのチェックを行いましょう。ページ名が正しい順序に並ぶことを確認し、ページ以外のものを削除し、アーカイブにComicInfo.xmlファイルがあれば保持します。その後、アーカイブをCBZとしてアップロードします。3つのチェックを1秒で実行し、安全なページ名でファイルを再パックできる無料のコミックアーカイブチェッカーを用意しました。

簡単な答え: アーカイブの対処法

お持ちのファイルアップロード前に行うこと
ページ名が001.jpg、002.jpg…の.cbzそのままアップロードする
ページ名が1.jpg…10.jpg、または番号なしのcover.jpgがある.cbzゼロ埋めした名前で再パックする(ステップ2)
.cbr、.cb7、.cbtファイル展開してから、フォルダを.cbzとして再パックする(ステップ3)
ページがAVIF、JPEG XL、HEICで保存されているまずそれらのページをPNG、JPEG、WebPに変換する
右から左に読むべき漫画ComicInfo.xmlを保持し、翻訳後に言語フィールドを更新する
ストアアプリで購入したコミックDRMフリーで使用が許可されているファイルを実際に持っているか確認する

以下のセクションで各行について説明します。

ページ順が崩れる理由: リーダーはファイル名を並べ替える

ファイル名の並べ替え方には一般的な2つの方法があり、ページ番号の桁数が異なるとすぐに食い違います:

  • 単純な文字列ソートは、名前を1文字ずつ比較します。10.jpgは1で始まるため、2.jpgより前に来ます。結果は1、10、11、12、2、3…の順になります。
  • 自然順ソートは、連続する数字を数値として読み取るため、2が10より前に来ます。結果は1、2、3…10、11、12の順になります。

多くのコミックリーダーは自然な順序で並べ替えますが、それを当てにすることはできませんし、翻訳後のファイルがどのリーダーで開かれるかを制御することもできません。どこでも確実に機能する解決策は、番号をゼロ埋めすることです。001.jpg … 010.jpg はどちらの方法でも同じ順序で並びます。

見落としがちな命名の問題がもう2つあります。

  • 番号のない表紙は最後に並びます。 どちらの並べ替え方法でも、数字は文字より前に来ます。cover.jpg と 001.jpg … 024.jpg を含むアーカイブでは、表紙が最終ページになります。
  • 章フォルダは名前の一部として並べ替えられます。 Chapter 10/01.jpg と Chapter 2/01.jpg はまずフォルダ名を比較するため、フォルダの番号にもページ番号と同じ注意が必要です。

BookTranslator は .cbz のページを自然な、大文字小文字を区別しない順序で並べ、__MACOSX フォルダ、.DS_Store のようなドットファイル、Thumbs.db などの不要なエントリをスキップします。つまり、翻訳中は2ページ目が10ページ目より前に来ます。ただし、翻訳されたページは元の名前を保持します。1.jpg … 12.jpg をアップロードすると、1.png … 12.png が返ってくるため、単純な並べ替えを使うリーダーでは依然として順序が混ざります。アップロード前に名前を変更すれば、どのリーダーでも順序が正しくなります。

ステップ1: アーカイブを確認する

check_comic_archive.py をダウンロードして、あなたのコミックに対して実行してください。Python 3.8 以降が必要で、それ以外は不要です。何もアップロードしません。

python3 check_comic_archive.py "My Comic.cbz"

何が見つかるかを示すために、コミックファイルでよく見られる問題を含む小さなサンプルアーカイブを作成しました。ゼロ埋めなしの番号が付いた12ページ、番号のない cover.png、1つの見開きページ、AVIFファイル、macOSの不要なエントリ、右から左へ読むマンガとしてマークされた ComicInfo.xml が含まれています。README には、make_test_comic.py で再構築する方法が説明されています。レポートの末尾は次のとおりです。

Junk entries (skipped): .DS_Store, __MACOSX/._1.png
Other files (carried over unchanged): ComicInfo.xml
ComicInfo.xml:
  Manga (reading direction): YesAndRightToLeft
  Right-to-left is stored here, not in the images. Keep this file in the archive so readers that honor it still see it.
  LanguageISO: ja. Update it after translation; a copied ComicInfo.xml still names the source language.
  Page table: 13 entries for 13 page images.
  13 entries record ImageSize/ImageWidth. These describe the original files and no longer match once pages are replaced.

Check before uploading:
  - A plain character sort puts '10.png' at position 2, where natural sort has '2.png'. A reader without natural sorting will show pages out of order.
  - Pages without a number in the file name: 'cover.png' at 13. Digits sort before letters, so an unnumbered cover usually ends up last.
  - Page numbers use [1, 2] digits. Zero-pad them (001, 002, ... 010) so every reader agrees on the order.
  - Images in a format that is not treated as a page here: 13.avif. Convert them to PNG, JPEG or WebP, or they stay untranslated.

その上に、レポートはすべてのページを読む順序でサイズとともに一覧表示します。高さより幅が広いページは見開きページとして、幅の3倍以上の高さがあるページはウェブトゥーン章のような縦長ストリップとしてフラグを立てます。翻訳が返ってきたときに最初に確認すべきページはこれらです。

プレーンなASCIIファイル名の場合、チェッカーの自然な並べ替えは、章フォルダ、大文字小文字の混在、スペース、ハイフン、アンダースコアを含め、BookTranslator が .cbz ページに使用するのと同じ比較に従います。アクセント付き文字や日本語のかなを含む名前は、ツール間で異なる順序になることがあり、これもページ名をプレーンなゼロ埋め番号に変更する理由の1つです。

ステップ2: 安全なページ名で再パックする

レポートに順序の問題がリストされている場合は、まず表示された順序を確認してから再パックしてください。

python3 check_comic_archive.py "My Comic.cbz" --first cover.png --repack "My Comic fixed.cbz"

--repack は新しい CBZ を書き出します。ページは表示された順序で 0001、0002 … に名前が変更され、不要なエントリは削除され、ComicInfo.xml を含む他のすべてのファイルは変更されずにコピーされます。--first はページを先頭に移動します。これにより、番号のない表紙を本来の位置に戻すことができます。2ページ目(タイトルページなど)にも繰り返し指定できます。名前の変更で順序が固定されるため、再パックする前に修正してください。再パック後では遅すぎます。アーカイブに ComicInfo.xml のページテーブルがある場合、ページを移動すると位置がずれます。チェッカーは後で表紙マーカーなどのエントリを確認するよう促します。

サンプルアーカイブでは、再パックされたファイルのページは 0001.png … 0013.png で、表紙が先頭にあり、不要なエントリはありません。残っている警告は AVIF ファイルだけです。チェッカーは画像を変換できません。そのページを画像エディタで開き、PNG、JPEG、または WebP としてエクスポートしてください。AVIF、JPEG XL、HEIC などの形式はページとして扱われません。それらは翻訳されず、そのまま結果にコピーされます。

ステップ3: CBR、CB7、CBT ファイルを CBZ に変換する

.cbr ファイルは RAR アーカイブ、.cb7 は 7z、.cbt は tar です。.cbr を .cbz に名前変更しても変換されません。チェッカーはファイルの先頭バイトを読み取ります。RAR、7z、tar アーカイブの場合は停止し、どれであるかを通知します。代わりに通常のページレポートが表示される場合、そのファイルは別名の ZIP アーカイブです。.cbz に名前を変更してステップ1に戻ってください。

実際の RAR、7z、tar アーカイブを変換するには、7-Zip または The Unarchiver でフォルダに展開します。次に、チェッカーをそのフォルダに向けます。

7z x "My Comic.cbr" -o"My Comic"
python3 check_comic_archive.py "My Comic" --repack "My Comic.cbz"

再パックでは、展開されたファイルがサブフォルダにあったとしても、ページと ComicInfo.xml が新しいアーカイブの最上位に配置されます。

BookTranslator は CBR、CB7、CBT のアップロードも受け付けますが、それらは定額料金の別のパイプラインを通り、次のセクションで説明するページごとのプロセスは .cbz ファイルに適用されます。先に変換するのは数秒の作業で、ステップ2で得られるクリーンなページ名も手に入ります。

ステップ4: ComicInfo.xml を保持し、その後更新する

多くのアーカイブには、タイトル、シリーズ、言語、読む方向を含む ComicInfo.xml ファイルが含まれています。その形式は Anansi Project によって維持されています。ここで重要なフィールドは2つです。

  • Manga。 スキーマ では Unknown、No、Yes、YesAndRightToLeft が許可されています。最後のものは、アーカイブがリーダーに右から左へページをめくるよう指示する方法です。ページ画像はその設定を保持できないため、ファイルが失われると、それを使用するリーダーも読む方向を失います。
  • LanguageISO。 これはコミックの言語コードを保持します。翻訳後も、変更するまでソース言語(たとえば ja)を示したままです。

BookTranslator は ComicInfo.xml を翻訳されたアーカイブにそのままコピーするため、右から左へ読むマンガは、そのフラグをサポートするリーダーでは右から左のままです。後でテキストエディタでファイルを開き、LanguageISO をターゲット言語に変更してください。ファイルに <Pages> テーブルがある場合、そのエントリは位置でページを指すため、ページを並べ替えていなければ一致したままです。ImageSize などのサイズ値は元の画像を表し、翻訳された PNG ページとは一致しなくなります。それらに依存するライブラリツールは、ファイルを再スキャンする必要があるかもしれません。

BookTranslator が CBZ で行うこと

.cbz 形式のコミックをアップロードすると、BookTranslator は次の処理を行います:

  1. ページ画像(PNG、JPEG、WebP、GIF、BMP、TIFF)を自然な順序でリストアップし、不要なエントリをスキップします。
  2. 各ページを単一画像と同じパイプラインで処理します。テキストを検出し、元のレタリングを削除して、その場所に翻訳を描画します。処理は数ページずつ行われます。
  3. 翻訳された各ページを同じ位置に PNG として保存し、元のアーカイブの他のすべてのファイルも含めた新しい .cbz を構築します。

支払い前に知っておくべき詳細がいくつかあります:

  • 価格はページ数に依存します。 すべてのページが完全な画像翻訳の実行となるため、CBZ は単語数ではなくページ単位で価格が決まります。見積もりはアップロード後、チェックアウト前に表示されます。不要なエントリやページ以外の画像を削除しても、これらはページとしてカウントされないため価格は変わりません。
  • 失敗したページは元の画像のまま残ります。 1ページが失敗した場合、そのページは元の言語のまま正しい位置に残るため、コミックは完全な状態を保ちます。ページの30%以上が失敗した場合、タスクは失敗し、ほとんど翻訳されていない本が納品されることはありません。
  • 受け取れるのは翻訳済みコミックのみです。 コミックアーカイブにはバイリンガルの対訳版はありません。
  • ページは PNG で返されます。 翻訳されたアーカイブは、元の JPEG よりも著しく大きくなる可能性があります。

縦書きの段やふりがながあるスキャン漫画などから日本語テキスト自体も必要な場合は、日本語縦書きテキストの OCR のガイドで、テキストページの読み順の問題について説明しています。

アップロード前に:ファイルへのアクセス

このガイドは、コミックが自分が所有し自由に開けるファイルであることを前提としています。例えば、DRM フリーの購入品、自身のスキャン、自身の作品などです。ストアアプリは、専用リーダー内でしか開けない保護形式でコミックを配信することがよくあります。ファイル名を変更したり再パッケージしたりしても、この状況は変わりません。不明な場合は、まず翻訳前に電子書籍の DRM を確認する方法をお読みください。ファイルをダウンロードしても、その翻訳を共有または公開する許可が得られるわけではありません。

コミックを翻訳する

チェッカーが順序の問題を報告せず、すべてのページが PNG、JPEG、WebP であれば、CBZ を漫画翻訳ツールにアップロードし、支払い前にページ数に基づく価格を確認してください。翻訳が準備できたら、使用予定のリーダーで開きます。表紙、最初の見開き、最終ページを確認し、ComicInfo.xml の LanguageISO を修正します。出版を予定しているシリーズなど長期的なプロジェクトについては、書籍翻訳の完全ガイドで、レビュー、用語、巻間の一貫性について説明しています。

関連記事