我尝试使用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”
那么问题是什么以及如何解决呢?
尝试像这样格式化参数(对字符串使用双引号而不是反引号,并删除内部的双引号):
cmdArgs := []string{..., "csv=p=0"}
Go exec
包不会调用系统外壳程序来处理参数,因此在指定它们时无需采取相同的预防措施。在这种情况下,无需将引号中第一个“ =”后的部分引起来。
从包装文件:
与使用C和其他语言进行“系统”库调用不同,os / exec软件包有意不调用系统外壳程序,并且不展开任何glob模式或处理其他通常由外壳程序完成的扩展,管道或重定向。程序包的行为更像C的“ exec”函数系列。要扩展glob模式,请直接调用外壳程序,注意避免任何危险的输入,或者使用path / filepath包的Glob函数。要扩展环境变量,请使用程序包的ExpandEnv。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句