无法执行ffprobe命令

气候:

我尝试使用ffprobe获取视频文件时长。当我运行此代码时,出现错误:

退出状态1:

var out bytes.Buffer
var stderr bytes.Buffer

cmdArgs := []string{"-i", "bunny.mp4", "-show_entries", "format=duration", "-v", "quiet", "-of", `csv="p=0"`}

cmd := exec.Command("ffprobe", cmdArguments...)
cmd.Stdout = &out
cmd.Stderr = &stderr
if err := cmd.Run(); err != nil {
    fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
}
fmt.Printf("command output: %q\n", out.String())

但是当我-of csv="p=0"不像这样传递参数时

cmdArgs := []string{"-i", "bunny.mp4", "-show_entries", "format=duration", "-v", "quiet"}

它可以工作并返回结果(但格式错误):

命令输出:“ [FORMAT] \ nduration = 3.008000 \ n [/ FORMAT] \ n”

那么问题是什么以及如何解决呢?

chuckx:

尝试像这样格式化参数(对字符串使用双引号而不是反引号,并删除内部的双引号):

cmdArgs := []string{..., "csv=p=0"}

Go exec包不会调用系统外壳程序来处理参数,因此在指定它们时无需采取相同的预防措施。在这种情况下,无需将引号中第一个“ =”后的部分引起来。

包装文件

与使用C和其他语言进行“系统”库调用不同,os / exec软件包有意不调用系统外壳程序,并且不展开任何glob模式或处理其他通常由外壳程序完成的扩展,管道或重定向。程序包的行为更像C的“ exec”函数系列。要扩展glob模式,请直接调用外壳程序,注意避免任何危险的输入,或者使用path / filepath包的Glob函数。要扩展环境变量,请使用程序包的ExpandEnv。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章