SkillAgentSearch skills...

Torcp

A script to rename and copy downloaded files to a target in Emby-happy way:

Install / Use

/learn @ccf-2012/Torcp
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

torcp

English version

对下载的影视文件,通过 硬链软链 在另一个文件夹中改名和重组目录、以便 Emby/Plex 这样的应用程序便于刮削识别。本脚本:

  1. 对你的影视文件夹中的文件进行分类,主要处理 TV/Movie, 解析影视文件夹中的 影视名称年份,以及 制作组
  2. 依照 Emby-happy 的风格进行重组目录与改名,在目标目录中生成硬链或软链.
  3. 支持搜索TMDb,以获得准确的、选定语言的影视名字,然后以此名字进行更名和组织目录,对于查出了TMDb的媒体,支持按语言分类

1 应用说明

2 Last Update

  • 2025.12.24 处理报告:运行结束后显示处理统计,包括跳过和失败的项目。使用 --save-skipped--save-failed 保存到文件
  • 2025.12.24 TMDB查询缓存:自动缓存TMDB查询结果到 ~/.torcp/tmdb_cache.json,30天过期。使用 --no-tmdb-cache 禁用,--clear-tmdb-cache 清除缓存
  • 2025.12.24 --progress 显示进度条,处理大量文件时可显示处理进度
  • 2025.7.27 支持strm;更新 tmdbv3api
  • 2024.11.21 查 IMDb 由 episode 获取 series 的 IMDb,再查 TMDb
  • 2024.10.23 --add-year-dir 在媒体名称目录之上,加一层年份目录
  • 2023.5.24 对于包括 tmdbid=12345/tmdb-12345 的文件夹,都以目录中所包含的标识,对目录下的各文件/目录进行刮削

即对于 siteid 和刮削完成后的包含Emby/Plex括号的文件夹,都会进入对所有文件进行处理

  • 2023.4.9 --make-nfo 在媒体目录内生成 .nfo 文件
  • 2023.3.22 在资源目录之上,如果有一个目录名中带有 tmdb=tv-123456tmdb=m-123456 信息,则会进入目录以此信息对文件进行刮削
  • 2023.3.20 改为 logger 输出;参考 tp.py 设置输出目标和格式
  • 2023.2.7 --sep-area 所有地区分目录,不可与语言 --lang 同时使用
  • 2023.2.3 --genre 支持按类型分目录,以逗号分隔,使用--tmdb-lang所设的语言相关的类型词汇;如果媒体包含列出的类型,则在Movie/TV目录下单独成分目录,未在列的在 other 目录;如果同时进行了语言或地区分目录,类型目录与语言和地区同级目录,即类型中未在列的才分语言和地区;
  • 2023.1.27 torcp代码组织为类(class)形式,以便通过代码形式进行调用,调用入口为 main(argv, exportObject),参见11节说明
  • 2022.12.23 --tmdbid,用m-12345movie-12345t-54321tv-54321这样的形式,指定资源的TMDb信息
  • 2022.11.30 --tmdb-origin-name, 对于电影,生成 刮削名 (年份) - 原文件名 这样的文件名,对于Emby可以实现以原文件名作为版本名。
  • 2022.11.11 支持Site-Id-IMDb文件夹,即在资源目录之上,有一个目录名中带有 [imdb=tt123456] 或以 tt123456 结尾的目录
  • 2022.10.26 --make-plex-match Create a .plexmatch file at the top level of a series
  • 2022.9.5 --imdbid-s 模式下指定媒体的 IMDb id
  • 2022.9.4 --after-copy-script 执行外部脚本时,会传入3个参数:生成的媒体路径,原媒体文件(夹)名,tmdbid
  • 2022.8.18 如果资源文件夹命名里面带[imdbid=xxx][tmdbid=xxx],则直接使用这样的id去TMDb中搜索资源信息
  • 2022.7.21 --after-copy-script 在完成硬链后,执行一外部脚本,以便实现Plex刮削
  • 2022.6.20 -e, --keep-ext, 可使用参数 all
  • 2022.4.3: --make-log 在目标目录中建立一个log文件,以便追溯原文件名
  • 2022.3.23: --symbolink support symbol link
  • 2022.3.13: --lang dispatch to different folders base on TMDb language
  • 2022.2.26: --tmdb-api-key Support TMDb search

3 准备

本程序需要在 python3 运行环境,以命令行方式运行

3.1 pip 安装

  • 安装torcp
pip3 install torcp

3.1.1 群晖中使用python3 和 pip3

  • DSM 6.x 默认没有安装Python 3,需要要在套件中心中搜索安装 Python 3
  • 群晖安装pip
python3 -m ensurepip

3.2 使用源码调用的方式

  • 如果你仍然习惯源码调用的方式,安装代码,仍然使用:
