mirror of
https://github.com/u2takey/ffmpeg-go.git
synced 2025-10-06 16:36:59 +08:00
ProbeReader (Probe but accepts io.Reader)
This commit is contained in:
46
probe_reader.go
Normal file
46
probe_reader.go
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
package ffmpeg_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"io"
|
||||||
|
"os/exec"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ProbeReader** functions are the same as Probe** but accepting io.Reader instead of fileName
|
||||||
|
|
||||||
|
// ProbeReader runs ffprobe passing given reader via stdin and return a JSON representation of the output.
|
||||||
|
func ProbeReader(r io.Reader, kwargs ...KwArgs) (string, error) {
|
||||||
|
return ProbeReaderWithTimeout(r, 0, MergeKwArgs(kwargs))
|
||||||
|
}
|
||||||
|
|
||||||
|
func ProbeReaderWithTimeout(r io.Reader, timeOut time.Duration, kwargs KwArgs) (string, error) {
|
||||||
|
args := KwArgs{
|
||||||
|
"show_format": "",
|
||||||
|
"show_streams": "",
|
||||||
|
"of": "json",
|
||||||
|
}
|
||||||
|
|
||||||
|
return ProbeReaderWithTimeoutExec(r, timeOut, MergeKwArgs([]KwArgs{args, kwargs}))
|
||||||
|
}
|
||||||
|
|
||||||
|
func ProbeReaderWithTimeoutExec(r io.Reader, timeOut time.Duration, kwargs KwArgs) (string, error) {
|
||||||
|
args := ConvertKwargsToCmdLineArgs(kwargs)
|
||||||
|
args = append(args, "-")
|
||||||
|
ctx := context.Background()
|
||||||
|
if timeOut > 0 {
|
||||||
|
var cancel func()
|
||||||
|
ctx, cancel = context.WithTimeout(context.Background(), timeOut)
|
||||||
|
defer cancel()
|
||||||
|
}
|
||||||
|
cmd := exec.CommandContext(ctx, "ffprobe", args...)
|
||||||
|
cmd.Stdin = r
|
||||||
|
buf := bytes.NewBuffer(nil)
|
||||||
|
cmd.Stdout = buf
|
||||||
|
err := cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(buf.Bytes()), nil
|
||||||
|
}
|
20
probe_reader_test.go
Normal file
20
probe_reader_test.go
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
package ffmpeg_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestProbeReader(t *testing.T) {
|
||||||
|
f, err := os.Open(TestInputFile1)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
data, err := ProbeReader(f, nil)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
duration, err := probeOutputDuration(data)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, fmt.Sprintf("%f", duration), "7.036000")
|
||||||
|
}
|
Reference in New Issue
Block a user