Bangumi Parser
一个用于解析和组织动漫视频文件的Python库。
功能特点
- 自动扫描指定目录中的视频文件
- 智能识别番剧系列和集数
- 提取字幕组、视频标签等元数据信息
- 番剧目录名二次解析 - 自动去除字幕组、画质等无关信息,提取真正的番剧名
- 智能合并同季重复内容
- 多季番剧统一管理
- 季度信息自动提取
- 支持自定义配置文件
- 多种导出格式(JSON、CSV、播放列表)
- 可扩展的解析规则
- 未知集数智能重命名
安装
pip install bangumi_parser
快速开始
命令行工具
# 基本使用
python -m bangumi_parser.cli /path/to/anime/directory
# 使用合并模式并显示统计信息
python -m bangumi_parser.cli /path/to/anime/directory --merge --stats
# 导出到JSON文件,启用详细输出
python -m bangumi_parser.cli /path/to/anime/directory --output results.json --verbose
# 使用自定义配置文件导出到CSV
python -m bangumi_parser.cli /path/to/anime/directory --config config.json --output results.csv --format csv
基本使用
from bangumi_parser import BangumiParser
import os
import pathlib
# 创建解析器实例
parser = BangumiParser()
# 扫描下载目录
scan_dir = os.path.join(pathlib.Path.home(), "Downloads")
series_info = parser.parse(scan_dir)
# 打印解析结果
parser.print_analysis_results()
解析季
from bangumi_parser import BangumiParser, BangumiConfig, BangumiInfo
from bangumi_parser.utils import export_to_json, get_bangumi_statistics
# 使用新的合并解析功能
parser = BangumiParser()
bangumi_info = parser.parse_and_merge(r"E:\Bangumi")
parser.print_bangumi_results(bangumi_info)
# 获取番剧统计信息
stats = get_bangumi_statistics(bangumi_info)
print(f"总共 {stats['total_bangumi']} 部番剧")
print(f"总共 {stats['total_seasons']} 季")
print(f"总共 {stats['total_episodes']} 集")
智能合并功能
新版本支持两种智能合并:
1. 同季合并
自动合并同一系列、同一目录、同一季的重复内容:
# 这些文件会被智能合并
# Attack on Titan/Season 1/AOT S01E01.mkv (较少集数)
# Attack on Titan/Season 1/Attack on Titan - 01 [1080p].mkv (较多集数,成为主集合)
# Attack on Titan/Season 1/AOT Special.mkv (未知集数,重命名为"未知集01")
parser = BangumiParser()
series_info = parser.parse("video_directory")
merged_series = parser.merge_same_season_series(series_info)
合并规则:
- 更多集数的优先(作为主集合)
- 解析出具体集数的优先于默认"00"
- 集数为"00"的重命名为"未知集01"、"未知集02"等
2. 多季合并
将同一系列名称不同季的结果合并到BangumiInfo中:
# 这些会被合并为一个番剧
# Attack on Titan/Season 1/...
# Attack on Titan/Season 2/...
# Attack on Titan/第3季/...
bangumi_info = parser.merge_multi_season_series(merged_series)
自定义配置
from bangumi_parser import BangumiParser, BangumiConfig
# 创建自定义配置
config = BangumiConfig()
# 添加自定义字幕组
config.add_release_group("MyFavoriteGroup")
config.add_release_group("AnotherGroup")
# 添加自定义标签
config.add_tag("4K HDR")
config.add_tag("Dolby Vision")
# 添加自定义集数识别模式
config.add_episode_pattern(r'EP(\d{1,2})') # 识别 EP01, EP02 等
# 使用自定义配置
parser = BangumiParser(config)
从配置文件加载
from bangumi_parser import BangumiParser, BangumiConfig
# 从JSON文件加载配置
config = BangumiConfig("my_config.json")
parser = BangumiParser(config)
配置文件示例 (my_config.json):
{
"known_release_groups": [
"MyCustomGroup",
"AnotherGroup"
],
"common_tags": [
"CustomTag",
"4K HDR"
],
"episode_patterns": [
"第(\\d{1,2})[话話集]"
]
}
导出功能
from bangumi_parser.utils import (
export_to_json, export_bangumi_to_csv,
generate_bangumi_playlist, get_bangumi_statistics
)
# 导出番剧信息为JSON
export_to_json(bangumi_info, "bangumi_data.json")
# 导出番剧信息为CSV
export_bangumi_to_csv(bangumi_info, "bangumi_data.csv")
# 生成番剧播放列表(每个番剧和每季都有独立播放列表)
generate_bangumi_playlist(bangumi_info, scan_dir, "playlists")
# 获取详细统计信息
stats = get_bangumi_statistics(bangumi_info)
print(f"总共 {stats['total_bangumi']} 部番剧")
print(f"总共 {stats['total_seasons']} 季")
print(f"总共 {stats['total_episodes']} 集")
print(f"平均每部番剧 {stats['average_seasons_per_bangumi']:.1f} 季")
# 传统方式(兼容旧版本)
from bangumi_parser.utils import generate_playlist, get_series_statistics
stats = get_series_statistics(series_info)
print(f"总共 {stats['total_series']} 个系列")
print(f"总共 {stats['total_episodes']} 集")
配置选项
视频格式
默认支持的视频格式:.mp4, .mkv, .avi, .mov, .wmv, .flv, .webm
字幕组识别
默认支持的字幕组:
- LoliHouse
- Sakurato
- Nekomoe kissaten
- ANi
- NC-Raws
- Leopard-Raws
- VCB-Studio
- 等等...
视频标签识别
默认支持的标签:
- 画质:1080p, 720p, 4K
- 编码:HEVC, AVC, x264, x265
- 音频:AAC, FLAC, AC3, DTS
- 字幕:CHS, CHT, JP, ENG
- 等等...
集数识别模式
默认支持的集数模式:
[ \-_\[](\d{1,2})[ \-_\]]- 01, -01, [01] 等- (\d{1,2})\.(?:mkv|mp4|...)- 新增 Series Name - 01.mkvS\d+E(\d{1,2})- 新增 S01E01, S1E1\.(\d{1,2})\.(?:mkv|mp4|...)- 新增 Series.01.mkv[Ee][Pp]?(\d{1,2})- EP01, E01, ep01 等第(\d{1,2})[话話集]- 第01话, 第01集(\d{1,2})[话話集]- 01话, 01集_(\d{1,2})_- 新增 Series_01_\s(\d{1,2})\s- 新增 Series 01 (with spaces)(?:第|Episode|Ep)(\d{1,2})- 新增 第01, Episode01, Ep01
季度识别模式
新功能 - 自动识别季度信息:
S(\d{1,2})- S01, S1Season\s*(\d{1,2})- Season 01, Season 1第(\d{1,2})[季期]- 第1季, 第1期(\d{1,2})[季期]- 1季, 1期
番剧目录名二次解析
智能番剧名提取
库内置了智能的番剧目录名二次解析功能,能自动从包含字幕组、画质等信息的复杂文件夹名中提取真正的番剧名。
支持的格式转换
标准字幕组格式:
[北宇治字幕组&LoliHouse] 坂本日常 SAKAMOTO DAYS [01-12][WebRip 1080p HEVC-10bit AACx2][简繁日内封字幕]
-> 坂本日常 SAKAMOTO DAYS
[Nekomoe kissaten&LoliHouse] Kanpekiseijo [01-12][WebRip 1080p HEVC-10bit AAC ASSx2]
-> Kanpekiseijo
[LoliHouse] Ore wa Subete wo Parry suru [01-12][WebRip 1080p HEVC-10bit AAC]
-> Ore wa Subete wo Parry suru
多括号复杂格式:
[GM-Team][国漫][时光代理人][Shiguang Dailiren][2021][01-11 Fin][AVC][GB][1080P]
-> 时光代理人 Shiguang Dailiren
带季度信息:
【我推的孩子】 第一季
-> 【我推的孩子】
关于我转生变成史莱姆这档事 第三季
-> 关于我转生变成史莱姆这档事
过滤规则
自动过滤以下信息:
- 字幕组名称:LoliHouse、Sakurato、北宇治字幕组等
- 画质信息:1080p、720p、4K、WebRip、BDRip等
- 编码信息:HEVC、AVC、x264、x265、10bit、8bit等
- 音频信息:AAC、FLAC、AC3、DTS等
- 字幕信息:简体、繁体、简繁、内封、外挂、字幕等
- 集数范围:[01-12]、[01-24]等
- 技术标签:SRTx2、ASSx2、CHS、CHT等
使用方法
二次解析功能在解析过程中自动启用,无需额外配置:
from bangumi_parser import BangumiParser
parser = BangumiParser()
series_info = parser.parse("your_anime_directory")
# 解析结果中的 series_name 已经是清理后的番剧名
for pattern, info in series_info.items():
print(f"清理后的番剧名: {info.series_name}")
print(f"原始目录名: {info.dir_name}")
API 文档
BangumiParser
主要的解析器类。
方法
__init__(config=None)- 初始化解析器scan_directory(directory)- 扫描目录中的视频文件group_series()- 按系列分组视频文件analyze_series()- 分析系列信息parse(directory)- 完整的解析流程print_analysis_results()- 打印解析结果parse_and_merge(directory)- 新增 完整的解析和合并流程merge_same_season_series(series_info)- 新增 合并同季系列merge_multi_season_series(series_info)- 新增 合并多季系列print_bangumi_results(bangumi_info)- 新增 打印番剧合并结果
BangumiConfig
配置管理类。
方法
__init__(config_path=None)- 初始化配置add_release_group(group_name)- 添加字幕组add_tag(tag)- 添加标签add_episode_pattern(pattern)- 添加集数模式save_config(output_path)- 保存配置到文件
SeriesInfo
系列信息数据类。
属性
series_name- 系列名称dir_name- 目录名称season- 新增 季度信息release_group- 字幕组tags- 标签列表episode_count- 集数episodes- 集数映射 ({"01": "path/to/episode.mkv"})
BangumiInfo
新增 - 番剧信息数据类,支持多季管理。
属性
series_name- 番剧名称seasons- 季度信息字典 (Dict[int, SeriesInfo])total_episodes- 总集数season_count- 季数release_groups- 所有字幕组列表tags- 所有标签列表
方法
add_season(season_info)- 添加季度信息to_dict()- 转换为字典格式
工具函数
bangumi_parser.utils
传统函数(兼容旧版本)
export_to_json(series_info, output_path)- 导出为JSONexport_to_csv(series_info, output_path)- 导出为CSVgenerate_playlist(series_info, base_dir, output_dir)- 生成播放列表create_symlinks(series_info, target_dir, source_dir)- 创建符号链接get_series_statistics(series_info)- 获取统计信息
新增番剧函数
export_bangumi_to_csv(bangumi_info, output_path)- 导出番剧信息为CSVget_bangumi_statistics(bangumi_info)- 获取番剧统计信息create_bangumi_symlinks(bangumi_info, target_dir, source_dir)- 创建番剧符号链接generate_bangumi_playlist(bangumi_info, base_dir, output_dir)- 生成番剧播放列表
新增统计信息
get_bangumi_statistics() 返回:
total_bangumi- 番剧总数total_seasons- 季度总数total_episodes- 总集数season_distribution- 季度分布统计average_seasons_per_bangumi- 平均每部番剧季数average_episodes_per_bangumi- 平均每部番剧集数average_episodes_per_season- 平均每季集数
示例
参见 example_usage.py 文件获取更多使用示例。
许可证
MIT License
Metadata
Release files for bangumi-parser 1.0.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| bangumi_parser-1.0.5.tar.gz | 26.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bangumi_parser-1.0.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 49.9 kB
Release files / bangumi_parser-1.0.5.tar.gz
| Download URL | bangumi_parser-1.0.5.tar.gz |
|---|---|
| Size | 26.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a91038e27bcb849384a958f312269037ae15fb97c762d4760ade5a165c448f0a
|
|
BLAKE2b-256 checksum How to use checksums |
ce730514a966a64caa1d9a5e3e2c1c0d233c58c131f6402af5d7ec1c98ce037e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.15
|
Release files / bangumi_parser-1.0.5-py3-none-any.whl
| Download URL | bangumi_parser-1.0.5-py3-none-any.whl |
|---|---|
| Size | 22.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1a1e74980dba98f245277b9b814f5801ae46be4171dd6e08a5497d4043b048ae
|
|
BLAKE2b-256 checksum How to use checksums |
7ad41b12c46c83056e13785326246ac6c517f4762b78a99ecbe3ac898c666dbe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.15
|
Security for bangumi-parser 1.0.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.