sub_helper

package
v0.55.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 1, 2023 License: MIT Imports: 21 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddFrontName

func AddFrontName(info supplier.SubInfo, orgName string) string

AddFrontName 添加文件的前缀

func ChangeVideoExt2SubExt

func ChangeVideoExt2SubExt(subInfos []supplier.SubInfo)

ChangeVideoExt2SubExt 检测 Name,如果是视频的后缀名就改为字幕的后缀名

func DeleteOneSeasonSubCacheFolder

func DeleteOneSeasonSubCacheFolder(seriesDir string) error

DeleteOneSeasonSubCacheFolder 删除一个连续剧中的所有一季字幕的缓存文件夹

func GetFrontNameAndOrgName

func GetFrontNameAndOrgName(log *logrus.Logger, info *supplier.SubInfo) string

GetFrontNameAndOrgName 返回的名称包含,那个网站下载的,这个网站中排名第几,文件名

func MergeMultiDialogue4EngSubtitle

func MergeMultiDialogue4EngSubtitle(inSubParser *subparser.FileInfo)

只针对英文字幕进行合并分散的 DialoguesFilter 会遇到这样的字幕,如下0 2line-The Card Counter (2021) WEBDL-1080p.chinese(inside).ass 它的对白一句话分了两个 dialogue 去做。这样做后续字幕时间轴校正就会遇到问题,因为只有一半,匹配占比会很低 (每一个 Dialogue 的首字母需要分析,大写和小写的占比是多少,统计一下,正常的,和上述特殊的) 那么,就需要额外的逻辑去对 DialoguesFilterEx 进行额外的推断 暂时考虑的方案是,英文对白每一句的开头应该是英文大写字幕,如果是小写字幕,就应该与上语句合并,且每一句的字符长度有大于一定才触发

func OrganizeDlSubFiles

func OrganizeDlSubFiles(log *logrus.Logger, tmpFolderName string, subInfos []supplier.SubInfo, isMovie bool) (map[string][]string, error)

OrganizeDlSubFiles 需要从汇总来是网站字幕中,解压对应的压缩包中的字幕出来

func SearchMatchedSubFileByDir

func SearchMatchedSubFileByDir(log *logrus.Logger, dir string) ([]string, error)

SearchMatchedSubFileByDir 搜索符合后缀名的视频文件,排除 Sub_SxE0 这样的文件夹中的文件

func SearchMatchedSubFileByOneVideo

func SearchMatchedSubFileByOneVideo(l *logrus.Logger, oneVideoFullPath string) ([]string, error)

SearchMatchedSubFileByOneVideo 搜索这个视频当前目录下匹配的字幕

func SearchVideoMatchSubFileAndRemoveExtMark

func SearchVideoMatchSubFileAndRemoveExtMark(l *logrus.Logger, oneVideoFullPath string) error

SearchVideoMatchSubFileAndRemoveExtMark 找到找个视频目录下相匹配的字幕,同时去除这些字幕中 .default 或者 .forced 的标记。注意这两个标记不应该同时出现,否则无法正确去除

func SelectChineseBestBilingualSubtitle

func SelectChineseBestBilingualSubtitle(subs []subparser.FileInfo, subTypePriority int) *subparser.FileInfo

SelectChineseBestBilingualSubtitle 找到合适的双语中文字幕,简体->繁体,以及 字幕类型的优先级选择

func SelectChineseBestSubtitle

func SelectChineseBestSubtitle(subs []subparser.FileInfo, subTypePriority int) *subparser.FileInfo

SelectChineseBestSubtitle 找到合适的中文字幕,简体->繁体,以及 字幕类型的优先级选择

Types

type DialogueMerger

type DialogueMerger struct {
	// contains filtered or unexported fields
}

DialogueMerger 合并分散的对白,目标是搞定英文字幕

func NewDialogueMerger

func NewDialogueMerger() *DialogueMerger

func (*DialogueMerger) Add

func (d *DialogueMerger) Add(inDialogueEx subparser.OneDialogueEx) bool

func (*DialogueMerger) Clear

func (d *DialogueMerger) Clear()

func (*DialogueMerger) Get

type Feature

type Feature struct {
	BigThanTime  float64 // 大于这个时间
	LessThanTime float64 // 小于这个时间
	LeastCount   int     // 至少有几个特征
	NowCount     int     // 用于计数
}

Feature 钥匙锯齿的特征

func NewFeature

func NewFeature(BigThanTime, LessThanTime float64, LeastCount int) Feature

NewFeature 时间如果传入的是 -1,那么就跳过这个判断

func (Feature) Match

func (f Feature) Match(interval float64) bool

Match 判断这个间隔是否符合要求

type KeyFeatures

type KeyFeatures struct {
	Big    Feature // 大锯齿
	Middle Feature // 中锯齿
	Small  Feature // 小锯齿
}

KeyFeatures 钥匙的组合特征

func NewKeyFeatures

func NewKeyFeatures(big, middle, small Feature) KeyFeatures

type SubUnit

type SubUnit struct {
	VADList []vad.VADInfo // 注意这里存储的是真实时间
	// contains filtered or unexported fields
}

func GetVADInfoFeatureFromSub

func GetVADInfoFeatureFromSub(fileInfo *subparser.FileInfo, frontAndEndPer float64, subUnitMaxCount int, insert bool) ([]SubUnit, error)

GetVADInfoFeatureFromSub 跟下面的 GetVADInfoFeatureFromSubNeedOffsetTimeWillInsert 函数功能一致

func GetVADInfoFeatureFromSubNeedOffsetTimeWillInsert

