收起左侧

Media Marshal测试版发布!一款自动媒体库整理工具

15
回复
956
查看
[ 复制链接 ]

0

主题

7

回帖

0

牛值

江湖小虾

2026-6-7 00:48:24 显示全部楼层 阅读模式

项目介绍

您是否在为囤积的视频资源命名乱七八糟而苦恼?您是否在为手动整理媒体库而头疼?您是否在为媒体资源重命名影响做种而焦虑?

不妨试试Media Marshal吧。

Media Marshal可以帮您:

  • 实时监测您的媒体库,自动帮您整理媒体库,从此告别手动重命名。
  • 支持自定义整理规则,简单易用,满足您的个性需求。
  • 支持移动、复制、硬链接等多种文件操作方式,更新媒体库的同时让您的做种任务不中断。
  • 支持TMDB信息查询,让您时刻获取权威信息。

功能预览

按您的要求将媒体资源分门别类,自动整理

image.png

支持人工搜索、人工确认

image.png

快速开始

准备工作

  • TMDB API Key,申请地址TMDB

开始安装

注:本教程以飞牛OS为例,路径规划可自由调整,以下规划方式仅做参考。

1. 创建路径

进入飞牛OS,在团队文件下创建 Resources作为根路径使用

在Resources下分别创建 DownloadEmbyMediaMarshal

Download作为下载根路径,保存原始视频资源;Emby作为目标根路径,接收整理后的视频资源;MediaMarshal作为项目根路径,保存运行数据。

image.png

2. 安装Media Marshal

MediaMarshal中上传docker配置文件,可以先保存在本地,通过飞牛页面上传至NAS。

.env环境配置文件,根据需要可修改MEDIA_DIRS

# Media Marshal 环境变量配置模板
# Media Marshal environment variable template

# ── 调试 / Debug ─────────────────────────────────────────────
# 开启后打印详细中间过程日志,生产环境保持 false
# Print detailed intermediate logs when enabled. Keep false in production.
MEDIA_MARSHAL_DEBUG=false

# ── 文件监控 / File watching ─────────────────────────────────
# 宿主机媒体目录。生产和 beta 挂载到容器 /media,alpha 挂载到容器 /Resources
# Host media directory. Production and beta mount it to /media; alpha mounts it to /Resources.
MEDIA_DIRS=/vol1/@team/Resources

# ── 端口与镜像标签(可选)/ Ports and image tag (optional) ─────
# Web UI host port.
MEDIA_MARSHAL_PORTAL_PORT=3000
# Backend API host port.
MEDIA_MARSHAL_HTTP_PORT=8080
# Image tag used by compose files that support tag selection.
MEDIA_MARSHAL_IMAGE_TAG=latest

# ── 匹配配置 / Matching ──────────────────────────────────────
# 匹配置信度阈值(0.0-1.0),低于此值进入待确认队列
# Match confidence threshold (0.0-1.0). Results below this value enter the review queue.
MEDIA_MARSHAL_CONFIDENCE_THRESHOLD=0.8

docker-compose.ymlDocker配置文件

services:

  # Java backend service
  media-marshal:
    image: ghcr.io/media-marshal/media-marshal:${MEDIA_MARSHAL_IMAGE_TAG:-latest}
    container_name: media-marshal
    restart: unless-stopped
    ports:
      - "${MEDIA_MARSHAL_HTTP_PORT:-8080}:8080"
    volumes:
      - mm_data:/data
      - ${MEDIA_DIRS:-/media}:/media
    environment:
      - MEDIA_MARSHAL_PARSER_URL=http://parser:8000
      - MEDIA_MARSHAL_CONFIDENCE_THRESHOLD=${MEDIA_MARSHAL_CONFIDENCE_THRESHOLD:-0.8}
      - MEDIA_MARSHAL_DEBUG=${MEDIA_MARSHAL_DEBUG:-false}
      - MEDIA_MARSHAL_EMAIL_ENABLED=${MEDIA_MARSHAL_EMAIL_ENABLED:-false}
      - MEDIA_MARSHAL_EMAIL_RECIPIENT=${MEDIA_MARSHAL_EMAIL_RECIPIENT:-}
      - MEDIA_MARSHAL_MAIL_HOST=${MEDIA_MARSHAL_MAIL_HOST:-}
      - MEDIA_MARSHAL_MAIL_PORT=${MEDIA_MARSHAL_MAIL_PORT:-587}
      - MEDIA_MARSHAL_MAIL_USERNAME=${MEDIA_MARSHAL_MAIL_USERNAME:-}
      - MEDIA_MARSHAL_MAIL_PASSWORD=${MEDIA_MARSHAL_MAIL_PASSWORD:-}
    depends_on:
      parser:
        condition: service_healthy
    networks:
      - mm_net

  # Portal frontend served by Nginx
  portal:
    image: ghcr.io/media-marshal/media-marshal-portal:${MEDIA_MARSHAL_IMAGE_TAG:-latest}
    container_name: media-marshal-portal
    restart: unless-stopped
    ports:
      - "${MEDIA_MARSHAL_PORTAL_PORT:-3000}:80"
    depends_on:
      - media-marshal
    networks:
      - mm_net

  # guessit Python sidecar, available only inside the compose network
  parser:
    image: ghcr.io/media-marshal/media-marshal-parser:${MEDIA_MARSHAL_IMAGE_TAG:-latest}
    container_name: media-marshal-parser
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health', timeout=3).read()"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 10s
    networks:
      - mm_net

