diff options
Diffstat (limited to 'mkvtool')
| -rw-r--r-- | mkvtool/go.mod | 3 | ||||
| -rw-r--r-- | mkvtool/main.go | 157 | ||||
| -rw-r--r-- | mkvtool/title.go | 9 | ||||
| -rw-r--r-- | mkvtool/title_windows.go | 22 |
4 files changed, 191 insertions, 0 deletions
diff --git a/mkvtool/go.mod b/mkvtool/go.mod new file mode 100644 index 0000000..e1ff7fd --- /dev/null +++ b/mkvtool/go.mod @@ -0,0 +1,3 @@ +module github.com/KurenaiRyu/MkvAutoSubset/mkvtool + +go 1.17
\ No newline at end of file diff --git a/mkvtool/main.go b/mkvtool/main.go new file mode 100644 index 0000000..124e5a1 --- /dev/null +++ b/mkvtool/main.go @@ -0,0 +1,157 @@ +package main + +import ( + "flag" + "fmt" + "github.com/KurenaiRyu/MkvAutoSubset/mkvlib" + "log" + "os" + "path" + "runtime" + "strings" +) + +const appName = "MKV Tool" +const appVer = "v3.1.3" +const tTitle = appName + " " + appVer + +var processer = mkvlib.GetInstance() + +var appFN = fmt.Sprintf("%s %s %s/%s", appName, appVer, runtime.GOOS, runtime.GOARCH) + +type arrayArg []string + +func (self *arrayArg) String() string { + return fmt.Sprintf("%v", []string(*self)) +} + +func (self *arrayArg) Set(value string) error { + *self = append(*self, value) + return nil +} + +func main() { + setWindowTitle(tTitle) + s := "" + data := "" + dist := "" + f := "" + c := false + d := false + m := false + n := false + q := false + v := false + clean := false + ans := false + sl, st := "", "" + af, ao := "", "" + asses := new(arrayArg) + flag.StringVar(&s, "s", "", "Source folder.") + flag.StringVar(&f, "f", "", "MKV file. (join single mode)") + flag.BoolVar(&c, "c", false, "Create mode.") + flag.BoolVar(&d, "d", false, "Dump mode.") + flag.BoolVar(&m, "m", false, "Make mode.") + flag.BoolVar(&q, "q", false, "Query mode.") + flag.Var(asses, "a", "ASS files. (multiple & join ass mode)") + flag.BoolVar(&n, "n", false, "Not do ass font subset. (dump mode only)") + flag.BoolVar(&clean, "clean", false, "Clean original file subtitles and fonts. (create mode only)") + flag.StringVar(&sl, "sl", "chi", "Subtitle language. (create & make mode only)") + flag.StringVar(&st, "st", "", "Subtitle title. (create & make mode only)") + flag.StringVar(&af, "af", "", "ASS fonts folder. (ass mode only)") + flag.StringVar(&ao, "ao", "", "ASS output folder. (ass mode only)") + flag.BoolVar(&ans, "ans", false, `ASS output not to the new "subseted" folder. (ass mode only)`) + flag.StringVar(&data, "data", "data", "Subtitles & Fonts folder (dump & make mode only)") + flag.StringVar(&dist, "dist", "dist", "Results output folder (make mode only)") + + flag.BoolVar(&v, "v", false, "Show app info.") + flag.Parse() + + ec := 0 + if v { + fmt.Println(appFN + " (powered by " + mkvlib.LibFName + ")") + return + } + + if processer == nil { + ec++ + return + } + + if len(*asses) > 0 { + if !processer.ASSFontSubset(*asses, af, ao, !ans) { + ec++ + } + return + } + if f != "" { + if d { + if !processer.DumpMKV(f, data, !n) { + ec++ + } + return + } + if q { + r, err := processer.CheckSubset(f) + if err { + ec++ + } else { + log.Printf("Need font subset: %v", !r) + } + return + + } + } + if s != "" { + if q { + lines := processer.QueryFolder(s) + if len(lines) > 0 { + log.Printf("Has item(s).") + data := []byte(strings.Join(lines, "\n")) + if os.WriteFile("list.txt", data, os.ModePerm) != nil { + log.Printf("Faild to write the result file") + ec++ + } + } else { + log.Printf("No item.") + } + return + } + if c { + v := path.Join(s, "v") + s := path.Join(s, "s") + f := path.Join(s, "f") + o := path.Join(s, "o") + if !processer.CreateMKVs(v, s, f, "", o, sl, st, clean) { + ec++ + } + return + } + if d { + if !processer.DumpMKVs(s, data, !n) { + ec++ + } + return + } + if m { + if !processer.MakeMKVs(s, data, dist, sl, st) { + ec++ + } + return + } + if !processer.DumpMKVs(s, data, true) { + ec++ + } else if !processer.MakeMKVs(s, data, dist, sl, st) { + ec++ + } + return + } else { + ec++ + flag.PrintDefaults() + } + defer os.Exit(ec) +} + +func init() { + runtime.GOMAXPROCS(runtime.NumCPU()) +} diff --git a/mkvtool/title.go b/mkvtool/title.go new file mode 100644 index 0000000..b49043d --- /dev/null +++ b/mkvtool/title.go @@ -0,0 +1,9 @@ +//go:build linux + +package main + +import "fmt" + +func setWindowTitle(title string) { + fmt.Printf("\033]0;%s\007", title) +} diff --git a/mkvtool/title_windows.go b/mkvtool/title_windows.go new file mode 100644 index 0000000..b53fe23 --- /dev/null +++ b/mkvtool/title_windows.go @@ -0,0 +1,22 @@ +//go:build windows + +package main + +import ( + "syscall" + "unsafe" +) + +func setWindowTitle(title string) { + kernel32, err := syscall.LoadLibrary("kernel32.dll") + if err == nil { + defer syscall.FreeLibrary(kernel32) + setConsoleTitle, err := syscall.GetProcAddress(kernel32, "SetConsoleTitleW") + if err == nil { + ptr, err := syscall.UTF16PtrFromString(title) + if err == nil { + syscall.Syscall(setConsoleTitle, 1, uintptr(unsafe.Pointer(ptr)), 0, 0) + } + } + } +} |
