【发布时间】:2020-03-08 10:35:17
【问题描述】:
我尝试使用 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”
那么问题是什么以及如何解决呢?
【问题讨论】:
-
您只在出现错误时查看
stderr,而在没有错误时仅查看stdout。你应该检查两者。 -
@Adrian 我完全删除了
stderr,它仍然以同样的方式工作 -
这与我的建议完全相反。
-
csv="p=0"中不需要引号。 -
再次声明:
csv="p=0"中不需要引号。