package main

import (
	"bytes"
	"fmt"
	"os/exec"
	"strings"
)

const (
	CMD                    = `ffmpeg`
	FileName               = `./ffmpeg/mp4/wph.mp4`
	TEMPDir                = `./ffmpeg/output/`
	AudioPickUpArgs        = `-i %s -y -vn -acodec copy %s`                                          // 音频提取
	VideoPickUpArgs        = `-i %s -y -an -vcodec copy %s`                                          // 视频提取
	SRTPickUpArgs          = `-i %s -map 0:s:0 %s`                                                   // 文本字幕提取 or `-i %s  -an -vn -bsf:s mov2textsub -scodec copy -f rawvideo %s` or `-i %s -an -vn -c:s copy -f rawvideo -map 0:s %s`
	ASSPickUpArgs          = `-i %s -an -vn -scodec copy %s`                                         // ASS字幕提取
	VideoAndAudioMergeArgs = `-i %s -i %s -y -vcodec copy -acodec copy %s`                           // 音视频混编
	SRTMapArgs             = `-i %s -i %s -c copy -c:s mov_text %s`                                  // 增加SRT字幕
	ASSMapArgs             = `-i %s -i %s -map 0:0 -map 0:1 -map 1 -c:a copy -c:v copy -c:s copy %s` // 增加ASS字幕
	PushFlv                = `-re -i %s -c copy -f flv %s`                                           // 推Flv流
)

func main() {
	//_ = os.RemoveAll(TEMPDir)
	//_ = os.Mkdir(TEMPDir, os.ModePerm)
	//runCmd(CMD, strings.Split(fmt.Sprintf(AudioPickUpArgs, FileName, TEMPDir+`wph.aac`), " "))
	//runCmd(CMD, strings.Split(fmt.Sprintf(VideoPickUpArgs, FileName, TEMPDir+`wph.mp4`), " "))
	//if path.Ext(FileName) == "mkv" { // mkv文件才能提取出字幕流,mp4通常会报错
	//	runCmd(CMD, strings.Split(fmt.Sprintf(SRTPickUpArgs, FileName, TEMPDir+`wph.txt`), " "))
	//}
	//runCmd(CMD, strings.Split(fmt.Sprintf(VideoAndAudioMergeArgs, TEMPDir+`wph.mp4`, TEMPDir+`wph.aac`, TEMPDir+`wph1.mp4`), " "))
	runCmd(CMD, strings.Split(fmt.Sprintf(PushFlv, FileName, `rtmp://localhost:1935/live/test`), ` `))
}

func runCmd(name string, args []string) {
	cmd := exec.Command(name, args...)
	buf := new(bytes.Buffer)
	cmd.Stdout = buf
	err := cmd.Run()
	if nil != err {
		panic(err.Error())
	} else {
		println(buf.String())
	}
}