Created
November 5, 2020 09:32
-
-
Save songfei1983/b6de751dee8b73226ffd886150e53fb9 to your computer and use it in GitHub Desktop.
ffmpeg convert mp4 through go exec
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"bytes" | |
"fmt" | |
"io" | |
"io/ioutil" | |
"log" | |
"os" | |
"os/exec" | |
) | |
func main() { | |
fi, _ := ioutil.ReadFile("test-4k.mp4") | |
runFFMPEGFromStdin(populateStdin(fi)) | |
} | |
func populateStdin(file []byte) func(io.WriteCloser) { | |
return func(stdin io.WriteCloser) { | |
defer stdin.Close() | |
io.Copy(stdin, bytes.NewReader(file)) | |
} | |
} | |
func logErr(err error) { | |
if err != nil { | |
log.Fatal(err) | |
} | |
} | |
func runFFMPEGFromStdin(populate_stdin_func func(io.WriteCloser)) { | |
cmd := exec.Command("ffmpeg", NewFFMpeg().args...) | |
fmt.Println(cmd) | |
// std err | |
stderr, err := cmd.StderrPipe() | |
logErr(err) | |
stdin, err := cmd.StdinPipe() | |
logErr(err) | |
stdout, err := cmd.StdoutPipe() | |
logErr(err) | |
err = cmd.Start() | |
logErr(err) | |
go populate_stdin_func(stdin) | |
fo, err := os.Create("output.mp4") | |
logErr(err) | |
defer fo.Close() | |
_, err = io.Copy(fo, stdout) | |
logErr(err) | |
errFo, err := os.Create("output.log") | |
logErr(err) | |
defer errFo.Close() | |
_, err = io.Copy(errFo, stderr) | |
logErr(err) | |
err = cmd.Wait() | |
logErr(err) | |
} | |
type FFMpeg struct { | |
cmd string | |
args []string | |
} | |
func NewFFMpeg() *FFMpeg { | |
return &FFMpeg{ | |
cmd: "ffmpeg", | |
args: []string{ | |
"-y", | |
"-hide_banner", | |
"-i", | |
"pipe:0", | |
"-c:v", | |
"libx264", | |
"-c:a", | |
"aac", | |
"-vf", | |
"scale=640x360", | |
"-t", | |
"30", | |
"-an", | |
"-movflags", | |
"frag_keyframe+empty_moov", | |
"-f", | |
"mp4", | |
"-", | |
// "out.mp4", | |
}, | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment