master
huanghai 5 years ago
parent f372f21272
commit c45b12014b

@ -7,17 +7,19 @@ import (
func main() { func main() {
//源文件 //源文件
source := "B7318F5D-46B8-4AA1-8811-1A9D65528E19.wmv" source := "B7318F5D-46B8-4AA1-8811-1A9D65528E19.wmv"
//1、对视频文件进行切片 //1、目录实始化
ConvertUtil.InitDir(source)
//2、对视频文件进行切片
ConvertUtil.Cut(source) ConvertUtil.Cut(source)
//2、切片完成后尝试进行转码 //2、切片完成后尝试进行转码
var childMovie = ConvertUtil.GetAllCutChild(source) var childMovie = ConvertUtil.GetAllCutChild(source)
for i := range childMovie { for i := range childMovie {
ConvertUtil.ConvertToH264Mp4(childMovie[i]) ConvertUtil.ConvertToH264Mp4(childMovie[i])
} }
//3、生成拼接的索引文件 ////3、生成拼接的索引文件
indexName := ConvertUtil.GenerateIndexTxt(source, childMovie) //indexName := ConvertUtil.GenerateIndexTxt(source, childMovie)
//4、合成MP4 ////4、合成MP4
ConvertUtil.Merge(source, indexName) //ConvertUtil.Merge(source, indexName)
//5、清除垃圾 //5、清除垃圾
//ConvertUtil.ClearRubbish(source) //ConvertUtil.ClearRubbish(source)
} }

@ -18,10 +18,37 @@ var ffmpeg string
func init() { func init() {
runDir, _ = os.Getwd() runDir, _ = os.Getwd()
ffmpeg = runDir + `\ffmpeg\ffmpeg.exe` 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
}
/**
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、获取文件后缀 //2、获取文件后缀
extension := path.Ext(source) extension := path.Ext(source)
//3、输出的文件通配名称 //3、输出的文件通配名称
workingPath := runDir + `/Working/` + source[0:2] + "/" targetPath := getPath(source,CutPath) + source[0:36] + `_%03d` + extension
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++
}
//4、切片 //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 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.ExecCommand(cmdLine)
@ -65,16 +72,14 @@ func Cut(source string) {
2020-07-08 2020-07-08
*/ */
func GetAllCutChild(source string) []string { func GetAllCutChild(source string) []string {
filepathNames, err := filepath.Glob(filepath.Join(runDir+`/Working/`+source[0:2]+"/"+source[0:36]+"/", "*")) filepathNames, err := filepath.Glob(filepath.Join(getPath(source,CutPath), "*"))
if err != nil { if err != nil {
fmt.Println(err.Error()) fmt.Println(err.Error())
} }
resultArray := make([]string, 0) resultArray := make([]string, 0)
for i := range filepathNames { for i := range filepathNames {
if strings.Index(filepathNames[i],"_")>=0{
resultArray = append(resultArray, filepathNames[i]) resultArray = append(resultArray, filepathNames[i])
} }
}
return resultArray return resultArray
} }
@ -85,14 +90,11 @@ func GetAllCutChild(source string) []string {
*/ */
func ConvertToH264Mp4(childMovie string) { func ConvertToH264Mp4(childMovie string) {
extension := path.Ext(childMovie) extension := path.Ext(childMovie)
childMovieMp4 := strings.Replace(childMovie, extension, ".mp4", -1) childMovieMp4 := strings.Replace(filepath.Base(childMovie), extension, ".mp4", -1)
//如果存在则删除之 cmdLine := ffmpeg + ` -i ` + childMovie + ` -c:v libx264 -strict -2 ` + getPath(childMovie,Mp4Path)+childMovieMp4
if FileUtil.Exists(childMovieMp4) {
os.Remove(childMovieMp4)
}
cmdLine := ffmpeg + ` -i ` + childMovie + ` -c:v libx264 -strict -2 ` + childMovieMp4
ShellUtil.ExecCommand(cmdLine) ShellUtil.ExecCommand(cmdLine)
} }
/** /**
@ -111,6 +113,7 @@ func GenerateIndexTxt(source string,childMovie []string)string{
FileUtil.WriteLines(content, indexName) FileUtil.WriteLines(content, indexName)
return indexName return indexName
} }
/** /**

@ -1,6 +0,0 @@
file 'B7318F5D-46B8-4AA1-8811-1A9D65528E19.mp4'
file 'B7318F5D-46B8-4AA1-8811-1A9D65528E19.mp4'
file 'B7318F5D-46B8-4AA1-8811-1A9D65528E19_000.mp4'
file 'B7318F5D-46B8-4AA1-8811-1A9D65528E19_000.mp4'
file 'B7318F5D-46B8-4AA1-8811-1A9D65528E19_001.mp4'
file 'B7318F5D-46B8-4AA1-8811-1A9D65528E19_001.mp4'
Loading…
Cancel
Save