git clone https://github.com/ccf-2012/torcp.git
  • 这里添加了一个小的入口程序tp.py,你可以这样调用:
python tp.py -h 
  • 后面例子中的torcp 都可以替换成 python tp.py 这样的调用方式。
  • 这样的方式,全程操作是以同一用户同一env,可能会减少出错机会。

4 使用方法:

  • 完整的命令参数,可以通过这样查看:
torcp -h
  • 或使用源码安装的话,打 python tp.py -h
python3 tp.py -h

usage: tp.py [-h] -d HD_PATH [-e KEEP_EXT] [-l LANG] [--genre GENRE] [--other-dir OTHER_DIR] [--sep-area] [--sep-area5] [--sep-area7] [--tmdb-api-key TMDB_API_KEY] [--tmdb-lang TMDB_LANG]
             [--tv-folder-name TV_FOLDER_NAME] [--movie-folder-name MOVIE_FOLDER_NAME] [--tv] [--movie] [--dryrun] [--single] [--extract-bdmv] [--full-bdmv] [--origin-name] [--tmdb-origin-name]
             [--sleep SLEEP] [--move-run] [--make-log] [--symbolink] [--cache] [--emby-bracket] [--plex-bracket] [--make-plex-match] [--make-nfo] [--after-copy-script AFTER_COPY_SCRIPT]
             [--imdbid IMDBID] [--tmdbid TMDBID] [--extitle EXTITLE] [--site-str SITE_STR] [--add-year-dir] [--genre-with-area GENRE_WITH_AREA]
             [--progress] [--no-tmdb-cache] [--clear-tmdb-cache]
             MEDIA_DIR

torcp: a script hardlink media files and directories in Emby-happy naming and structs.

positional arguments:
  MEDIA_DIR             The directory contains TVs and Movies to be copied.

options:
  -h, --help            show this help message and exit
  -d HD_PATH, --hd_path HD_PATH
                        the dest path to create Hard Link.
  -e KEEP_EXT, --keep-ext KEEP_EXT
                        keep files with these extention('srt,ass').
  -l LANG, --lang LANG  seperate dir by language('cn,en').
  --genre GENRE         seperate dir by genre('anime,document').
  --other-dir OTHER_DIR
                        for any dir Other than Movie/TV.
  --sep-area            seperate dir by all production area.
  --sep-area5           seperate 5 dirs(cn,hktw,jp,kr,useu,other) by production area.
  --sep-area7           seperate 7 dirs(us,cn,hk,tw,jp,kr,occident,other) by production area.
  --tmdb-api-key TMDB_API_KEY
                        Search API for the tmdb id, and gen dirname as Name (year)\{tmdbid=xxx\}
  --tmdb-lang TMDB_LANG
                        specify the TMDb language
  --tv-folder-name TV_FOLDER_NAME
                        specify the name of TV directory, default TV.
  --movie-folder-name MOVIE_FOLDER_NAME
                        specify the name of Movie directory, default Movie.
  --tv                  specify the src directory is TV.
  --movie               specify the src directory is Movie.
  --dryrun              print message instead of real copy.
  --single, -s          parse and copy one single folder.
  --extract-bdmv        extract largest file in BDMV dir.
  --full-bdmv           copy full BDMV dir and iso files.
  --origin-name         keep origin file name.
  --tmdb-origin-name    filename emby bracket - origin file name.
  --sleep SLEEP         sleep x seconds after operation.
  --move-run            WARN: REAL MOVE...with NO REGRET.
  --make-log            Make a log file.
  --symbolink           symbolink instead of hard link
  --cache               cache searched dir entries
  --emby-bracket        ex: Alone (2020) [tmdbid=509635]
  --plex-bracket        ex: Alone (2020) {tmdb-509635}
  --make-plex-match     Create a .plexmatch file at the top level of a series
  --make-nfo            Create a .nfo file in the media dir
  --after-copy-script AFTER_COPY_SCRIPT
                        call this script with destination folder path after link/move
  --imdbid IMDBID       specify the IMDb id, -s single mode only
  --tmdbid TMDBID       specify the TMDb id, -s single mode only
  --extitle EXTITLE     specify the extra title to search
  --site-str SITE_STR   site-id(ex. hds-12345) folder name, set site strs like ('chd,hds,ade,ttg').
  --add-year-dir        Add a year dir above the media folder
  --genre-with-area GENRE_WITH_AREA
                        specify genres with area subdir, seperated with comma
  --progress            enable progress bar display
  --no-tmdb-cache       disable TMDB query cache
  --clear-tmdb-cache    clear TMDB cache before running
  --save-skipped FILE   save skipped items list to specified file
  --save-failed FILE    save failed items list to specified file

5 基本使用

  • 将一个目录中所有影视文件和目录,硬链到另一个目录,其间会按目录名/文件名猜测分类,并挑出 .mkv.mp4:
