Discover CommandOption type and ffmpeg.GlobalCommandOptions array, that is processed before running ffmpeg or ffprobe commands.
Add tests.
This commit is contained in:
Denis Borzenko
2023-02-28 23:46:11 +03:00
parent 2a41acb422
commit bbf2881ff4
4 changed files with 39 additions and 1 deletions

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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
View File

@@ -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
}