{"id":17168023,"url":"https://github.com/masterain98/plexmuxy","last_synced_at":"2025-04-13T15:35:47.639Z","repository":{"id":150406756,"uuid":"441346074","full_name":"Masterain98/PlexMuxy","owner":"Masterain98","description":"PlexMuxy is a Python script to multiplex video with each independent audio, subtitle and fonts in bulk, in order to allow Plex Media Server to present media best in visual. ","archived":false,"fork":false,"pushed_at":"2024-12-23T10:38:03.000Z","size":61,"stargazers_count":22,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-12T14:27:31.052Z","etag":null,"topics":["anime","mkvmerge","mkvtoolnix","plex","plex-media-server"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Masterain98.png","metadata":{"files":{"readme":"README.CN.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-24T02:31:15.000Z","updated_at":"2025-02-12T17:05:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"f0c4d288-627b-4343-a15a-cf2ddc061623","html_url":"https://github.com/Masterain98/PlexMuxy","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Masterain98%2FPlexMuxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Masterain98%2FPlexMuxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Masterain98%2FPlexMuxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Masterain98%2FPlexMuxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Masterain98","download_url":"https://codeload.github.com/Masterain98/PlexMuxy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248737237,"owners_count":21153727,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anime","mkvmerge","mkvtoolnix","plex","plex-media-server"],"created_at":"2024-10-14T23:10:57.344Z","updated_at":"2025-04-13T15:35:47.617Z","avatar_url":"https://github.com/Masterain98.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Plex 视频批量封装工具 (PlexMuxy)\n\nPlexMuxy 是一个将字幕组/压制组发布作品进行封装的 Python 脚本，它会将外挂字幕、外挂音频、字幕字体文件进行打包，以允许 Plex 服务器能以最好的方法使用这些资源。\n\n中文 README | [English README](https://github.com/Masterain98/PlexMuxy/blob/main/README.md)\n\n## 功能和说明\n\n- 将视频文件、音频文件、字幕文件和字体文件重新打包混流成一个`mkv` 格式的单文件\n  - 音频\n    - 外挂的音频文件通常为5.1声道或评论轨\n  - 字幕\n    - 通过文件名判断字幕的语言，包括简体中文、繁体中文、日语、简日、繁日\n      - 简中字幕轨道使用 `chs` 作为名称，轨道语言标记为 `chi`\n      - 繁中字幕轨道使用 `cht`作为名称，轨道语言标记为 `chi`\n      - 日语字幕轨道使用 `jpn` 作为名称，轨道语言标记为 `jpn`\n      - 简日字幕轨道使用 `jp_sc` 作为名称，轨道语言标记为 `chi`\n      - 繁日字幕轨道使用 `jp_tc`作为名称，轨道语言标记为 `chi`\n    - 通过文件名判断字幕作者并将其名称加入字幕轨道\n  - 字体\n    - 字体文件以附件形式与每一个视频一起打包\n    - 这是为了让 Plex 加载字体以保证完整的字幕特效，但会浪费额外的储存空间；当你可以制作字体子集时，建议使用子集字体以减小字体包的大小\n- 根据设置，自动删除原始文件或将原始文件移动至统一的目录以避免 Plex 的媒体扫描\n\n## 使用说明\n\n- 下载并安装 [MKVToolNix](https://mkvtoolnix.download/) 并添加其进入`PATH` 系统变量\n\n  - 或者你也可以将一个  `mkvmerge.exe` 文件始终置于  `main.py` 的同目录下\n\n- 将 `main.py` 放入到视频集所在目录\n\n  - 修改 `Global Variable` 部分的变量值以修改设置，默认值如下：\n\n    ```python\n    # Global Variable\n    DELETE_FONTS = False\n    DELETE_ORIGINAL_MKV = False\n    DELETE_ORIGINAL_MKA = False\n    DELETE_SUB = False\n    SUFFIX_NAME = \"_Plex\"\n    ```\n\n    - `DELETE_FONTS`\n      - `True` 时在任务结束时删除 `Fonts` 文件夹，否则无操作\n\n    - `DELETE_ORIGINAL_MKV`\n      - `True` 时在任务结束时删除原始 `mkv` 文件，否则移动文件至 `Extra` 子目录中\n\n    - `DELETE_ORIGINAL_MKA` \n      - `True` 时在任务结束时删除原始 `mka` 文件，否则移动文件至 `Extra` 子目录中\n\n    - `DELETE_SUB`\n      - `True` 时在任务结束时删除 `ass` 字幕文件，否则移动文件至 `Extra` 子目录中\n\n    - `SUFFIX_NAME`\n      - 在新的混流 `mkv` 文件结尾处添加的后缀文件名，用于标记本程序所创建的视频文件，若留空则会添加默认的 `_Plex` 后缀\n\n- **保证你的需要打包文件符合脚本所期待的命名规范**\n\n  - 包含完整原始 `mkv` 文件名的文件会被考虑为同一组文件\n\n    - 比如\n\n      - `[Kamigami] Ansatsu Kyoushitsu [00][Ma10p_1080p][x265_flac].mkv` 和 `[Kamigami\u0026VCB-Studio] Ansatsu Kyoushitsu [00][Ma10p_1080p][x265_flac].sc.ass` 为同一组资源\n\n      - `[VCB-Studio] Tenki no Ko [Ma10p_2160p_HDR][x265_flac].mka`和`[VCB-Studio] Tenki no Ko [Ma10p_2160p_HDR][x265_flac].mkv` 为同一组资源\n\n    - 在此基础上，会在文件名中查找关键字串符，以匹配字幕资源。规则如下表，脚本判断顺序为该表从上至下\n\n      |                        关键字串符                        | 判断结果 |\n      | :------------------------------------------------------: | :------: |\n      | `.jpsc`, `[jpsc]`, `jp_sc`, `[jp_sc]`, `chs\u0026jap`, `简日` |   简日   |\n      | `.jptc`, `[jptc]`, `jp_tc`, `[jp_tc]`, `cht\u0026jap`, `繁日` |   繁日   |\n      |      `.chs`, `.sc`, `[chs]`, `[sc]`, `.gb`, `[gb]`       |   简中   |\n      |     `.cht`, `.tc`, `[cht]`, `[tc]`, `big5`, `[big5]`     |   繁中   |\n      |     `.jp`, `.jpn`, `.jap`, `[jp]`, `[jpn]`, `[jap]`      |   日语   |\n\n    - 文件名的第一个字符若为 `[`，则会匹配所有随后的内容直至下一个`]` ，作为字幕作者名称并添加进轨道名称\n\n      - 比如\n        - `[Kamigami] Ansatsu Kyoushitsu [00][Ma10p_1080p][x265_flac].sc.as`的作者为 `Kamigami\u0026VCB-Studio`，该字幕轨道名称为` chs Kamigami\u0026VCB-Studio`\n\n  - 若没有找到同一组资源文件，则会在原始 `mkv` 文件中寻找 `[01]` 这样的剧集数关键词，即被`[` 和 `]`包围的两位数字\n\n    - 随后使用该剧集数在整个工作目录中寻找包含相同数字的文件，这些文件中的数字必须符合以下的规则才会被读取（以 `[02]` 为例）：\n      - `[02]`\n      - `.02.`\n      - ` 02 ` (前后分别有一个空格)\n      - `02.`（前面有一个空格）\n\n  - 若工作路径下有一个名为 `Fonts`的目录，则会该目录中所有字体文件，不会再有额外的操作\n\n    - `ttf`, `otf `和 `ttc` 格式文件被视为有效的字体\n\n  - 若工作路径下没有名为 `Fonts`的目录，则会将工作路径下文件名包含 `Fonts` 关键词的 `zip`和 `7z` 文件解压，使用其中的字体文件作为附加字体\n\n- 运行 `main.py`\n\n  - `python main.py`\n\n\n## 效果预览\n\n### 程序运行\n\n![](https://github.com/Masterain98/Repo-README-Images/blob/main/Anime-MKV-Plex-Packager/Cli-sample.png?raw=true)\n\n### Plex 字幕选择\n\n![](https://raw.githubusercontent.com/Masterain98/Repo-README-Images/main/Anime-MKV-Plex-Packager/Plex-sample-sub-options.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmasterain98%2Fplexmuxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmasterain98%2Fplexmuxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmasterain98%2Fplexmuxy/lists"}