82 lines
1.8 KiB
Go
82 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"os/exec"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// Returns true if file exists, false otherwise.
|
|
// https://stackoverflow.com/questions/12518876/how-to-check-if-a-file-exists-in-go
|
|
func Exists(filename string) bool {
|
|
_, err := os.Stat(filename)
|
|
if err == nil {
|
|
return true
|
|
}
|
|
if errors.Is(err, os.ErrNotExist) {
|
|
return false
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Checks if the given program is installed.
|
|
func CheckExists(program string) {
|
|
cmd := exec.Command(program, "-version")
|
|
if err := cmd.Start(); err != nil {
|
|
panic(program + " is not installed.")
|
|
}
|
|
if err := cmd.Wait(); err != nil {
|
|
panic(program + " is not installed.")
|
|
}
|
|
}
|
|
|
|
// Parse ffprobe output to fill in video data.
|
|
func parseFFprobe(input []byte, video *Video) {
|
|
data := make(map[string]string)
|
|
for _, line := range strings.Split(string(input), "|") {
|
|
if strings.Contains(line, "=") {
|
|
keyValue := strings.Split(line, "=")
|
|
if _, ok := data[keyValue[0]]; !ok {
|
|
data[keyValue[0]] = keyValue[1]
|
|
}
|
|
}
|
|
}
|
|
|
|
video.width = int(parse(data["width"]))
|
|
video.height = int(parse(data["height"]))
|
|
video.duration = float64(parse(data["duration"]))
|
|
video.frames = int(parse(data["nb_frames"]))
|
|
|
|
split := strings.Split(data["r_frame_rate"], "/")
|
|
if len(split) == 2 && split[0] != "" && split[1] != "" {
|
|
video.fps = parse(split[0]) / parse(split[1])
|
|
}
|
|
|
|
video.bitrate = int(parse(data["bit_rate"]))
|
|
video.codec = data["codec_name"]
|
|
video.pix_fmt = data["pix_fmt"]
|
|
}
|
|
|
|
func parse(data string) float64 {
|
|
n, err := strconv.ParseFloat(data, 64)
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
return n
|
|
}
|
|
|
|
// func main() {
|
|
// os := runtime.GOOS
|
|
// switch os {
|
|
// case "windows":
|
|
// fmt.Println("Windows")
|
|
// case "darwin":
|
|
// fmt.Println("MAC operating system")
|
|
// case "linux":
|
|
// fmt.Println("Linux")
|
|
// default:
|
|
// fmt.Printf("%s.\n", os)
|
|
// }
|
|
// }
|