mirror of https://github.com/stashapp/stash.git
50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package ffmpeg
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"os/exec"
|
|
"strings"
|
|
)
|
|
|
|
// Generate runs ffmpeg with the given args and waits for it to finish.
|
|
// Returns an error if the command fails. If the command fails, the return
|
|
// value will be of type *exec.ExitError.
|
|
func (f FFMpeg) Generate(ctx context.Context, args Args) error {
|
|
cmd := f.Command(ctx, args)
|
|
|
|
var stderr bytes.Buffer
|
|
cmd.Stderr = &stderr
|
|
|
|
if err := cmd.Start(); err != nil {
|
|
return fmt.Errorf("error starting command: %w", err)
|
|
}
|
|
|
|
if err := cmd.Wait(); err != nil {
|
|
var exitErr *exec.ExitError
|
|
if errors.As(err, &exitErr) {
|
|
exitErr.Stderr = stderr.Bytes()
|
|
err = exitErr
|
|
}
|
|
return fmt.Errorf("error running ffmpeg command <%s>: %w", strings.Join(args, " "), err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// GenerateOutput runs ffmpeg with the given args and returns it standard output.
|
|
func (f FFMpeg) GenerateOutput(ctx context.Context, args []string, stdin io.Reader) ([]byte, error) {
|
|
cmd := f.Command(ctx, args)
|
|
cmd.Stdin = stdin
|
|
|
|
ret, err := cmd.Output()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error running ffmpeg command <%s>: %w", strings.Join(args, " "), err)
|
|
}
|
|
|
|
return ret, nil
|
|
}
|