基于来自 porndb 的元数据的视频文件命名器。
项目描述
Namer 是一个强大的命令行工具和网络应用程序,用于重命名和标记 mp4 视频文件,以帮助 plex/jellyfin/emby 和相关插件提取数据或使用PornDB的 plex 或 jellyfin/emby 插件查找数据。Namer 很容易作为 python pip 安装,并且可以:
可用于在单个文件中命名和嵌入标签,其中包含来自 porndb 的元数据:
python -m namer rename -f /path/to/file/Site.[YY]YY.MM.DD.MessOfText.XXX.2160.mp4 [-v]
可用于使用 jellyfin/emby/kodi .nfo 文件中的元数据命名和标记文件(应与文件命名相同,但扩展名除外)。
python -m namer rename -f /path/to/file/Site.[YY]YY.MM.DD.MessOfText.XXX.2160.mp4 -i [-v]
可用于根据目录名称重命名文件,因此如果您有像/Site.[YY]YY.MM.DD.MessOfText.XXX.2160/abc.mp4这样的文件
python -m namer rename -d /path/to/dir/Site.[YY]YY.MM.DD.MessOfText.XXX.2160/
可用于重命名目录中的一大堆目录和文件的标签(使用 -m,意思是“许多”)。
python -m namer 重命名-m -d /path/to/dir/
可以用来建议一个可能的名字。该文件不需要存在,但应该具有扩展名。
python -m namerSuggest -f Site.[YY]YY.MM.DD.MessOfText.XXX.2160.mp4
可以运行监视新文件的目录以命名、标记和移动到输出位置,可能设置文件权限,使用下载的图像写入 .nfo 文件,尝试抓取预告片,以及每晚重试失败的文件。
python -m namer 看门狗
在运行看门狗时,还会有一个 webui,可用于手动匹配和重命名任何失败的文件。您可以在 namer.cfg 文件中设置 webroot、端口、绑定 ip、启用/禁用。
http:\\<ip>:6980\
对于以上所有内容,建议在您的主目录中有一个配置文件(从这个 git repo 中的 namer.cfg.sample 复制)
如果您愿意,还提供了一个 docker 文件。
可以忽略并且不需要解析添加到配置文件列表中的工作室的日期。这主要用于没有在视频上列出日期的工作室。
我为什么要使用这个?
这个工具在匹配视频方面有多成功?
对于使用 rss 提要(通常采用下面列出的文件格式)从互联网上提取的数据……。完美的。作者和其他人只经历过一次不匹配,这种失败再也不会发生。
如果在后台看门狗模式下运行,匹配失败的文件会每 24 小时重试一次,让PornDB 抓取工具赶上它们可能丢失的任何元数据。
或者,可以启用日志文件以显示原始文件名部分、评估的选项以及用于命名文件的匹配项,它将被写入与文件同名的视频文件旁边(带有_namer.log) 后缀而不是 mp4/mkv/avi/mov/flv 扩展名。这对于完整性检查匹配非常有用,如果确实发生不匹配,原始文件名会在日志中可用。
对于好奇的人,如何进行匹配?
它假定文件名以类似`sitename-[YY]YY-MM-DD-Scene.and.or.performer.name.mp4.`的格式存在。强大的正则表达式会尝试确定文件名的各个部分。请注意,上面的分隔破折号和点是可以互换的,并且空格也可以用作分隔符(或三者的任意数量的任意组合)。这个正则表达式是可以覆盖的,但你真的需要知道你在做什么,如果你如果没有正则表达式的所有匹配组,那么来自PornDB的匹配可能不会像站点、日期和场景/表演名称部分那样强大。您必须阅读代码才能弄清楚如何设置它。你真的不应该这样做。
从PornDB确定可能的查询匹配时:
站点名称不需要是站点的全名,只要查找的站点名称以文件的站点名称开头,它就可以是有效的匹配项。
日期可能有四位数或两位数的年份。如果两位数,“20”被假定为默认世纪,而不是“19”。潜在匹配必须是一天加上/减去文件的日期才能被视为匹配。
最后,查找的场景名称和所有表演者的名字和姓氏被组合到所谓的 powerset 中(包括或不包括每个艺术家和/或场景名称的每个组合),并将其与文件的“Scene.and”进行比较.or.performer.name' 部分带有一个名为 rapidfuzz 的工具。名称必须与 powerset 的成员 90% 相似才能被视为匹配,但在选择最佳匹配之前对所有潜在匹配进行评估和排序。如果启用,有关所有潜在匹配的信息将存储在本地日志文件中。
卖了怎么安装!
你有两个选择。你用码头工人吗?拉取 docker 镜像,这里是 docker-compose 片段来帮助你。
version: <s>"3"</s>
services:
namer:
container_name: namer
image: ghcr.io/theporndatabase/namer:latest
environment:
- PUID=1001
- PGID=1000
- TZ=America/Los_Angeles
- NAMER_CONFIG=/config/namer.cfg
volumes:
- /apps/namer/:/config <- this will store the namer.cfg file.
- /media:/data <- this will have the four folders namer needs to work, referenced in the config file.
restart: always
将 namer.cfg 复制到您的配置位置(上面映射到 /config/namer.cfg 的路径),并为您的设置设置值。该配置已得到很好的注释,您只需要为 porndb 添加一个令牌并更改文件位置。
调用docker-compose up 后会自动运行服务。现在查看下面的配置部分。
Pip/Python 使用
如果您不想使用 docker 和/或容器怎么办?您是否在本地安装了 python 3 和 pip(有时是 pip3)和命令行工具ffmpeg?如果是这样, pip install namer可以完成工作。如果你没有python(3),安装pip和ffmpeg Homebrew可以在Mac上帮你,Chocolatey可以在windows上帮你
# install namer
pip3 install namer
#optionallly, set your configuration location, the below is the default:
export NAMER_CONFIG=${HOME}/.namer.cfg
# Run the watchdog service:
python3 -m namer watchdog
# Or manually rename a file, dir, or all sub-dirs/sub-files of a dir:
# This calls the help method so that you can see the options.
python3 -m namer rename -h
配置:
在这个 git repo 中有一个有据可查的 namer.cfg 模板,它分为三个部分。一节与命令行重命名有关,namer节,一节与标记 mp4s元数据节有关,最后一节与看门狗进程watchdog 节有关。请注意,namer 部分和watchdog 部分 都有一个字段来描述基于从PornDB中查找的元数据的文件的新名称. 它们不同,因为当从命令行运行时,命名器将保持文件“就位”。如果 namer 在命令行上传递一个 dir 作为输入,它可以在两种模式之一下运行,默认模式是查找最大的 mp4 文件,或者如果不存在 mp4,则查找其他配置的电影文件扩展名,然后重命名和移动该文件到文件夹的根目录(如果它在子文件夹中)。在这种情况下,默认情况下,假设应该解析文件夹的名称以查找信息以搜索PornDB以进行匹配,而不是文件名。这意味着,如果您在命令行上将文件传递给命名器,它将被重命名但保留在同一目录中。
典型的看门狗行为:
看门狗进程将监视单个文件夹,在namer.cfg文件中配置了watch_dir。 一旦将 mp4/mkv/avi/mov/flv 文件完全复制到其中,将处理watch_dir中出现的任何新文件和目录。
处理的第一步是将新出现的目录或文件添加到work_dir中。
一旦移动,处理高度依赖于 namer.cfg 文件,但一般来说,视频文件或目录文件的名称(配置有prefer_dir_name_if_available标志)被解析并与来自PornDB的场景匹配。请参阅对于好奇的人,如何进行匹配?. 如果无法进行匹配,一般假设是PornDB还没有该文件的元数据。该文件将移动到失败的目录fail_dir以每天在retry_time配置的时间重试一次,默认情况下,该时间将是您时区凌晨 3 点中随机选择的分钟。如果enabled_tagging标志设置为 true 则元数据(包括封面艺术,如果enable_poster已设置)将嵌入到 mp4 文件中。请阅读 namer.cfg 中的评论以了解流派、标签、表演者等。
最后,文件被移动到由dest_dir和new_relative_path_name定义的位置。
发展
# Building:
# install yarn deps
yarn intall
# build css/js/copy templates
yarn run build
# install poetry dependencies
poetry install
# build python package in dist dir
poetry build
# Linting:
poetry run flakeheaven lint
# Testing:
poetry run pytest
# Formatting, maybe....:
poetry run autopep8 --in-place namer/*.py test/*.py
# Code Coverage:
poetry run pytest --cov
# Html Coverage report:
poetry run coverage html
# Local python install
pip install ./dist/namer-<version>.tar.gz
# Publishing:
# First make sure you have set gotten a token from pypi and set it on your machine.
poetry config pypi-token.pypi <token>
# Perhaps update the version number?
# Publishing a release to pypi.org:
poetry publish
# build docker file with:
./docker_build.sh
欢迎请求请求!
请务必注意测试和任何失败的 pylint 结果。如果您想在构建代码之前审核 pr 将被接受,请提交新的功能请求问题,4c0d3r 将对其进行评论并为您成功做好准备。测试是必须的。