2017-08-15 96 views
1

ffmpeg的命令,目前这个ffmpeg的命令工作当我在终端输入它来编辑视频Golang exec.Command()错误 - 通过golang

ffmpeg -i "video1.ts" -c:v libx264 -crf 20 -c:a aac -strict -2 "video1-fix.ts" 

,它的工作原理。然而,当我尝试使用Golang exec.Command()FUNC,我得到的

&{/usr/local/bin/ffmpeg [ffmpeg -i "video1.ts" -c:v libx264 -crf 20 -c:a aac -strict -2 "video1-fix.ts"] [] <nil> <nil> <nil> [] <nil> <nil> <nil> <nil> <nil> false [] [] [] [] <nil> <nil>} 

这里下面ERR响应我的代码

cmdArguments := []string{"-i", "\"video-1.ts\"", "-c:v", "libx264", 
     "-crf", "20", "-c:a", "aac", "-strict", "-2", "\"video1-fix.ts\""} 

err := exec.Command("ffmpeg", cmdArguments...) 
fmt.Println(err) 

我失去了从我的命令语法的东西吗?不知道为什么它不加载视频

+2

['exec.Command'](https://golang.org/pkg/os/exec/#Command)返回'* Cmd',而不是错误。 – JimB

回答

2

作为@JimB说,exec.Command不会返回错误。 这是来自示例的更改代码https://golang.org/pkg/os/exec/#Command

顺便说一下,您不需要使用"\"video-1.ts\"" - 您的引号是shell功能。

package main 

import (
    "bytes" 
    "fmt" 
    "log" 
    "os/exec" 
) 

func main() { 
    cmdArguments := []string{"-i", "video-1.ts", "-c:v", "libx264", 
    "-crf", "20", "-c:a", "aac", "-strict", "-2", "video1-fix.ts"} 

    cmd := exec.Command("tr", cmdArguments...) 

    var out bytes.Buffer 
    cmd.Stdout = &out 
    err := cmd.Run() 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Printf("command output: %q\n", out.String()) 
} 
+0

真棒,解决了我的问题。 '&out'中的“&”有什么作用? 是因为它被声明为var? –

+0

cmd.Stdout是io.Writer。它可以是任何实现Write方法的东西。 out是bytes.Buffer对象 - 具有此方法并可用于此目的。 – Oleg