volumes:
  mm_data:

networks:
  mm_net:
    driver: bridge

image.png

进入Docker应用,新建Compose,选择 MediaMarshal创建项目,创建完成后构建项目。

image.png

安装完成后,点击Portal快速访问,进入Media Marshal页面。

image.png

3. 配置Media Marshal

首次访问系统需要配置TMDB API Key,保存后进入系统

image.png

进入路径设置页面后点击新增规则,创建自动整理规则,创建后点击启动即可解放双手。

image.png

image.png

开始使用

Resources/Download中上传视频文件进行测试,可以看到Media Marshal已经对视频进行了解析。并且将置信度不足阈值的项目放进人工确认队列。

image.png

最佳实践

关于渲染规则

Media Marshal支持灵活配置解析规则,除系统自带的路径模板外可根据您的需求配置个性化路径,具体使用规则可参考项目内置说明。

image.png

作者推荐路径规则:

# 电影路径
电影/{title_initial}/{title} ({year})/{title} ({year})[[ - {resolution}]]{ext}

# 剧集路径
剧集/{title_initial}/{title} ({year})/{season:02d;prefix=S}/{title} ({year}) - {season:02d;prefix=S}{episode:02d;prefix=E}[[ - {resolution}]]{ext}

关于文件操作方式

本项目支持4中文件操作方式,推荐优先考虑硬链接:

  1. 移动:不需要保留源视频文件时使用,直接将源文件移动到目标路径下。
  2. 硬链接:需要保留源视频文件时使用,可在目标路径下创建硬链接,操作目标路径下文件不影响源文件,并且不会占用额外的存储空间,需要源路径和目标路径在同一个存储器上。
  3. 复制:需要保留源视频文件且无法使用硬链接时选择,效率低下,并且占用双倍存储。
  4. 软链接:特殊情况使用。

关于项目

GitHub地址:https://github.com/media-marshal/media-marshal

访问GitHub主页获取更多信息。

后记

在使用Media Marshal时,建议先创建空白媒体库,功能验证通过后再用于正式媒体库,以防发生意料之外的效果。

Media Marshal仍处于测试版本,感谢您的使用,欢迎留下您的意见和建议。

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

1

主题

96

回帖

0

牛值

fnOS系统内测组

飞牛百度网盘玩家fnOS1.0上线纪念勋章

2026-6-7 09:00:33 显示全部楼层

需要科学不,

不需要科学也可以用  详情 回复
2026-6-7 12:24

0

主题

7

回帖

0

牛值

江湖小虾

2026-6-7 12:24:12 楼主 显示全部楼层

不需要科学也可以用

2

主题

23

回帖

0

牛值

系统先锋体验团🛩️

2026-6-8 10:08:12 显示全部楼层

很有用的项目,蹲一个,希望能够在Docker中直接定义源目录、工作目录、媒体目录,现在的看起来有点麻烦了。

工作目录需要保存运行数据, 源目录和目标目录可以在同一个根文件夹下, 把这个文件夹挂载进容器就可以  详情 回复
2026-6-10 14:31

3

主题

14

回帖

0

牛值

江湖小虾

2026-6-8 11:15:05 显示全部楼层
能像moviepilot支持二级分类吗
支持的, 但是v0.2.8版本没有开放, 下个版本可以开放  详情 回复
2026-6-8 15:17

