mirror of
https://github.com/xfrr/goffmpeg.git
synced 2025-10-06 08:26:54 +08:00
getting ffmpeg and ffprobe path automatically
This commit is contained in:
@@ -1,10 +1,50 @@
|
||||
package ffmpeg
|
||||
|
||||
import (
|
||||
"os/exec"
|
||||
"bytes"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Configuration struct {
|
||||
FfmpegBin string
|
||||
FfprobeBin string
|
||||
}
|
||||
|
||||
func Configure(ffmpegBin, ffprobeBin string) *Configuration {
|
||||
return &Configuration{ffmpegBin, ffprobeBin}
|
||||
func Configure() (Configuration, error) {
|
||||
var outFFmpeg bytes.Buffer
|
||||
var outProbe bytes.Buffer
|
||||
|
||||
cmdFFmpeg := exec.Command("/bin/sh", "-c", "which ffmpeg")
|
||||
cmdProbe := exec.Command("/bin/sh", "-c", "which ffprobe")
|
||||
|
||||
cmdFFmpeg.Stdout = &outFFmpeg
|
||||
cmdProbe.Stdout = &outProbe
|
||||
|
||||
err := cmdFFmpeg.Start()
|
||||
if err != nil {
|
||||
return Configuration{}, err
|
||||
}
|
||||
|
||||
_, err = cmdFFmpeg.Process.Wait()
|
||||
if err != nil {
|
||||
return Configuration{}, err
|
||||
}
|
||||
|
||||
err = cmdProbe.Start()
|
||||
if err != nil {
|
||||
return Configuration{}, err
|
||||
}
|
||||
|
||||
_, err = cmdProbe.Process.Wait()
|
||||
if err != nil {
|
||||
return Configuration{}, err
|
||||
}
|
||||
|
||||
ffmpeg := strings.Replace(outFFmpeg.String(), "\n", "", -1)
|
||||
fprobe := strings.Replace(outProbe.String(), "\n", "", -1)
|
||||
|
||||
cnf := Configuration{ffmpeg, fprobe}
|
||||
|
||||
return cnf, nil
|
||||
}
|
||||
|
@@ -89,13 +89,19 @@ func (t Transcoder) GetCommand() string {
|
||||
|
||||
/*** FUNCTIONS ***/
|
||||
|
||||
func (t *Transcoder) Initialize(inputPath string, outputPath string, configuration *ffmpeg.Configuration) (error) {
|
||||
func (t *Transcoder) Initialize(inputPath string, outputPath string) (error) {
|
||||
|
||||
configuration, err := ffmpeg.Configure()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return err
|
||||
}
|
||||
|
||||
if inputPath == "" {
|
||||
return errors.New("error: transcoder.Initialize -> inputPath missing")
|
||||
}
|
||||
|
||||
_, err := os.Stat(inputPath)
|
||||
_, err = os.Stat(inputPath)
|
||||
if os.IsNotExist(err) {
|
||||
return errors.New("error: transcoder.Initialize -> input file not found")
|
||||
}
|
||||
@@ -104,24 +110,26 @@ func (t *Transcoder) Initialize(inputPath string, outputPath string, configurati
|
||||
|
||||
cmd := exec.Command("/bin/sh", "-c", command)
|
||||
|
||||
fmt.Println(cmd)
|
||||
|
||||
var out bytes.Buffer
|
||||
|
||||
cmd.Stdout = &out
|
||||
|
||||
cmdErr := cmd.Start()
|
||||
err = cmd.Start()
|
||||
|
||||
if cmdErr != nil {
|
||||
return cmdErr
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, errProc := cmd.Process.Wait()
|
||||
if errProc != nil {
|
||||
return errProc
|
||||
_, err = cmd.Process.Wait()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var Metadata models.Metadata
|
||||
|
||||
if err := json.Unmarshal([]byte(out.String()), &Metadata); err != nil {
|
||||
if err = json.Unmarshal([]byte(out.String()), &Metadata); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -133,7 +141,7 @@ func (t *Transcoder) Initialize(inputPath string, outputPath string, configurati
|
||||
t.SetInputPath(inputPath)
|
||||
t.SetOutputPath(outputPath)
|
||||
t.SetMediaFile(MediaFile)
|
||||
t.SetConfiguration(*configuration)
|
||||
t.SetConfiguration(configuration)
|
||||
|
||||
return nil
|
||||
|
||||
|
Reference in New Issue
Block a user