Files
ffmpeg-go/probe.go
2020-11-11 22:58:13 +08:00

34 lines
883 B
Go

package ffmpeg_go
import (
"bytes"
"context"
"os/exec"
"time"
)
// Probe Run ffprobe on the specified file and return a JSON representation of the output.
func Probe(fileName string, kwargs ...KwArgs) (string, error) {
return ProbeWithTimeout(fileName, 0, MergeKwArgs(kwargs))
}
func ProbeWithTimeout(fileName string, timeOut time.Duration, kwargs KwArgs) (string, error) {
args := []string{"-show_format", "-show_streams", "-of", "json"}
args = append(args, ConvertKwargsToCmdLineArgs(kwargs)...)
args = append(args, fileName)
ctx := context.Background()
if timeOut > 0 {
var cancel func()
ctx, cancel = context.WithTimeout(context.Background(), timeOut)
defer cancel()
}
cmd := exec.CommandContext(ctx, "ffprobe", args...)
buf := bytes.NewBuffer(nil)
cmd.Stdout = buf
err := cmd.Run()
if err != nil {
return "", err
}
return string(buf.Bytes()), nil
}