|
|
@ -143,7 +143,7 @@ func main() { |
|
|
|
"-i", path.Join(presentationId, imgnames[j]), |
|
|
|
"-t", fmt.Sprint(durations[j]), |
|
|
|
"-pix_fmt", "yuv420p", |
|
|
|
"-vf", "scale=-1:720", |
|
|
|
"-vf", "scale=-1:1080", |
|
|
|
path.Join(presentationId, vidnames[j])) |
|
|
|
err = cmd.Run() |
|
|
|
if err != nil { |
|
|
@ -188,101 +188,59 @@ func main() { |
|
|
|
fmt.Println("slide videos merged") |
|
|
|
|
|
|
|
// download webcams
|
|
|
|
webcamsFile := "" |
|
|
|
fmt.Println("downloading webcams") |
|
|
|
err = DownloadFile(path.Join(presentationId, "webcams.webm"), webcamsWebmUrl) |
|
|
|
if err != nil { |
|
|
|
err = DownloadFile(path.Join(presentationId, "orig-webcams.mp4"), webcamsMp4Url) |
|
|
|
err = DownloadFile(path.Join(presentationId, "webcams.mp4"), webcamsMp4Url) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("Failed to download webcams:", err.Error()) |
|
|
|
return |
|
|
|
} |
|
|
|
cmd = exec.Command("ffmpeg", |
|
|
|
"-i", path.Join(presentationId, "orig-webcams.mp4"), |
|
|
|
"-framerate", "1", |
|
|
|
"-q:a", "0", |
|
|
|
"-q:v", "0", |
|
|
|
"-vf", "scale=-1:720", |
|
|
|
path.Join(presentationId, "webcams.mp4")) |
|
|
|
err = cmd.Run() |
|
|
|
if err != nil { |
|
|
|
fmt.Println("Failed to convert orig-webcams.mp4 to MP4:", err.Error()) |
|
|
|
return |
|
|
|
fmt.Println("No webcams") |
|
|
|
} else { |
|
|
|
fmt.Println("webcams.mp4 file is downloaded") |
|
|
|
webcamsFile = path.Join(presentationId, "webcams.mp4") |
|
|
|
} |
|
|
|
} else { |
|
|
|
// Successful download, convert to MP4
|
|
|
|
fmt.Println("webcams.webm file is downloaded") |
|
|
|
fmt.Println("converting webcams.webm to webcams.mp4") |
|
|
|
cmd = exec.Command("ffmpeg", |
|
|
|
"-i", path.Join(presentationId, "webcams.webm"), |
|
|
|
"-framerate", "1", |
|
|
|
"-q:a", "0", |
|
|
|
"-q:v", "0", |
|
|
|
"-vf", "scale=-1:720", |
|
|
|
path.Join(presentationId, "webcams.mp4")) |
|
|
|
err = cmd.Run() |
|
|
|
if err != nil { |
|
|
|
fmt.Println("Failed to convert webcams.webm to MP4:", err.Error()) |
|
|
|
return |
|
|
|
} |
|
|
|
webcamsFile = path.Join(presentationId, "webcams.webm") |
|
|
|
} |
|
|
|
|
|
|
|
// download deskshare
|
|
|
|
deskshare := true |
|
|
|
deskshareFile := "" |
|
|
|
fmt.Println("downloading deskshare") |
|
|
|
err = DownloadFile(path.Join(presentationId, "deskshare.webm"), deskshareWebmUrl) |
|
|
|
if err != nil { |
|
|
|
err = DownloadFile(path.Join(presentationId, "orig-deskshare.mp4"), deskshareMp4Url) |
|
|
|
err = DownloadFile(path.Join(presentationId, "deskshare.mp4"), deskshareMp4Url) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("No deskshare") |
|
|
|
deskshare = false |
|
|
|
} else { |
|
|
|
cmd = exec.Command("ffmpeg", |
|
|
|
"-i", path.Join(presentationId, "orig-deskshare.mp4"), |
|
|
|
"-framerate", "1", |
|
|
|
"-q:a", "0", |
|
|
|
"-q:v", "0", |
|
|
|
"-vf", "scale=-1:720", |
|
|
|
path.Join(presentationId, "deskshare.mp4")) |
|
|
|
err = cmd.Run() |
|
|
|
if err != nil { |
|
|
|
fmt.Println("Failed to convert orig-deskshare.mp4 to MP4:", err.Error()) |
|
|
|
return |
|
|
|
} |
|
|
|
fmt.Println("deskshare.mp4 file is downloaded") |
|
|
|
deskshareFile = path.Join(presentationId, "deskshare.mp4") |
|
|
|
} |
|
|
|
} else { |
|
|
|
// Successful download, convert to MP4
|
|
|
|
fmt.Println("deskshare.webm file is downloaded") |
|
|
|
fmt.Println("converting deskshare.webm to deskshare.mp4") |
|
|
|
cmd = exec.Command("ffmpeg", |
|
|
|
"-i", path.Join(presentationId, "deskshare.webm"), |
|
|
|
"-framerate", "1", |
|
|
|
"-q:a", "0", |
|
|
|
"-q:v", "0", |
|
|
|
"-vf", "scale=-1:720", |
|
|
|
path.Join(presentationId, "deskshare.mp4")) |
|
|
|
err = cmd.Run() |
|
|
|
if err != nil { |
|
|
|
fmt.Println("Failed to convert deskshare.webm to MP4:", err.Error()) |
|
|
|
return |
|
|
|
} |
|
|
|
deskshareFile = path.Join(presentationId, "deskshare.webm") |
|
|
|
} |
|
|
|
|
|
|
|
fmt.Println("merging slides, webcams and deskshare side by side") |
|
|
|
cmd = exec.Command("ffmpeg", |
|
|
|
"-i", path.Join(presentationId, "slides.mp4"), |
|
|
|
"-i", path.Join(presentationId, "webcams.mp4"), |
|
|
|
"-i", path.Join(presentationId, "deskshare.mp4"), |
|
|
|
"-framerate", "1", |
|
|
|
"-filter_complex", "hstack=inputs=3", |
|
|
|
meetingName+".mp4") |
|
|
|
if !deskshare { |
|
|
|
cmd = exec.Command("ffmpeg", |
|
|
|
"-i", path.Join(presentationId, "slides.mp4"), |
|
|
|
"-i", path.Join(presentationId, "webcams.mp4"), |
|
|
|
"-framerate", "1", |
|
|
|
"-filter_complex", "hstack=inputs=2", |
|
|
|
meetingName+".mp4") |
|
|
|
streams := 1 |
|
|
|
cmd = exec.Command("ffmpeg", "-i", path.Join(presentationId, "slides.mp4")) |
|
|
|
if webcamsFile != "" { |
|
|
|
cmd.Args = append(cmd.Args, "-i") |
|
|
|
cmd.Args = append(cmd.Args, webcamsFile) |
|
|
|
streams++ |
|
|
|
} |
|
|
|
if deskshareFile != "" { |
|
|
|
cmd.Args = append(cmd.Args, "-i") |
|
|
|
cmd.Args = append(cmd.Args, deskshareFile) |
|
|
|
streams++ |
|
|
|
} |
|
|
|
cmd.Args = append(cmd.Args, "-c") |
|
|
|
cmd.Args = append(cmd.Args, "copy") |
|
|
|
for i := 0; i < streams; i++ { |
|
|
|
cmd.Args = append(cmd.Args, "-map") |
|
|
|
cmd.Args = append(cmd.Args, strconv.Itoa(i)) |
|
|
|
} |
|
|
|
cmd.Args = append(cmd.Args, meetingName+".mkv") |
|
|
|
err = cmd.Run() |
|
|
|
if err != nil { |
|
|
|
fmt.Println("Failed to merge slides and webcams:", err.Error()) |
|
|
|