|
|
|
@ -18,8 +18,35 @@ var ffmpeg string
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
runDir, _ = os.Getwd()
|
|
|
|
|
ffmpeg = runDir + `\ffmpeg\ffmpeg.exe`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const CutPath = "Cut/"
|
|
|
|
|
const Mp4Path = "Mp4/"
|
|
|
|
|
const IndexPath = "Index/"
|
|
|
|
|
const AllPath = "/"
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
功能:获取指定源文件的不同工作目录
|
|
|
|
|
作者:黄海
|
|
|
|
|
时间:2020-07-09
|
|
|
|
|
*/
|
|
|
|
|
func getPath(source string, p string) string {
|
|
|
|
|
return runDir + `/Working/` + source[0:2] + "/" + source[0:36] + "/" + p
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ffmpeg=runDir + `\ffmpeg\ffmpeg.exe`
|
|
|
|
|
/**
|
|
|
|
|
功能:初始化目录
|
|
|
|
|
作者:黄海
|
|
|
|
|
时间:2020-07-09
|
|
|
|
|
*/
|
|
|
|
|
func InitDir(source string) {
|
|
|
|
|
//1、删除旧目录
|
|
|
|
|
os.RemoveAll(getPath(source, AllPath))
|
|
|
|
|
//2、创建新目录
|
|
|
|
|
os.MkdirAll(getPath(source, CutPath), os.ModePerm)
|
|
|
|
|
os.Mkdir(getPath(source, Mp4Path), os.ModePerm)
|
|
|
|
|
os.Mkdir(getPath(source, IndexPath), os.ModePerm)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -33,27 +60,7 @@ func Cut(source string) {
|
|
|
|
|
//2、获取文件后缀
|
|
|
|
|
extension := path.Ext(source)
|
|
|
|
|
//3、输出的文件通配名称
|
|
|
|
|
workingPath := runDir + `/Working/` + source[0:2] + "/"
|
|
|
|
|
if !FileUtil.Exists(workingPath) {
|
|
|
|
|
os.Mkdir(workingPath, os.ModePerm)
|
|
|
|
|
}
|
|
|
|
|
workingPath = workingPath + source[0:36] + "/"
|
|
|
|
|
if !FileUtil.Exists(workingPath) {
|
|
|
|
|
os.Mkdir(workingPath, os.ModePerm)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
targetPath := workingPath + source[0:36] + `_%03d` + extension
|
|
|
|
|
//尝试删除已存在的视频
|
|
|
|
|
var i = 0
|
|
|
|
|
for {
|
|
|
|
|
var f = workingPath + source[0:36] + "_" + fmt.Sprintf("%03d", i) + extension
|
|
|
|
|
if FileUtil.Exists(f) {
|
|
|
|
|
os.Remove(f)
|
|
|
|
|
} else {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
i++
|
|
|
|
|
}
|
|
|
|
|
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)
|
|
|
|
@ -65,15 +72,13 @@ func Cut(source string) {
|
|
|
|
|
时间:2020-07-08
|
|
|
|
|
*/
|
|
|
|
|
func GetAllCutChild(source string) []string {
|
|
|
|
|
filepathNames, err := filepath.Glob(filepath.Join(runDir+`/Working/`+source[0:2]+"/"+source[0:36]+"/", "*"))
|
|
|
|
|
if err!=nil{
|
|
|
|
|
filepathNames, err := filepath.Glob(filepath.Join(getPath(source,CutPath), "*"))
|
|
|
|
|
if err != nil {
|
|
|
|
|
fmt.Println(err.Error())
|
|
|
|
|
}
|
|
|
|
|
resultArray:=make([]string,0)
|
|
|
|
|
resultArray := make([]string, 0)
|
|
|
|
|
for i := range filepathNames {
|
|
|
|
|
if strings.Index(filepathNames[i],"_")>=0{
|
|
|
|
|
resultArray= append(resultArray, filepathNames[i])
|
|
|
|
|
}
|
|
|
|
|
resultArray = append(resultArray, filepathNames[i])
|
|
|
|
|
}
|
|
|
|
|
return resultArray
|
|
|
|
|
}
|
|
|
|
@ -85,38 +90,36 @@ func GetAllCutChild(source string) []string {
|
|
|
|
|
*/
|
|
|
|
|
func ConvertToH264Mp4(childMovie string) {
|
|
|
|
|
extension := path.Ext(childMovie)
|
|
|
|
|
childMovieMp4 := strings.Replace(childMovie, extension, ".mp4", -1)
|
|
|
|
|
//如果存在则删除之
|
|
|
|
|
if FileUtil.Exists(childMovieMp4) {
|
|
|
|
|
os.Remove(childMovieMp4)
|
|
|
|
|
}
|
|
|
|
|
cmdLine := ffmpeg + ` -i ` + childMovie + ` -c:v libx264 -strict -2 ` + childMovieMp4
|
|
|
|
|
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)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
功能:生成索引的文本文件
|
|
|
|
|
作者:黄海
|
|
|
|
|
时间:2020-07-08
|
|
|
|
|
*/
|
|
|
|
|
func GenerateIndexTxt(source string,childMovie []string)string{
|
|
|
|
|
content:=make([]string,0)
|
|
|
|
|
func GenerateIndexTxt(source string, childMovie []string) string {
|
|
|
|
|
content := make([]string, 0)
|
|
|
|
|
for i := range childMovie {
|
|
|
|
|
extension := path.Ext(childMovie[i])
|
|
|
|
|
fullFilename:=strings.Replace(childMovie[i],extension,".mp4",-1)
|
|
|
|
|
fullFilename := strings.Replace(childMovie[i], extension, ".mp4", -1)
|
|
|
|
|
filenameWithSuffix := filepath.Base(fullFilename) //获取文件名带后缀
|
|
|
|
|
content= append(content, `file '`+filenameWithSuffix+`'`)
|
|
|
|
|
content = append(content, `file '`+filenameWithSuffix+`'`)
|
|
|
|
|
}
|
|
|
|
|
//文件位置
|
|
|
|
|
indexName:=runDir+`/Working/`+source[0:2]+"/"+source[0:36]+"/"+source[0:36]+".txt"
|
|
|
|
|
FileUtil.WriteLines(content,indexName)
|
|
|
|
|
indexName := runDir + `/Working/` + source[0:2] + "/" + source[0:36] + "/" + source[0:36] + ".txt"
|
|
|
|
|
FileUtil.WriteLines(content, indexName)
|
|
|
|
|
return indexName
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
功能:合并视频
|
|
|
|
|
作者:黄海
|
|
|
|
|
时间:2020-07-08
|
|
|
|
|
*/
|
|
|
|
|
func Merge(source string,indexName string){
|
|
|
|
|
*/
|
|
|
|
|
func Merge(source string, indexName string) {
|
|
|
|
|
Target := runDir + `/Target/` + source[0:2] + "/"
|
|
|
|
|
if !FileUtil.Exists(Target) {
|
|
|
|
|
os.Mkdir(Target, os.ModePerm)
|
|
|
|
@ -125,7 +128,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"
|
|
|
|
|
cmdLine := ffmpeg + ` -f concat -i ` + indexName + ` -c copy ` + Target + "/" + source[0:36] + ".mp4"
|
|
|
|
|
ShellUtil.ExecCommand(cmdLine)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -133,11 +136,11 @@ func Merge(source string,indexName string){
|
|
|
|
|
功能:清除垃圾
|
|
|
|
|
作者:黄海
|
|
|
|
|
时间:2020-07-08
|
|
|
|
|
*/
|
|
|
|
|
func ClearRubbish(source string){
|
|
|
|
|
var deletePath=[]string{"Working","Target"}
|
|
|
|
|
*/
|
|
|
|
|
func ClearRubbish(source string) {
|
|
|
|
|
var deletePath = []string{"Working", "Target"}
|
|
|
|
|
for i := range deletePath {
|
|
|
|
|
//删除目录
|
|
|
|
|
os.RemoveAll(runDir+`/`+deletePath[i]+`/`+source[0:2]+"/"+source[0:36])
|
|
|
|
|
os.RemoveAll(runDir + `/` + deletePath[i] + `/` + source[0:2] + "/" + source[0:36])
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|