func GetVADInfoFeatureFromSubNeedOffsetTimeWillInsert(fileInfo *subparser.FileInfo, SkipFrontAndEndPer float64, subUnitMaxCount int, offsetTime float64, insert bool) ([]SubUnit, error)

GetVADInfoFeatureFromSubNeedOffsetTimeWillInsert 只不过这里可以加一个每一句话固定的偏移时间 这里的字幕要求是完整的一个字幕 1. 抽取字幕的时间片段的时候,暂定,前 15% 和后 15% 要避开,前奏、主题曲、结尾曲 2. 将整个字幕,抽取连续 5 句对话为一个单元,提取时间片段信息 3. 这里抽取的是特征,也就有额外的逻辑去找这个特征(本程序内会描述为“钥匙”)

func GetVADInfoFeatureFromSubNew

func GetVADInfoFeatureFromSubNew(fileInfo *subparser.FileInfo, SkipFrontAndEndPer float64) (*SubUnit, error)

GetVADInfoFeatureFromSubNew 将 Sub 文件转换为 VAD List 信息

func NewSubUnit

func NewSubUnit() *SubUnit

func (*SubUnit) Add

func (s *SubUnit) Add(oneSubStartTime, oneSubEndTime time.Time)

func (*SubUnit) AddAndInsert

func (s *SubUnit) AddAndInsert(oneSubStartTime, oneSubEndTime time.Time)

AddAndInsert 添加一句对白进来,并且填充中间的空白,间隔 10ms。传入的时间是真实的时间

func (*SubUnit) AddBaseTime

func (s *SubUnit) AddBaseTime(addBaseTime time.Duration)

AddBaseTime 如果 BaseTime 还有偏移,可以在 Add 和 AddAndInsert 逻辑完成后,调用此方法去调整基准时间

func (SubUnit) GetDialogueCount

func (s SubUnit) GetDialogueCount() int

GetDialogueCount 获取这个对白单元由几个对话

func (SubUnit) GetEndTime

func (s SubUnit) GetEndTime(realOrOffsetTime bool) time.Time

GetEndTime 获取这个单元的起始时间

func (SubUnit) GetEndTimeNumber

func (s SubUnit) GetEndTimeNumber(realOrOffsetTime bool) float64

GetEndTimeNumber 获取这个单元的结束时间,单位是秒

func (SubUnit) GetExpandRangeIndex

func (s SubUnit) GetExpandRangeIndex(expandTimeRange float64) (int, int)

GetExpandRangeIndex 导出扩展的起始时间和结束的时间,整个多出的参数只适用于整体的字幕范围,局部不试用 以当前的 VAD 信息为基准,正负 expandTimeRange(秒为单位) 来生成截取的片段时间轴信息 向左偏移的时候是可知有多少可以移动的,越界就置为 0 向右移动的时候,总长度是未知的,所以返回的值需要在外部重新 Check 是否会越界

func (SubUnit) GetFFMPEGCutRangeString

func (s SubUnit) GetFFMPEGCutRangeString(expandTimeRange float64) (string, string, time.Time, float64)

GetFFMPEGCutRangeString 这里会生成导出 FFMPEG 的参数字段,起始时间和结束的时间长度 以当前的 VAD 信息为基准,正负 expandTimeRange(秒为单位) 来生成截取的片段时间轴信息

func (SubUnit) GetIndexTime

func (s SubUnit) GetIndexTime(index int, realOrOffsetTime bool) (bool, time.Time)

GetIndexTime 当前 OffsetIndex 的时间

func (SubUnit) GetIndexTimeNumber

func (s SubUnit) GetIndexTimeNumber(index int, realOrOffsetTime bool) (bool, float64)

GetIndexTimeNumber 当前 OffsetIndex 的时间

func (SubUnit) GetOffsetTimeNumber

func (s SubUnit) GetOffsetTimeNumber() float64

GetOffsetTimeNumber 偏移时间,单位是秒

func (SubUnit) GetStartTime

func (s SubUnit) GetStartTime(realOrOffsetTime bool) time.Time

GetStartTime 获取这个单元的起始时间

func (SubUnit) GetStartTimeNumber

func (s SubUnit) GetStartTimeNumber(realOrOffsetTime bool) float64

GetStartTimeNumber 获取这个单元的起始时间,单位是秒

func (SubUnit) GetTimelineRange

func (s SubUnit) GetTimelineRange() float64

GetTimelineRange 开始到结束的时间长度,单位是秒

func (*SubUnit) GetVADByteSlice

func (s *SubUnit) GetVADByteSlice() []byte

GetVADByteSlice 获取 VAD 的 byte 数组信息

func (*SubUnit) GetVADFloatSlice

func (s *SubUnit) GetVADFloatSlice() []float64

GetVADFloatSlice 获取 VAD 的 float64 数组信息

func (SubUnit) RealTimeToOffsetTime

func (s SubUnit) RealTimeToOffsetTime(realTime time.Time) time.Time

RealTimeToOffsetTime 真实时间转偏移时间

func (SubUnit) Save2Txt

func (s SubUnit) Save2Txt(outFileFPath string, oneLine bool) error

Save2Txt 导出为 float64 的内容

func (*SubUnit) SetBaseTime

func (s *SubUnit) SetBaseTime(setBaseTime time.Time)

SetBaseTime 设置基准时间

func (*SubUnit) SetOffsetEndTime

func (s *SubUnit) SetOffsetEndTime(realEndTime time.Time)

func (*SubUnit) SetOffsetStartTime

func (s *SubUnit) SetOffsetStartTime(realStartTime time.Time)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL