Skip to content

Thuninisan/anitogo-zh

 
 

Repository files navigation

Anitogo License Godoc

Anitogo 是一个用于解析动漫视频文件名的 Golang 库。它基于 AnitomyAnitopy 构建。

本分支针对中文命名习惯进行了优化,新增以下特性:

  • 中文数字支持:完美支持中文大写数字及量词的解析(例如:“第一季”、“第十二集”、“十六话”)。
  • 字幕与语言识别:优化了对中文字幕元数据的捕获(例如:文件名中的“简繁日内封”会被解析为 Language: ["简体中文", "繁体中文", "日语"] 以及 Subtitles: ["内封字幕"])。

解析示例

对于以下文件名...

[随便写的制作组] Re:从零开始的异世界生活 第三季 - 16 [CR WebRip 1080p HEVC-10bit AAC][简繁日内封字幕].mkv

...将被解析为以下元素:

  • Release Group: "随便写的制作组"
  • Anime Title: "Re:从零开始的异世界生活"
  • Anime Season: ["3"]
  • Episode Number: ["16"]
  • Video resolution: "1080p"
  • Video term: ["HEVC-10bit"]
  • Audio term: ["AAC"]
  • Language: ["简体中文", "繁体中文", "日语"]
  • Subtitles: ["内封字幕"]

代码使用示例:

package main

import (
    "fmt"
    "encoding/json"

    "github.com/Thuninisan/anitogo"
)

func main() {
    parsed := anitogo.Parse("[Nubles] Space Battleship Yamato 2199 (2012) episode 18 (720p 10 bit AAC)[1F56D642]", anitogo.DefaultOptions)
    jsonParsed, err := json.MarshalIndent(parsed, "", "    ")
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(jsonParsed) + "\n")

    // Accessing the elements directly
    fmt.Println("Anime Title:", parsed.AnimeTitle)
    fmt.Println("Anime Year:", parsed.AnimeYear)
    fmt.Println("Episode Number:", parsed.EpisodeNumber)
    fmt.Println("Release Group:", parsed.ReleaseGroup)
    fmt.Println("File Checksum:", parsed.FileChecksum)
}

输出结果:

{
    "anime_title": "Space Battleship Yamato 2199",
    "anime_year": "2012",
    "audio_term": [
        "AAC"
    ],
    "episode_number": [
        "18"
    ],
    "file_checksum": "1F56D642",
    "file_name": "[Nubles] Space Battleship Yamato 2199 (2012) episode 18 (720p 10 bit AAC)[1F56D642]",
    "release_group": "Nubles",
    "video_resolution": "720p"
}

Anime Title: Space Battleship Yamato 2199
Anime Year: 2012
Episode Number: [18]
Release Group: Nubles
File Checksum: 1F56D642

Parse 函数返回一个指向 Elements 结构体的指针。结构体的完整定义如下:

type elements struct {
    AnimeSeason         []string `json:"anime_season,omitempty"`
    AnimeSeasonPrefix   []string `json:"anime_season_prefix,omitempty"`
    AnimeTitle          string   `json:"anime_title,omitempty"`
    AnimeType           []string `json:"anime_type,omitempty"`
    AnimeYear           string   `json:"anime_year,omitempty"`
    AudioTerm           []string `json:"audio_term,omitempty"`
    DeviceCompatibility []string `json:"device_compatibility,omitempty"`
    EpisodeNumber       []string `json:"episode_number,omitempty"`
    EpisodeNumberAlt    []string `json:"episode_number_alt,omitempty"`
    EpisodePrefix       []string `json:"episode_prefix,omitempty"`
    EpisodeTitle        string   `json:"episode_title,omitempty"`
    FileChecksum        string   `json:"file_checksum,omitempty"`
    FileExtension       string   `json:"file_extension,omitempty"`
    FileName            string   `json:"file_name,omitempty"`
    Language            []string `json:"language,omitempty"`
    Other               []string `json:"other,omitempty"`
    ReleaseGroup        string   `json:"release_group,omitempty"`
    ReleaseInformation  []string `json:"release_information,omitempty"`
    ReleaseVersion      []string `json:"release_version,omitempty"`
    Source              []string `json:"source,omitempty"`
    Subtitles           []string `json:"subtitles,omitempty"`
    VideoResolution     string   `json:"video_resolution,omitempty"`
    VideoTerm           []string `json:"video_term,omitempty"`
    VolumeNumber        []string `json:"volume_number,omitempty"`
    VolumePrefix        []string `json:"volume_prefix,omitempty"`
    Unknown             []string `json:"unknown,omitempty"`
    checkAltNumber      bool
}

JSON 编码的示例结果可以在 tests/data.json 文件中查看。

安装

获取包:

go get -u github.com/Thuninisan/anitogo-zh

在代码中引入:

import "github.com/Thuninisan/anitogo-zh"

配置选项

Parse 函数接收文件名和 Options 结构体。默认选项如下:

var DefaultOptions = Options{
    AllowedDelimiters:  " _.&+,|", // 解析为分隔符的字符
    IgnoredStrings:     []string{}, // 文件名中需要忽略的字符串
    ParseEpisodeNumber: true,       // 解析集数并包含在元素中
    ParseEpisodeTitle:  true,       // 解析集标题并包含在元素中
    ParseFileExtension: true,       // 解析文件后缀并包含在元素中
    ParseReleaseGroup:  true,       // 解析发布组并包含在元素中
}

更多说明

本项目核心解析逻辑与原版 anitogo 保持一致。如果您需要了解更深入的配置选项(Options)、完整的元素结构体定义(Elements Struct)或高级过滤规则,具体使用细节请参阅原项目 README:

🔗 nssteinbrenner/anitogo

许可证

本项目采用 Mozilla Public License 2.0 (MPL-2.0) 许可证。基于协议要求,请在衍生版本中保留原始版权声明。


致谢

About

Anime video filename parser in Golang, based on Anitomy. Enhanced with Chinese numbering (e.g., 第一季, 第16集) and subtitle metadata support.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Go 100.0%