Torcp
A script to rename and copy downloaded files to a target in Emby-happy way:
Install / Use
/learn @ccf-2012/TorcpREADME
torcp
对下载的影视文件,通过 硬链 或 软链 在另一个文件夹中改名和重组目录、以便 Emby/Plex 这样的应用程序便于刮削识别。本脚本:
- 对你的影视文件夹中的文件进行分类,主要处理 TV/Movie, 解析影视文件夹中的
影视名称,年份,季,集,以及制作组 - 依照 Emby-happy 的风格进行重组目录与改名,在目标目录中生成硬链或软链.
- 支持搜索TMDb,以获得准确的、选定语言的影视名字,然后以此名字进行更名和组织目录,对于查出了TMDb的媒体,支持按语言分类
1 应用说明
- 利用 qBittorrent 的完成后自动执行脚本功能实现入库
- 在浏览器中安装种子列表过滤油猴脚本, 本地启动下载入库api服务 filterapi,在页面上过滤出的标题,批量推送至 filterapi 进行查重和下载
- 配合 PTPP 与torcc 实现 Emby/Plex 自动入库流程
- 刮削攻略
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-123456或tmdb=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-12345或movie-12345及t-54321或tv-54321这样的形式,指定资源的TMDb信息 - 2022.11.30
--tmdb-origin-name, 对于电影,生成刮削名 (年份) - 原文件名这样的文件名,对于Emby可以实现以原文件名作为版本名。 - 2022.11.11 支持Site-Id-IMDb文件夹,即在资源目录之上,有一个目录名中带有
[imdb=tt123456]或以tt123456结尾的目录 - 2022.10.26
--make-plex-matchCreate 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:
--symbolinksupport symbol link - 2022.3.13:
--langdispatch to different folders base on TMDb language - 2022.2.26:
--tmdb-api-keySupport 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的处理:
- 如果什么参数都不加,在碰到含有
BDMV目录和.iso文件时,将会跳过。
torcp /volume1/video/emby/test -d /volume1/video/emby/testdir
--extract-bdmv参数,可能最适合 Emby 或 Kodi 的用家,它将会从BDMV目录中挑出最大的几个.m2ts文件硬链出来,对于 movie/tv 都行。见下面的例子
with
isofiles copy to sepereate dir
torcp /volume1/video/emby/test -d /volume1/video/emby/testdir --extract-bdmv
--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
node-connect
335.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
82.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
335.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
82.7kCommit, push, and open a PR
