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]形式を作成したい人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。