0

主题

7

回帖

0

牛值

江湖小虾

2026-6-8 15:17:10 楼主 显示全部楼层
sleikang 发表于 2026-6-8 11:15
能像moviepilot支持二级分类吗

支持的, 但是v0.2.8版本没有开放, 下个版本可以开放

3

主题

4

回帖

0

牛值

江湖小虾

2026-6-10 13:37:02 显示全部楼层
不能自己自定义目录吗?
可以自定义目录的, 只要目录挂载到容器里可以正常访问就行  详情 回复
2026-6-10 14:27

0

主题

7

回帖

0

牛值

江湖小虾

2026-6-10 14:27:49 楼主 显示全部楼层
余生是我啊 发表于 2026-6-10 13:37
不能自己自定义目录吗?

可以自定义目录的, 只要目录挂载到容器里可以正常访问就行

0

主题

7

回帖

0

牛值

江湖小虾

2026-6-10 14:31:53 楼主 显示全部楼层
玉树x 发表于 2026-6-8 10:08
很有用的项目,蹲一个,希望能够在Docker中直接定义源目录、工作目录、媒体目录,现在的看起来有点麻烦了。 ...

工作目录需要保存运行数据, 源目录和目标目录可以在同一个根文件夹下, 把这个文件夹挂载进容器就可以

3

主题

4

回帖

0

牛值

江湖小虾

2026-6-10 22:03:57 显示全部楼层

小白看不懂怎么自定义目录希望能够给个注释

需要分别创建3个路径: 1. 项目的运行目录, 用来放配置文件; 2. 媒体文件源路径, 作为下载目录, 保存原始视频文件; 3. 媒体文件目标路径, 视频自动整理后的归档路径, 可以把这个路径作为媒体根路径挂载媒体服务器中(E  详情 回复
2026-6-11 09:48

0

主题

7

回帖

0

牛值

江湖小虾

2026-6-11 09:48:41 楼主 显示全部楼层
余生是我啊 发表于 2026-6-10 22:03
小白看不懂怎么自定义目录希望能够给个注释

需要分别创建3个路径: 1. 项目的运行目录, 用来放配置文件; 2. 媒体文件源路径, 作为下载目录, 保存原始视频文件; 3. 媒体文件目标路径, 视频自动整理后的归档路径, 可以把这个路径作为媒体根路径挂载媒体服务器中(Emby/Jellyfin/Plex 等), 如果搞不清可以按教程的例子在同一个文件夹下创建3个文件夹

3

主题

4

回帖

0

牛值

江湖小虾

2026-6-13 11:49:12 显示全部楼层
处理失败了什么情况导致的
失败 1 次 Timeout on blocking read for 30000000000 NANOSECONDS 详情出现的这个  详情 回复
2026-6-13 11:52

3

主题

4

回帖

0

牛值

江湖小虾

2026-6-13 11:52:14 显示全部楼层
余生是我啊 发表于 2026-6-13 11:49
处理失败了什么情况导致的

失败 1 次 Timeout on blocking read for 30000000000 NANOSECONDS
详情出现的这个
这个应该是你的网访问不了TMDB, ping一下域名api.themoviedb.org看通不通, 不通的话需要改一下api.themoviedb.org的host配置  详情 回复
2026-6-13 12:14

0

主题

7

回帖

0

牛值

江湖小虾

2026-6-13 12:14:05 楼主 显示全部楼层
余生是我啊 发表于 2026-6-13 11:52
失败 1 次 Timeout on blocking read for 30000000000 NANOSECONDS
详情出现的这个

这个应该是你的网访问不了TMDB, ping一下域名api.themoviedb.org看通不通, 不通的话需要改一下api.themoviedb.org的DNS配置

0

主题

1

回帖

0

牛值

江湖小虾

2026-6-14 21:22:15 显示全部楼层

感觉类似tinymediamanager这种,试试功能如何

感谢试用, 现在是早期开发版本, 使用过程有问题可以告诉我  详情 回复
2026-6-15 09:50

0

主题

7

回帖

0

牛值

江湖小虾

2026-6-15 09:50:52 楼主 显示全部楼层
buth854 发表于 2026-6-14 21:22
感觉类似tinymediamanager这种,试试功能如何

感谢试用, 现在是早期开发版本, 使用过程有问题可以告诉我
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则