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
|
package ffmpeg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os/exec"
|
||||||
|
"bytes"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
type Configuration struct {
|
type Configuration struct {
|
||||||
FfmpegBin string
|
FfmpegBin string
|
||||||
FfprobeBin string
|
FfprobeBin string
|
||||||
}
|
}
|
||||||
|
|
||||||
func Configure(ffmpegBin, ffprobeBin string) *Configuration {
|
func Configure() (Configuration, error) {
|
||||||
return &Configuration{ffmpegBin, ffprobeBin}
|
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 ***/
|
/*** 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 == "" {
|
if inputPath == "" {
|
||||||
return errors.New("error: transcoder.Initialize -> inputPath missing")
|
return errors.New("error: transcoder.Initialize -> inputPath missing")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := os.Stat(inputPath)
|
_, err = os.Stat(inputPath)
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
return errors.New("error: transcoder.Initialize -> input file not found")
|
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)
|
cmd := exec.Command("/bin/sh", "-c", command)
|
||||||
|
|
||||||
|
fmt.Println(cmd)
|
||||||
|
|
||||||
var out bytes.Buffer
|
var out bytes.Buffer
|
||||||
|
|
||||||
cmd.Stdout = &out
|
cmd.Stdout = &out
|
||||||
|
|
||||||
cmdErr := cmd.Start()
|
err = cmd.Start()
|
||||||
|
|
||||||
if cmdErr != nil {
|
if err != nil {
|
||||||
return cmdErr
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, errProc := cmd.Process.Wait()
|
_, err = cmd.Process.Wait()
|
||||||
if errProc != nil {
|
if err != nil {
|
||||||
return errProc
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var Metadata models.Metadata
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,7 +141,7 @@ func (t *Transcoder) Initialize(inputPath string, outputPath string, configurati
|
|||||||
t.SetInputPath(inputPath)
|
t.SetInputPath(inputPath)
|
||||||
t.SetOutputPath(outputPath)
|
t.SetOutputPath(outputPath)
|
||||||
t.SetMediaFile(MediaFile)
|
t.SetMediaFile(MediaFile)
|
||||||
t.SetConfiguration(*configuration)
|
t.SetConfiguration(configuration)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user