fileinfo.go 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package subparser
  2. import (
  3. "github.com/allanpk716/ChineseSubFinder/internal/common"
  4. "github.com/allanpk716/ChineseSubFinder/internal/types/language"
  5. "time"
  6. )
  7. type FileInfo struct {
  8. Content string // 字幕的内容
  9. FromWhereSite string // 从那个网站下载的
  10. Name string // 字幕的名称,注意,这里需要额外的赋值,不会自动检测
  11. Ext string // 字幕的后缀名
  12. Lang language.MyLanguage // 识别出来的语言
  13. FileFullPath string // 字幕文件的全路径
  14. Data []byte // 字幕的二进制文件内容
  15. Dialogues []OneDialogue // 整个字幕文件的所有对话
  16. DialoguesFilter []OneDialogue // 整个字幕文件的所有对话,过滤掉特殊字符的对白
  17. DialoguesFilterEx []OneDialogueEx // 整个字幕文件的所有对话,过滤掉特殊字符的对白,这里会把一句话中支持的 中、英、韩、日 四国语言给分离出来
  18. CHLines []string // 抽取出所有的中文对话
  19. OtherLines []string // 抽取出所有的第二语言对话,可能是英文、韩文、日文
  20. }
  21. // GetTimeFormat 获取时间轴的格式化格式
  22. func (f FileInfo) GetTimeFormat() string {
  23. if f.Ext == common.SubExtASS || f.Ext == common.SubExtSSA {
  24. return common.TimeFormatPoint2
  25. } else {
  26. return common.TimeFormatPoint3
  27. }
  28. }
  29. // ParseTime 解析字幕时间字符串,这里可能小数点后面有 2-4 位
  30. func (f FileInfo) ParseTime(inTime string) (time.Time, error) {
  31. parseTime, err := time.Parse(common.TimeFormatPoint2, inTime)
  32. if err != nil {
  33. parseTime, err = time.Parse(common.TimeFormatPoint3, inTime)
  34. if err != nil {
  35. parseTime, err = time.Parse(common.TimeFormatPoint4, inTime)
  36. }
  37. }
  38. return parseTime, err
  39. }
  40. // GetDialogueExContent 获取当前字幕文件语言对应索引的对白内容
  41. // 凡是带有 Eng 的返回 Eng,其他的就与对应语言相关
  42. func (f FileInfo) GetDialogueExContent(index int) string {
  43. switch f.Lang {
  44. case language.ChineseSimple, language.ChineseTraditional,
  45. language.ChineseSimpleJapanese, language.ChineseSimpleKorean,
  46. language.ChineseTraditionalJapanese, language.ChineseTraditionalKorean:
  47. // 带有中文的,但是又不是中英的
  48. return f.DialoguesFilterEx[index].ChLine
  49. case language.English, language.ChineseSimpleEnglish, language.ChineseTraditionalEnglish:
  50. return f.DialoguesFilterEx[index].EnLine
  51. case language.Japanese:
  52. return f.DialoguesFilterEx[index].JpLine
  53. case language.Korean:
  54. return f.DialoguesFilterEx[index].KrLine
  55. default:
  56. return f.DialoguesFilterEx[index].EnLine
  57. }
  58. }
  59. // OneDialogue 一句对话
  60. type OneDialogue struct {
  61. StartTime string // 开始时间
  62. EndTime string // 结束时间
  63. StyleName string // StyleName
  64. Lines []string // 台词
  65. }
  66. // OneDialogueEx 一句对话,这里会把一句话中支持的 中、英、韩、日 四国语言给分离出来
  67. type OneDialogueEx struct {
  68. StartTime string // 开始时间
  69. EndTime string // 结束时间
  70. ChLine string
  71. EnLine string
  72. KrLine string
  73. JpLine string
  74. }
  75. const (
  76. Sub_Ext_Mark_Default = ".default" // 指定这个字幕是默认的
  77. Sub_Ext_Mark_Forced = ".forced" // 指定这个字幕是强制的
  78. )