single.php

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

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

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

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

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

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

その他に、圧縮形式の1つであるComic Book Zip形式(拡張子.cbz)も利用可能です。

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

Comic Book Zip形式は、その名前の通りZip形式を扱うライブラリで自作が可能です。

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

ZIP圧縮のライブラリで作成可能

画像ファイルを保存したフォルダーを指定して、Comic Book Zip形式(拡張子.cbz)を作成していきます。

PythonでZIP形式を扱う[zipfile]ライブラリで比較的簡単に作成ができました。


import zipfile
import shutil
from pathlib import Path
import re

SOURCE_DIR = Path(r"C:\cbz_source")
OUTPUT_DIR = Path(r"C:\cbz_output")

IMAGE_EXTS = {".jpg", ".jpeg", ".png", ".webp", ".bmp"}


def windows_sort_key(s):
    return [
        int(t) if t.isdigit() else t.lower()
        for t in re.split(r"(\d+)", s)
    ]

def process_folder(src: Path, dst: Path):
    if dst.name != "成人":

    dst.mkdir(parents=True, exist_ok=True)

    files = [f for f in src.iterdir() if f.is_file()]
    images = [f for f in files if f.suffix.lower() in IMAGE_EXTS]

    if images:
        images.sort(key=lambda x: windows_sort_key(x.name))

        cbz_path = dst / f"{src.name}.cbz"
        with zipfile.ZipFile(cbz_path, "w", zipfile.ZIP_DEFLATED) as zf:
            for img in images:
                zf.write(img, arcname=img.name)

        # 最初の画像を folder.xxx としてコピー
        first_img = images[0]
        cover_path = dst / f"folder{first_img.suffix.lower()}"
        shutil.copy2(first_img, cover_path)

        for sub in src.iterdir():
            if sub.is_dir():
                process_folder(sub, dst / sub.name)

process_folder(INPUT_DIR, OUTPUT_DIR)

ライブラリに[cbz]形式を保存した場合、サムネイルが正しく表示されないので最初に見つけた画像を[folder.jpg]などの画像形式で保存しています。

まとめ

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

ライブラリで指定したフォルダーに、[CBZ]形式で保存したファイルを追加が可能です。

この拡張子[.cbz]形式のファイルは、ZIP形式で保存されたファイルなのでVSCodeなどで自作が可能です。

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

スポンサーリンク

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

コメントを残す

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