mirror of
https://github.com/u2takey/ffmpeg-go.git
synced 2025-09-27 04:15:53 +08:00
34 lines
883 B
Go
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
|
|
}
|