summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorb5f0d6c3 <[email protected]>2022-04-27 23:33:39 +0800
committerb5f0d6c3 <[email protected]>2022-04-27 23:33:39 +0800
commit1927ddd43cad6fd528f8644ffa6efb760c8091dd (patch)
treee5d14973b8cd31815072d401dd549f2424fa494a
parent3eb107af46f9e4ca0448c9fdff41931ad84cae41 (diff)
update mkvlib:ass2pgs use ass2bdnxml
-rw-r--r--mkvlib/ass2pgs.go32
-rw-r--r--mkvlib/ass2pgs_windows.go68
-rw-r--r--mkvlib/mkv.go22
-rw-r--r--mkvlib/shared.go11
4 files changed, 44 insertions, 89 deletions
diff --git a/mkvlib/ass2pgs.go b/mkvlib/ass2pgs.go
index 08ea305..fd5b438 100644
--- a/mkvlib/ass2pgs.go
+++ b/mkvlib/ass2pgs.go
@@ -1,8 +1,30 @@
-//go:build !windows || (windows && !amd64)
-
package mkvlib
-func ass2Pgs(input []string, resolution, frameRate int, fontsDir string, output string, lcb logCallback) bool {
- printLog(lcb, "Only work in win64.")
- return false
+import (
+ "fmt"
+ "path"
+)
+
+func ass2Pgs(input []string, resolution, frameRate, fontsDir, output string, lcb logCallback) bool {
+ r := false
+ for _, item := range input {
+ _, _, _, _f := splitPath(item)
+ fn := path.Join(output, _f+".pgs")
+ args := make([]string, 0)
+ args = append(args, "-a1", "-p1")
+ args = append(args, "-z0", "-u0", "-b0")
+ args = append(args, "-g", fontsDir)
+ args = append(args, "-v", resolution)
+ args = append(args, "-f", frameRate)
+ args = append(args, "-o", fn)
+ args = append(args, item)
+ if p, err := newProcess(nil, nil, nil, "", ass2bdnxml, args...); err == nil {
+ s, err := p.Wait()
+ r = err == nil && s.ExitCode() == 0
+ if !r {
+ printLog(lcb, fmt.Sprintf(`Failed to Ass2Pgs:"%s"`, item))
+ }
+ }
+ }
+ return r
}
diff --git a/mkvlib/ass2pgs_windows.go b/mkvlib/ass2pgs_windows.go
deleted file mode 100644
index 8068e31..0000000
--- a/mkvlib/ass2pgs_windows.go
+++ /dev/null
@@ -1,68 +0,0 @@
-//go:build windows && amd64
-
-package mkvlib
-
-import (
- "fmt"
- "path"
- "strconv"
- "syscall"
- "unsafe"
-)
-
-func ass2Pgs(input []string, resolution, frameRate int, fontsDir string, output string, lcb logCallback) bool {
- fonts := findFonts(fontsDir)
- r := addFontResource(fonts, lcb)
- if r {
- for _, item := range input {
- _, _, _, _f := splitPath(item)
- fn := path.Join(output, _f+".pgs")
- args := make([]string, 0)
- args = append(args, "-x0")
- args = append(args, "-v144")
- args = append(args, "-s", strconv.Itoa(resolution))
- args = append(args, "-r", strconv.Itoa(frameRate))
- args = append(args, "-i", item)
- args = append(args, fn)
- if p, err := newProcess(nil, nil, nil, "", spp2pgs, args...); err == nil {
- s, err := p.Wait()
- r = err == nil && s.ExitCode() == 1
- if !r {
- printLog(lcb, fmt.Sprintf(`Failed to Ass2Pgs:"%s"`, item))
- }
- }
- }
- }
- removeFontResource(fonts, lcb)
- return r
-}
-
-var gdi32 = syscall.NewLazyDLL("gdi32.dll")
-var addFontResourceW = gdi32.NewProc("AddFontResourceW")
-var removeFontResourceW = gdi32.NewProc("RemoveFontResourceW")
-
-func addFontResource(fonts []string, lcb logCallback) bool {
- ec := 0
- for _, item := range fonts {
- p, _ := syscall.UTF16FromString(item)
- r, _, _ := addFontResourceW.Call(uintptr(unsafe.Pointer(&p[0])))
- if r == 0 {
- printLog(lcb, fmt.Sprintf(`Failed to load font:"%s"`, item))
- ec++
- }
- }
- return ec == 0
-}
-
-func removeFontResource(fonts []string, lcb logCallback) bool {
- ec := 0
- for _, item := range fonts {
- p, _ := syscall.UTF16FromString(item)
- r, _, _ := removeFontResourceW.Call(uintptr(unsafe.Pointer(&p[0])))
- if r == 0 {
- printLog(lcb, fmt.Sprintf(`Failed to unload font:"%s"`, item))
- ec++
- }
- }
- return ec == 0
-}
diff --git a/mkvlib/mkv.go b/mkvlib/mkv.go
index af04ce3..e195722 100644
--- a/mkvlib/mkv.go
+++ b/mkvlib/mkv.go
@@ -7,14 +7,13 @@ import (
"os"
"path"
"regexp"
- "runtime"
"strings"
)
const (
mkvmerge = `mkvmerge`
mkvextract = `mkvextract`
- spp2pgs = `spp2pgs`
+ ass2bdnxml = `ass2bdnxml`
)
type mkvInfo struct {
@@ -36,12 +35,13 @@ type mkvInfo struct {
}
type mkvProcessor struct {
- a2p bool
- apc bool
- mks bool
- pr int
- pf int
- cache string
+ a2p bool
+ apc bool
+ mks bool
+ pr string
+ pf string
+ cache string
+ ass2bdnxml bool
}
func (self *mkvProcessor) GetMKVInfo(file string) *mkvInfo {
@@ -327,14 +327,14 @@ func (self *mkvProcessor) ASSFontSubset(files []string, fonts, output string, di
return r
}
-func (self *mkvProcessor) A2P(a2p, apc bool, pr, pf int) {
- self.a2p = runtime.GOOS == "windows" && runtime.GOARCH == "amd64" && a2p
+func (self *mkvProcessor) A2P(a2p, apc bool, pr, pf string) {
+ self.a2p = self.ass2bdnxml && a2p
self.apc = apc
self.pr = pr
self.pf = pf
}
-func (self *mkvProcessor) ass2Pgs(input []string, resolution, frameRate int, fontsDir string, output string, lcb logCallback) bool {
+func (self *mkvProcessor) ass2Pgs(input []string, resolution, frameRate, fontsDir, output string, lcb logCallback) bool {
return self.a2p && ass2Pgs(input, resolution, frameRate, fontsDir, output, lcb)
}
diff --git a/mkvlib/shared.go b/mkvlib/shared.go
index 71e47d0..7d136da 100644
--- a/mkvlib/shared.go
+++ b/mkvlib/shared.go
@@ -11,7 +11,7 @@ import (
)
const libName = "mkvlib"
-const libVer = "v1.5.4"
+const libVer = "v1.5.5"
const LibFName = libName + " " + libVer
@@ -51,7 +51,7 @@ func (self *processorGetter) InitProcessorInstance(lcb logCallback) bool {
_, _pyftsubset := exec.LookPath(pyftsubset)
_, _mkvextract := exec.LookPath(mkvextract)
_, _mkvmerge := exec.LookPath(mkvmerge)
- _, _spp2pgs := exec.LookPath(spp2pgs)
+ _, _ass2bdnxml := exec.LookPath(ass2bdnxml)
if _ttx != nil || _pyftsubset != nil {
printLog(lcb, `Missing dependency: fonttools (need "%s" & "%s").`, ttx, pyftsubset)
ec++
@@ -61,15 +61,16 @@ func (self *processorGetter) InitProcessorInstance(lcb logCallback) bool {
ec++
}
- if runtime.GOOS == "windows" && runtime.GOARCH == "amd64" && _spp2pgs != nil {
- printLog(lcb, `Missing dependency: spp2pgs.`)
- ec++
+ if _ass2bdnxml != nil {
+ printLog(lcb, `Missing dependency: ass2bdnxml.`)
+ //ec++
}
r := ec == 0
if r {
self.checked = true
self.instance = new(mkvProcessor)
+ self.instance.ass2bdnxml = _ass2bdnxml == nil
}
return r