ccf-2012 / torcp

A script to rename and copy downloaded files to a target in Emby-happy way:
163 stars 19 forks source link

torcp

English version

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

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

1 应用说明

2 Last Update

3 准备

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

3.1 pip 安装

3.1.1 群晖中使用python3 和 pip3

3.2 使用源码调用的方式

4 使用方法:

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] 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


## 5 基本使用

* 将一个目录中所有影视文件和目录,硬链到另一个目录,其间会按目录名/文件名猜测分类,并挑出 `.mkv` 和 `.mp4`:
```sh 
torcp /home/ccf2012/Downloads/  -d /home/ccf2012/emby/ 

6 --tmdb-api-key TMDb 查询

torcp /home/test/ -d /home/test/result3/ --tmdb-api-key='your TMDb api key'

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

6.2 --lang 按语言分类

torcp /home/test/ -d /home/test/result3/ --tmdb-api-key='your TMDb api key' --lang cn,ja,ko

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

torcp /home/test/ -d /home/test/result5/ --move-run --dryrun

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

8.1 --extract-bdmv 的例子

* 执行后:

[/share/CACHEDEV1_DATA/Video/emby/BDMV_TV/Civilisations] # tree . -h -A . ├── [4.0K] CIVILISATIONS_D1 │ ├── [ 14G] CIVILISATIONS_D1\ -\ 00002.m2ts │ ├── [ 14G] CIVILISATIONS_D1\ -\ 00003.m2ts │ └── [ 14G] CIVILISATIONS_D1\ -\ 00004.m2ts ├── [4.0K] CIVILISATIONS_D2 │ ├── [ 14G] CIVILISATIONS_D2\ -\ 00002.m2ts │ ├── [ 14G] CIVILISATIONS_D2\ -\ 00003.m2ts │ └── [ 14G] CIVILISATIONS_D2\ -\ 00004.m2ts └── [4.0K] CIVILISATIONS_D3 ├── [ 14G] CIVILISATIONS_D3\ -\ 00002.m2ts ├── [ 14G] CIVILISATIONS_D3\ -\ 00003.m2ts └── [ 14G] CIVILISATIONS_D3\ -\ 00004.m2ts


----

## 9 媒体文件名生成方案

### 9.1 `--origin-name` 与 `--tmdb-origin-name`
* 对于IMDb搜索到的媒体资源,目录结构将按Emby/Plex所约定的规范进行组织,目录内的文件名,有3种可能的方式:
1. 默认的:刮削名 (年份) - 分辨率_组名.mkv
2. `--origin-name`:TV直接使用 原文件名, Movie:刮削名 (年份) - 原文件名
3. `--tmdb-origin-name`:刮削名 (年份) - 原文件名

### 9.2 `--emby-bracket`, --plex-bracket`
* 可以使用 `--emby-bracket` 选项在 「刮削名 (年份)」之后加上如「[tmdbid=509635]」这样的emby bracket,以便Emby在刮削时直接辨认使用;
* 对于plex,可以使用 `--plex-bracket` 生成如 「{tmdb-509635}」这样的后缀;
* 这两个选项在使用  `--tmdb-origin-name` 时也是生效的

* 比如:
```sh
python3 tp.py ../test -d ../test/result  --tmdb-api-key 'your TMDb api key'  --tmdb-origin-name  --emby-bracket
* 而如果不使用 `--tmdb-origin-name `
```sh
python3 tp.py ../test -d ../test/result  --tmdb-api-key 'your TMDb api key'  --emby-bracket 

10 传入IMDb信息

10.1 建一个包含IMDb id的目录

10.2 以--imdbid参数指定 IMDb id


11 DeleteEmptyFolders.py 清除空目录

torcp-clean /home/test/  -e srt,ass --dryrun

12 以代码调用torcp进行二次开发

class TorcpExportObj: def onOneItemTorcped(self, targetDir, mediaName, tmdbIdStr, tmdbCat): print(targetDir, mediaName, tmdbIdStr, tmdbCat)

if name == 'main': argv = ["~/torccf/test", "-d", "~/torccf/result", "--tmdb-api-key", "your_tmdb_api_key", "--emby-bracket", "--extract-bdmv", "--tmdb-origin-name"] eo = TorcpExportObj() o = Torcp() o.main(argv, eo)


## 13 类型,语言,地区分目录
* 地区 `--sep-area` 与 语言 `--lang` 只选其一,`--lang` 优先(有lang了就不看area)
* 如果地区没有取到,则会取语言代码;语言是小写,地区是大写;
* 类型 `--genre` 独立在 地区/语言之外,如果指定了类型,只有没指定的部分会分 地区/地区
* `--genre` 可设的类型值与 `--tmdb-lang` 所设语言相关,对于电影,中文有:

动作 冒险 动画 喜剧 犯罪 纪录 剧情 家庭 奇幻 历史 恐怖 音乐 悬疑 爱情 科幻 电视电影 惊悚 战争 西部

英文有:

Action Adventure Animation Comedy Crime Documentary Drama Family Fantasy History Horror Music Mystery Romance Science Fiction TV Movie Thriller War Western


* 对于电视,中文有:

动作冒险 动画 喜剧 犯罪 纪录 剧情 家庭 儿童 悬疑 新闻 真人秀 Sci-Fi & Fantasy 肥皂剧 脱口秀 War & Politics 西部


英文有:

Action & Adventure Animation Comedy Crime Documentary Drama Family Kids Mystery News Reality Sci-Fi & Fantasy Soap Talk War & Politics



---
## Acknowledgement 
 * [@leishi1313](https://github.com/leishi1313)
 * @Aruba  @ozz
 * @NishinoKana @Esc @Hangsijing @Inu