single.php

PythonでJellyfinで使えるepubファイルを作成する

Ubuntuで利用できる[Jellyfin]のライブラリに追加可能な[EPUB]形式のファイルをVSCodeで作成する手順を備忘録的に投稿します。

内容はXHTML形式と同じファイル

ローカルに保存された動画や画像などのメディアを、ネトフリなどの配信サービスのような形で様々なデバイスに表示してくれる[Jellyfin]。

ライブラリを追加すると、指定したフォルダー内のメディアファイルを閲覧しやすい表示方法で配信してくれます。

ライブラリの種類に[ブック(book)]を選択すると、画像ファイルの他に電子書籍に対応したファイル形式も読み込んでくれます。

代表的な電子書籍のファイル形式でEPUB形式(拡張子.epub)も利用可能です。

[ブック(book)]ライブラリの詳細については公式ページのドキュメントをご覧ください。

EPUB形式は、Pythonの[epub]ライブラリで自作が可能です。

今回はVSCodeで、画像ファイルを保存したフォルダーから作成してみます。

[EPUB]ライブラリで作成可能

画像ファイルを保存したフォルダーを指定して[EPUB]形式(拡張子.epub)を作成していきます。

from PIL import Image
import os
import locale
from pathlib import Path
from ebooklib import epub

def createEpub(image_dir, output_epub):

    title = "book_title"
    author = "author_name"

    book = epub.EpubBook()
    book.set_identifier("id001")
    book.set_title(title)
    book.set_language("ja")
    book.add_author(author)

    chapters = []

    locale.setlocale(locale.LC_COLLATE, '')
    files = sorted(os.listdir(image_dir), key=locale.strxfrm)

    for i, img_name in enumerate(files):
        img_path = os.path.join(image_dir, img_name)

        with open(img_path, "rb") as f:
            img_data = f.read()

        img_item = epub.EpubItem(
            uid=f"img_{i}",
            file_name=f"images/{img_name}",
            media_type=f"image/{os.path.splitext(img_name)[1][1:]}",
            content=img_data
        )
        book.add_item(img_item)

        c = epub.EpubHtml(
            title=f"Page {i+1}",
            file_name=f"page_{i+1}.xhtml",
            lang="ja"
        )
        c.content = f"""
        <html>
        <body style="margin:0; padding:0;">
            <div style="
            width:100vw;
            height:100vh;
            display:flex;
            justify-content:center;
            align-items:center;
            ">
            <img src="images/{img_name}"
                style="
                    max-width:100%;
                    max-height:100%;
                    object-fit:contain;
                " />
            </div>
        </body>
        </html>
        """
        book.add_item(c)
        chapters.append(c)

    book.toc = chapters
    book.spine = ["nav"] + chapters

    book.add_item(epub.EpubNcx())
    book.add_item(epub.EpubNav())

    epub.write_epub(output_epub, book)


image_root = r"C:\image_root"
epub_root = r"C:\epub_root"

src_dir =  Path(image_root)
dst_dir = Path(epub_root)

for path in src_dir.rglob("*"):
    if path.is_dir():
        target = dst_dir / path.relative_to(src_dir)
        target.mkdir(parents=True, exist_ok=True)

        image_dir = path
        output_epub = str(target) + "\\output.epub"
        createEpub(image_dir, output_epub)

作成したファイルを[Jellyfin]のライブラリに追加すると、表示した画面でページ送りなど、電子書籍やマンガを閲覧するように操作が可能になります。

また、画像ファイルが表示されるスタイルは、HTMLタグ(コード内の太字部分)で編集が可能です。

まとめ

Ubuntuで利用できる[Jellyfin]のライブラリに追加可能な[EPUB]形式のファイルをVSCodeで作成する方法について紹介しました。

電子書籍の代表的なファイル形式[.epub]は、XHTML形式で保存されたファイルなのでVSCodeでPythonのライブラリを利用して自作が可能です。

[Jellyfin]でライブラリで指定した[ブック]フォルダーに追加可能な[EPUB]形式を作成したい人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です