До змісту документації

Кореневим каталогом є вихідний каталог пакета. Кожен визначений фільм отримує папку Title (Year) відповідно до правил нормалізації нижче. Відеофайл має таке саме ім’я та початкове розширення. Наприклад, для вихідного каталогу /exports/disk1/archive/media/movies:

/exports/disk1/archive/media/movies/Title (2020)/Title (2020).mkv

Постери й фонові зображення завантажуються в цю папку та згадуються в каталозі. Назву й рік фільму беруть із прийнятого запису TMDB.

Стандартний вихідний каталог — /exports/disk1/archive/media/movies. Для фільму з двох частин використовуються імена Title (Year) Part 1.ext та Title (Year) Part 2.ext. Відповідні субтитри SRT мають основу назви відео, наприклад Title (Year) Part 1.srt. Файли переміщуються в межах однієї файлової системи без копіювання вмісту. Дивіться імпорт і очищення.

Якщо одному фільму TMDB відповідають декілька форматів, залишається перший доступний у такому порядку пріоритетності: mkv, mp4, m4v, avi, mov, wmv, flv, mpg/mpeg. Регістр розширення не враховується; mpg і mpeg мають однаковий пріоритет, і при рівності перемагає вже зареєстрована копія. Це перевага контейнера, а не оцінка роздільної здатності чи якості кодування.

Після збереження кращого відео версії з нижчим пріоритетом видаляються, а їхні зв’язки з каталогом прибираються. Це стосується і кращого формату, що надійшов у пізнішому пакеті. Очищення має контрольні точки для повторних спроб і реєструється як File / Delete. Для файлів з однаковим розширенням діє звичайний захист від колізій; політика форматів не видаляє їх автоматично.

Наведена нижче функція Python нормалізує назву файлу. Коментарі залишено в оригіналі, щоб приклад можна було скопіювати без змін.

import re
import unicodedata


def movie_filename(title: str, year: int, extension: str) -> str:
    title = unicodedata.normalize("NFKC", title)

    replacements = {
        ":": " - ",
        "/": " - ",
        "\\": " - ",
        "#": "",
        "%": " percent ",
        '"': "",
        "*": "",
        "?": "",
        "<": "",
        ">": "",
        "|": "",
    }

    for old, new in replacements.items():
        title = title.replace(old, new)

    # Normalize curly apostrophes/quotes.
    title = title.replace("’", "'")
    title = title.replace("‘", "'")
    title = title.replace("“", "")
    title = title.replace("”", "")

    # Collapse whitespace and tidy separators.
    title = re.sub(r"\s+", " ", title)
    title = re.sub(r"\s*-\s*", " - ", title)
    title = title.strip(" .-")

    extension = extension.lstrip(".")

    return f"{title} ({year}).{extension}"