diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index ce262f8..d36a9b1 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -14,8 +14,8 @@ import ( "strconv" "strings" - "github.com/floostack/transcoder" - "github.com/floostack/transcoder/utils" + "github.com/wolfhong/transcoder" + "github.com/wolfhong/transcoder/utils" ) // Transcoder ... @@ -38,7 +38,7 @@ func New(cfg *Config) transcoder.Transcoder { } // Start ... -func (t *Transcoder) Start(opts transcoder.Options) (<-chan transcoder.Progress, error) { +func (t *Transcoder) Start(opts transcoder.Options, mode string) (<-chan transcoder.Progress, *os.Process, error) { var stderrIn io.ReadCloser @@ -48,17 +48,22 @@ func (t *Transcoder) Start(opts transcoder.Options) (<-chan transcoder.Progress, // Validates config if err := t.validate(); err != nil { - return nil, err + return nil, nil, err } // Get file metadata _, err := t.GetMetadata() if err != nil { - return nil, err + return nil, nil, err } // Append input file and standard options - args := append([]string{"-i", t.input}, opts.GetStrArguments()...) + var args []string + if mode == "gpu" { + args = append([]string{"-vsync", "0", "-hwaccel", "cuvid", "-hwaccel_output_format", "cuda", "-i", t.input}, opts.GetStrArguments()...) + } else { + args = append([]string{"-i", t.input}, opts.GetStrArguments()...) + } outputLength := len(t.output) optionsLength := len(t.options) @@ -94,11 +99,15 @@ func (t *Transcoder) Start(opts transcoder.Options) (<-chan transcoder.Progress, cmd = exec.CommandContext(*t.commandContext, t.config.FfmpegBinPath, args...) } + if mode != "" { + fmt.Printf("ffmpeg command (%s) is: %s\n", mode, cmd.String()) + } + // If progresss enabled, get stderr pipe and start progress process if t.config.ProgressEnabled && !t.config.Verbose { stderrIn, err = cmd.StderrPipe() if err != nil { - return nil, fmt.Errorf("Failed getting transcoding progress (%s) with args (%s) with error %s", t.config.FfmpegBinPath, args, err) + return nil, nil, fmt.Errorf("Failed getting transcoding progress (%s) with args (%s) with error %s", t.config.FfmpegBinPath, args, err) } } @@ -109,7 +118,7 @@ func (t *Transcoder) Start(opts transcoder.Options) (<-chan transcoder.Progress, // Start process err = cmd.Start() if err != nil { - return nil, fmt.Errorf("Failed starting transcoding (%s) with args (%s) with error %s", t.config.FfmpegBinPath, args, err) + return nil, nil, fmt.Errorf("Failed starting transcoding (%s) with args (%s) with error %s", t.config.FfmpegBinPath, args, err) } if t.config.ProgressEnabled && !t.config.Verbose { @@ -125,7 +134,7 @@ func (t *Transcoder) Start(opts transcoder.Options) (<-chan transcoder.Progress, err = cmd.Wait() } - return out, nil + return out, cmd.Process, nil } // Input ... diff --git a/ffmpeg/metadata.go b/ffmpeg/metadata.go index 4e81910..2f143f1 100644 --- a/ffmpeg/metadata.go +++ b/ffmpeg/metadata.go @@ -1,6 +1,6 @@ package ffmpeg -import "github.com/floostack/transcoder" +import "github.com/wolfhong/transcoder" // Metadata ... type Metadata struct { diff --git a/go.mod b/go.mod index 4c9ade4..b13d65d 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ -module github.com/floostack/transcoder +module github.com/wolfhong/transcoder go 1.13 diff --git a/transcoder.go b/transcoder.go index c93bc4a..feff870 100644 --- a/transcoder.go +++ b/transcoder.go @@ -3,11 +3,12 @@ package transcoder import ( "context" "io" + "os" ) // Transcoder ... type Transcoder interface { - Start(opts Options) (<-chan Progress, error) + Start(opts Options, mode string) (<-chan Progress, *os.Process, error) Input(i string) Transcoder InputPipe(w *io.WriteCloser, r *io.ReadCloser) Transcoder Output(o string) Transcoder