torcp /home/ccf2012/Downloads/  -d /home/ccf2012/emby/ 
  • 电影和剧集的处理,是不一样的,如果你确认一个目录是电影或剧集,可以使用--movie--tv 指定:
torcp /home/ccf2012/Downloads/RSSMovie/ -d /home/ccf2012/emby/ --movie
  • 如果想单独处理单个目录,可使用 -s 指定,例如:
torcp /home/ccf2012/Downloads/权力的游戏.第1-8季.Game.Of.Thrones.S01-S08.1080p.Blu-Ray.AC3.x265.10bit-Yumi -d /home/ccf2012/emby/ -s --tv

6 --tmdb-api-key TMDb 查询

  • 通过The Movie Database (TMDb) API 查询,得到确切的tmdbid, 确保生成的文件夹可被刮削
  • 可选 --tmdb-lang 参数,默认是 zh-CN
  • 查询不到的文件,将会被 到目标目录下 TMDbNotFound 目录中
torcp /home/test/ -d /home/test/result3/ --tmdb-api-key='your TMDb api key'
  • 组合 --move-run 的例子
torcp /home/test/ -d /home/test/result2/ --tmdb-api-key='your TMDb api key' --plex-bracket --move-run  --dryrun

6.1 --tmdb-lang 设置TMDb刮削的语言

  • 设定使用TMDb进行刮削搜索时所获取媒体信息的语言,比如:
    • --tmdb-lang en-US 搜索 「The.Dripping.Sauce.S01.2020.1080p.KKTV.WEB-DL.x264.AAC-ADWeb」会生成目录为 「The Dripping Sauce (2020)」
    • --tmdb-lang zh-CN 搜索则生成目录为 「大酱园 (2022)」

6.2 --lang 按语言分类

  • 如果查出了TMDb id,那么可以将媒体按语言分到不同目录存储
  • --lang 后面以逗号分隔写所需要分出来的语言,其它的归到 others
  • 中文语言为 cn,日语为 ja,韩语为 ko
  • 如果写 --lang all 则所有语言都被分类
torcp /home/test/ -d /home/test/result3/ --tmdb-api-key='your TMDb api key' --lang cn,ja,ko

7 --move-run 直接改名和移动

  • 不作硬链,直接进行move和改名操作,用于对已经放在gd中的文件进行整理
  • -d 指定要搬移的目标位置,请自己把握不跨区
  • 加了一个--sleep参数,可以每次操作搬移一个文件后暂停 SLEEP 秒,此参数仅在 --move-run 时有效
  • 由于这样的操作不可逆,请一定先作 --dry-run 确认后才执行
torcp /home/test/ -d /home/test/result5/ --move-run --dryrun

8 --extract-bdmv--full-bdmv,BDMV的处理

  • 特别说一下对BDMV的处理:
  1. 如果什么参数都不加,在碰到含有 BDMV 目录和 .iso 文件时,将会跳过。
torcp /volume1/video/emby/test -d /volume1/video/emby/testdir
  1. --extract-bdmv 参数,可能最适合 Emby 或 Kodi 的用家,它将会从 BDMV 目录中挑出最大的几个 .m2ts 文件硬链出来,对于 movie/tv 都行。见下面的例子

with iso files copy to sepereate dir

torcp /volume1/video/emby/test -d /volume1/video/emby/testdir --extract-bdmv
  1. --full-bdmv 参数。使用这个参数会将整个 BDMV 文件夹和 .iso 文件都硬链出来,对于使用碟机播放的用家,就会有用。
torcp /volume1/video/emby/test -d /volume1/video/emby/testdir --full-bdmv

8.1 --extract-bdmv 的例子

  • 命令:
torcp /share/CACHEDEV1_DATA/Video/QB/TV  -d /share/CACHEDEV1_DATA/Video/emby/  --extract-bdmv 
  • 原目录:
[/share/CACHEDEV1_DATA/Video/QB/TV/Civilisations.S01.COMPLETE.BLURAY-VEXHD] # tree . -h -A -P *.m2ts
.
├── [4.0K]  CIVILISATIONS_D1
│   └── [4.0K]  BDMV
│       ├── [4.0K]  BACKUP
│       │   ├── [4.0K]  CLIPINF
│       │   └── [4.0K]  PLAYLIST
│       ├── [4.0K]  CLIPINF
│       ├── [4.0K]  META
│       │   └── [4.0K]  DL
│       ├── [4.0K]  PLAYLIST
│       └── [4.0K]  STREAM
│           ├── [ 14G]  00002.m2ts
│           ├── [ 14G]  00003.m2ts
│           ├── [ 14G]  00004.m2ts

Related Skills

View on GitHub
GitHub Stars167
CategoryDevelopment
Updated2d ago
Forks18

Languages

Python

Security Score

80/100

Audited on Mar 23, 2026

No findings