| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- package TestCode
- import (
- "fmt"
- "os"
- "path/filepath"
- "github.com/allanpk716/ChineseSubFinder/pkg/types/subparser"
- "github.com/huandu/go-clone"
- "github.com/xuri/excelize/v2"
- "github.com/allanpk716/ChineseSubFinder/pkg/log_helper"
- "github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_parser/ass"
- "github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_parser/srt"
- "github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_timeline_fixer"
- "github.com/allanpk716/ChineseSubFinder/pkg/settings"
- "github.com/allanpk716/ChineseSubFinder/pkg/sub_parser_hub"
- "github.com/allanpk716/ChineseSubFinder/pkg/vad"
- )
- func statistics_subs_score_one(baseAudioFileFPath, baseSubFileFPath, srcSubFileFPath string) {
- audioVADInfos, err := vad.GetVADInfoFromAudio(vad.AudioInfo{
- FileFullPath: baseAudioFileFPath,
- SampleRate: 16000,
- BitDepth: 16,
- }, true)
- if err != nil {
- return
- }
- subParserHub := sub_parser_hub.NewSubParserHub(
- log_helper.GetLogger4Tester(),
- ass.NewParser(log_helper.GetLogger4Tester()),
- srt.NewParser(log_helper.GetLogger4Tester()),
- )
- bFind, infoBase, err := subParserHub.DetermineFileTypeFromFile(baseSubFileFPath)
- if err != nil {
- return
- }
- if bFind == false {
- return
- }
- bFind, srcBase, err := subParserHub.DetermineFileTypeFromFile(srcSubFileFPath)
- if err != nil {
- return
- }
- if bFind == false {
- return
- }
- s := sub_timeline_fixer.NewSubTimelineFixerHelperEx(log_helper.GetLogger4Tester(), *settings.NewTimelineFixerSettings())
- // path X:\电影\21座桥 (2019)\21座桥 (2019) 720p AAC.chinese(简,subhd).ass
- // 音频处理
- cloneSrcBase := clone.Clone(srcBase).(*subparser.FileInfo)
- bok, _, pipeResultAudio, err := s.ProcessByAudioVAD(audioVADInfos, cloneSrcBase)
- if err != nil {
- return
- }
- if bok == false {
- return
- }
- // 字幕处理
- cloneSrcBase = clone.Clone(srcBase).(*subparser.FileInfo)
- bok, _, pipeResultSub, err := s.ProcessBySubFileInfo(infoBase, cloneSrcBase)
- if err != nil {
- return
- }
- if bok == false {
- return
- }
- println(fmt.Sprintf("Audio Score: %f Offset:%f\n", pipeResultAudio.Score, pipeResultAudio.GetOffsetTime()))
- println(fmt.Sprintf("Sub Score: %f Offset:%f\n", pipeResultSub.Score, pipeResultSub.GetOffsetTime()))
- }
- func statistics_subs_score(baseAudioFileFPath, baseSubFileFPath, subSearchRootPath string) {
- f := excelize.NewFile()
- // Create a new sheet.
- sheetName := filepath.Base(subSearchRootPath)
- newSheet := f.NewSheet(sheetName)
- err := f.SetCellValue(sheetName, fmt.Sprintf("A%d", 1), "SubFPath")
- if err != nil {
- return
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("B%d", 1), "AudioScore")
- if err != nil {
- return
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("C%d", 1), "AudioOffset")
- if err != nil {
- return
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("D%d", 1), "SubScore")
- if err != nil {
- return
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("E%d", 1), "SubOffset")
- if err != nil {
- return
- }
- audioVADInfos, err := vad.GetVADInfoFromAudio(vad.AudioInfo{
- FileFullPath: baseAudioFileFPath,
- SampleRate: 16000,
- BitDepth: 16,
- }, true)
- if err != nil {
- return
- }
- subParserHub := sub_parser_hub.NewSubParserHub(
- log_helper.GetLogger4Tester(),
- ass.NewParser(log_helper.GetLogger4Tester()),
- srt.NewParser(log_helper.GetLogger4Tester()),
- )
- bFind, infoBase, err := subParserHub.DetermineFileTypeFromFile(baseSubFileFPath)
- if err != nil {
- return
- }
- if bFind == false {
- return
- }
- subCounter := 1
- err = filepath.Walk(subSearchRootPath,
- func(path string, info os.FileInfo, err error) error {
- if err != nil {
- return err
- }
- if info.IsDir() == true {
- return nil
- }
- if sub_parser_hub.IsSubExtWanted(info.Name()) == false {
- return nil
- }
- bFind, srcBase, err := subParserHub.DetermineFileTypeFromFile(path)
- if err != nil {
- return nil
- }
- if bFind == false {
- return nil
- }
- s := sub_timeline_fixer.NewSubTimelineFixerHelperEx(log_helper.GetLogger4Tester(), *settings.NewTimelineFixerSettings())
- // path X:\电影\21座桥 (2019)\21座桥 (2019) 720p AAC.chinese(简,subhd).ass
- // 音频处理
- cloneSrcBase := clone.Clone(srcBase).(*subparser.FileInfo)
- bok, _, pipeResultAudio, err := s.ProcessByAudioVAD(audioVADInfos, cloneSrcBase)
- if err != nil {
- return nil
- }
- if bok == false {
- return nil
- }
- // 字幕处理
- cloneSrcBase = clone.Clone(srcBase).(*subparser.FileInfo)
- bok, _, pipeResultSub, err := s.ProcessBySubFileInfo(infoBase, cloneSrcBase)
- if err != nil {
- return nil
- }
- if bok == false {
- return nil
- }
- subCounter++
- err = f.SetCellValue(sheetName, fmt.Sprintf("A%d", subCounter+1), info.Name())
- if err != nil {
- return nil
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("B%d", subCounter+1), pipeResultAudio.Score)
- if err != nil {
- return nil
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("C%d", subCounter+1), pipeResultAudio.GetOffsetTime())
- if err != nil {
- return nil
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("D%d", subCounter+1), pipeResultSub.Score)
- if err != nil {
- return nil
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("E%d", subCounter+1), pipeResultSub.GetOffsetTime())
- if err != nil {
- return nil
- }
- fmt.Println(subCounter, path, info.Size())
- return nil
- })
- if err != nil {
- fmt.Println("Walk", err)
- return
- }
- f.SetActiveSheet(newSheet)
- err = f.SaveAs(fmt.Sprintf("%s.xlsx", filepath.Dir(baseSubFileFPath)))
- if err != nil {
- fmt.Println("SaveAs", err)
- return
- }
- }
- func statistics_subs_score_is_match(videoFPath, subSearchRootPath string) {
- log := log_helper.GetLogger4Tester()
- s := sub_timeline_fixer.NewSubTimelineFixerHelperEx(log, *settings.NewTimelineFixerSettings())
- bok, ffmpegInfo, audioVADInfos, infoBase, err := s.IsVideoCanExportSubtitleAndAudio(videoFPath)
- if err != nil {
- log.Errorln("IsVideoCanExportSubtitleAndAudio", err)
- return
- }
- if bok == false {
- log.Errorln("IsVideoCanExportSubtitleAndAudio", "bok == false")
- return
- }
- f := excelize.NewFile()
- // Create a new sheet.
- sheetName := filepath.Base(subSearchRootPath)
- newSheet := f.NewSheet(sheetName)
- err = f.SetCellValue(sheetName, fmt.Sprintf("A%d", 1), "SubFPath")
- if err != nil {
- log.Errorln("SetCellValue A Header", err)
- return
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("B%d", 1), "AudioScore")
- if err != nil {
- log.Errorln("SetCellValue B Header", err)
- return
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("C%d", 1), "AudioOffset")
- if err != nil {
- log.Errorln("SetCellValue C Header", err)
- return
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("D%d", 1), "SubScore")
- if err != nil {
- log.Errorln("SetCellValue D Header", err)
- return
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("E%d", 1), "SubOffset")
- if err != nil {
- log.Errorln("SetCellValue E Header", err)
- return
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("F%d", 1), "IsMatch")
- if err != nil {
- log.Errorln("SetCellValue F Header", err)
- return
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("G%d", 1), "VideoDuration")
- if err != nil {
- log.Errorln("SetCellValue G Header", err)
- return
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("H%d", 1), "TargetSubEndTime")
- if err != nil {
- log.Errorln("SetCellValue H Header", err)
- return
- }
- subCounter := 1
- err = filepath.Walk(subSearchRootPath,
- func(path string, info os.FileInfo, err error) error {
- if err != nil {
- return err
- }
- if info.IsDir() == true {
- return nil
- }
- if sub_parser_hub.IsSubExtWanted(info.Name()) == false {
- return nil
- }
- bok, matchResult, err := s.IsMatchBySubFile(ffmpegInfo, audioVADInfos, infoBase, path,
- sub_timeline_fixer.CompareConfig{
- MinScore: 40000,
- OffsetRange: 2,
- DialoguesDifferencePercentage: 0.1,
- })
- if err != nil {
- return nil
- }
- subCounter++
- err = f.SetCellValue(sheetName, fmt.Sprintf("A%d", subCounter+1), info.Name())
- if err != nil {
- log.Errorln("SetCellValue A", info.Name(), subCounter+1, err)
- return nil
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("B%d", subCounter+1), matchResult.AudioCompareScore)
- if err != nil {
- log.Errorln("SetCellValue B", info.Name(), subCounter+1, err)
- return nil
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("C%d", subCounter+1), matchResult.AudioCompareOffsetTime)
- if err != nil {
- log.Errorln("SetCellValue C", info.Name(), subCounter+1, err)
- return nil
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("D%d", subCounter+1), matchResult.SubCompareScore)
- if err != nil {
- log.Errorln("SetCellValue D", info.Name(), subCounter+1, err)
- return nil
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("E%d", subCounter+1), matchResult.SubCompareOffsetTime)
- if err != nil {
- log.Errorln("SetCellValue E", info.Name(), subCounter+1, err)
- return nil
- }
- iTrue := 0
- if bok == true {
- iTrue = 1
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("F%d", subCounter+1), iTrue)
- if err != nil {
- log.Errorln("SetCellValue F", info.Name(), subCounter+1, err)
- return nil
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("G%d", subCounter+1), matchResult.VideoDuration)
- if err != nil {
- log.Errorln("SetCellValue G", info.Name(), subCounter+1, err)
- return nil
- }
- err = f.SetCellValue(sheetName, fmt.Sprintf("H%d", subCounter+1), matchResult.TargetSubEndTime)
- if err != nil {
- log.Errorln("SetCellValue H", info.Name(), subCounter+1, err)
- return nil
- }
- log.Infoln(subCounter, path, info.Size())
- return nil
- })
- if err != nil {
- log.Errorln("Walk", err)
- return
- }
- f.SetActiveSheet(newSheet)
- err = f.SaveAs(fmt.Sprintf("%s.xlsx", filepath.Base(videoFPath)))
- if err != nil {
- log.Errorln("SaveAs", err)
- return
- }
- log.Infoln("Done")
- }
|