diff --git a/dsSupport/Utils/ConvertUtil/ConvertUtil.go b/dsSupport/Utils/ConvertUtil/ConvertUtil.go index 81aa2297..1b2d3cfe 100644 --- a/dsSupport/Utils/ConvertUtil/ConvertUtil.go +++ b/dsSupport/Utils/ConvertUtil/ConvertUtil.go @@ -60,10 +60,11 @@ func Cut(source string) { //2、获取文件后缀 extension := path.Ext(source) //3、输出的文件通配名称 - targetPath := getPath(source,CutPath) + source[0:36] + `_%03d` + extension + targetPath := getPath(source, CutPath) + source[0:36] + `_%03d` + extension //4、切片 - cmdLine := ffmpeg + ` -fflags +genpts -i ` + sourcePath + ` -acodec copy -vcodec copy -f segment -segment_time 300 -reset_timestamps 1 -map 0:0 -map 0:1 ` + targetPath - ShellUtil.ExecCommand(cmdLine) + ShellUtil.Exec(ffmpeg, `-fflags`, `+genpts`, `-i`, sourcePath, + `-acodec`, `copy`, `-vcodec`, `copy`, `-f`, `segment`, `-segment_time`, + `300`, `-reset_timestamps`, `1`, `-map`, `0:0`, `-map`, `0:1`, targetPath) } /** @@ -72,13 +73,13 @@ func Cut(source string) { 时间:2020-07-08 */ func GetAllCutChild(source string) []string { - filepathNames, err := filepath.Glob(filepath.Join(getPath(source,CutPath), "*")) + filepathNames, err := filepath.Glob(filepath.Join(getPath(source, CutPath), "*")) if err != nil { fmt.Println(err.Error()) } resultArray := make([]string, 0) for i := range filepathNames { - resultArray = append(resultArray, filepathNames[i]) + resultArray = append(resultArray, filepathNames[i]) } return resultArray } @@ -91,8 +92,8 @@ func GetAllCutChild(source string) []string { func ConvertToH264Mp4(childMovie string) { extension := path.Ext(childMovie) childMovieMp4 := strings.Replace(filepath.Base(childMovie), extension, ".mp4", -1) - cmdLine := ffmpeg + ` -i ` + childMovie + ` -c:v libx264 -strict -2 ` + getPath(childMovie,Mp4Path)+childMovieMp4 - ShellUtil.ExecCommand(cmdLine) + ShellUtil.Exec(ffmpeg, `-i`, childMovie, `-c:v`, `libx264`, `-strict`, `-2`, + getPath(childMovieMp4, Mp4Path)+childMovieMp4) } /** @@ -128,8 +129,7 @@ func Merge(source string, indexName string) { if !FileUtil.Exists(Target) { os.Mkdir(Target, os.ModePerm) } - cmdLine := ffmpeg + ` -f concat -i ` + indexName + ` -c copy ` + Target + "/" + source[0:36] + ".mp4" - ShellUtil.ExecCommand(cmdLine) + ShellUtil.Exec(ffmpeg, `-f`, `concat`, `-i`, indexName, `-c`, `copy`, Target+"/"+source[0:36]+".mp4") } /** diff --git a/dsSupport/Utils/ShellUtil/ShellUtil.go b/dsSupport/Utils/ShellUtil/ShellUtil.go index 419f2da1..4c2f2847 100644 --- a/dsSupport/Utils/ShellUtil/ShellUtil.go +++ b/dsSupport/Utils/ShellUtil/ShellUtil.go @@ -1,26 +1,67 @@ package ShellUtil import ( + "bufio" "bytes" - "fmt" + "errors" + "log" "os/exec" ) -//封装一个函数来执行命令 -func ExecCommand(cmdLine string) { - cmd := exec.Command("cmd.exe", "/c", cmdLine) - err := cmd.Run() +// +////封装一个函数来执行命令 +//func ExecCommand(cmdLine string) { +// cmd := exec.Command("cmd.exe", "/c", cmdLine) +// err := cmd.Run() +// +// var out bytes.Buffer +// var stderr bytes.Buffer +// cmd.Stdout = &out +// cmd.Stderr = &stderr +// if err := cmd.Run(); err != nil { +// fmt.Println(fmt.Sprint(err) + ": " + stderr.String()) +// } +// fmt.Println("Result: " + out.String()) +// +// cmd.Wait() +// fmt.Printf("%s, error:%v \n", cmdLine, err) +//} - var out bytes.Buffer - var stderr bytes.Buffer - cmd.Stdout = &out - cmd.Stderr = &stderr - if err := cmd.Run(); err != nil { - fmt.Println(fmt.Sprint(err) + ": " + stderr.String()) - } - fmt.Println("Result: " + out.String()) +/** +功能:带回显的执行DOS命令 +作者:黄海 +时间:2020-05-18 +*/ +func Exec(name string, args ...string) error { + cmd := exec.Command(name, args...) + stderr, _ := cmd.StderrPipe() + stdout, _ := cmd.StdoutPipe() + if err := cmd.Start(); err != nil { + log.Println("exec the cmd ", name, " failed") + return err + } + // 正常日志 + logScan := bufio.NewScanner(stdout) + go func() { + for logScan.Scan() { + log.Println(logScan.Text()) + } + }() + // 错误日志 + errBuf := bytes.NewBufferString("") + scan := bufio.NewScanner(stderr) + for scan.Scan() { + s := scan.Text() + log.Println("", s) + errBuf.WriteString(s) + errBuf.WriteString("\n") + } + // 等待命令执行完 cmd.Wait() - fmt.Printf("%s, error:%v \n", cmdLine, err) + if !cmd.ProcessState.Success() { + // 执行失败,返回错误信息 + return errors.New(errBuf.String()) + } + return nil } - diff --git a/dsSupport/Working/B7/B7318F5D-46B8-4AA1-8811-1A9D65528E19/Mp4/B7318F5D-46B8-4AA1-8811-1A9D65528E19_000.mp4 b/dsSupport/Working/B7/B7318F5D-46B8-4AA1-8811-1A9D65528E19/Mp4/B7318F5D-46B8-4AA1-8811-1A9D65528E19_000.mp4 new file mode 100644 index 00000000..2f1ed376 Binary files /dev/null and b/dsSupport/Working/B7/B7318F5D-46B8-4AA1-8811-1A9D65528E19/Mp4/B7318F5D-46B8-4AA1-8811-1A9D65528E19_000.mp4 differ