mirror of
https://github.com/u2takey/ffmpeg-go.git
synced 2025-09-26 20:11:17 +08:00
Close u2takey/ffmpeg-go#80
Discover CommandOption type and ffmpeg.GlobalCommandOptions array, that is processed before running ffmpeg or ffprobe commands. Add tests.
This commit is contained in:
@@ -9,6 +9,19 @@ import (
|
||||
func TestCompileWithOptions(t *testing.T) {
|
||||
out := Input("dummy.mp4").Output("dummy2.mp4")
|
||||
cmd := out.Compile(SeparateProcessGroup())
|
||||
assert.Equal(t, cmd.SysProcAttr.Pgid, 0)
|
||||
assert.Equal(t, 0, cmd.SysProcAttr.Pgid)
|
||||
assert.True(t, cmd.SysProcAttr.Setpgid)
|
||||
}
|
||||
|
||||
func TestGlobalCommandOptions(t *testing.T) {
|
||||
out := Input("dummy.mp4").Output("dummy2.mp4")
|
||||
GlobalCommandOptions = append(GlobalCommandOptions, func(cmd *exec.Cmd) {
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true, Pgid: 0}
|
||||
})
|
||||
defer func() {
|
||||
GlobalCommandOptions = GlobalCommandOptions[0 : len(GlobalCommandOptions)-1]
|
||||
}()
|
||||
cmd := out.Compile()
|
||||
assert.Equal(t, 0, cmd.SysProcAttr.Pgid)
|
||||
assert.True(t, cmd.SysProcAttr.Setpgid)
|
||||
}
|
||||
|
@@ -18,3 +18,18 @@ func TestCompileWithOptions(t *testing.T) {
|
||||
})
|
||||
assert.Equal(t, true, cmd.SysProcAttr.HideWindow)
|
||||
}
|
||||
|
||||
func TestGlobalCommandOptions(t *testing.T) {
|
||||
out := Input("dummy.mp4").Output("dummy2.mp4")
|
||||
GlobalCommandOptions = append(GlobalCommandOptions, func(cmd *exec.Cmd) {
|
||||
if cmd.SysProcAttr == nil {
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{}
|
||||
}
|
||||
cmd.SysProcAttr.HideWindow = true
|
||||
})
|
||||
defer func() {
|
||||
GlobalCommandOptions = GlobalCommandOptions[0 : len(GlobalCommandOptions)-1]
|
||||
}()
|
||||
cmd := out.Compile()
|
||||
assert.Equal(t, true, cmd.SysProcAttr.HideWindow)
|
||||
}
|
||||
|
3
probe.go
3
probe.go
@@ -34,6 +34,9 @@ func ProbeWithTimeoutExec(fileName string, timeOut time.Duration, kwargs KwArgs)
|
||||
cmd := exec.CommandContext(ctx, "ffprobe", args...)
|
||||
buf := bytes.NewBuffer(nil)
|
||||
cmd.Stdout = buf
|
||||
for _, option := range GlobalCommandOptions {
|
||||
option(cmd)
|
||||
}
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
return "", err
|
||||
|
7
run.go
7
run.go
@@ -236,6 +236,10 @@ func (s *Stream) ErrorToStdOut() *Stream {
|
||||
return s.WithErrorOutput(os.Stdout)
|
||||
}
|
||||
|
||||
type CommandOption func(cmd *exec.Cmd)
|
||||
|
||||
var GlobalCommandOptions = make([]CommandOption, 0)
|
||||
|
||||
type CompilationOption func(s *Stream, cmd *exec.Cmd)
|
||||
|
||||
func (s *Stream) SetFfmpegPath(path string) *Stream {
|
||||
@@ -259,6 +263,9 @@ func (s *Stream) Compile(options ...CompilationOption) *exec.Cmd {
|
||||
for _, option := range options {
|
||||
option(s, cmd)
|
||||
}
|
||||
for _, option := range GlobalCommandOptions {
|
||||
option(cmd)
|
||||
}
|
||||
log.Printf("compiled command: ffmpeg %s\n", strings.Join(args, " "))
|
||||
return cmd
|
||||
}
|
||||
|
Reference in New Issue
Block a user