我嘗試使用 ffprobe 獲取視頻文件持續時間。當我運行此代碼時,出現錯誤:退出狀態1:var out bytes.Buffervar stderr bytes.BuffercmdArgs := []string{"-i", "bunny.mp4", "-show_entries", "format=duration", "-v", "quiet", "-of", `csv="p=0"`}cmd := exec.Command("ffprobe", cmdArguments...)cmd.Stdout = &outcmd.Stderr = &stderrif 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”那么問題是什么以及如何解決呢?
1 回答

蝴蝶刀刀
TA貢獻1801條經驗 獲得超8個贊
嘗試像這樣格式化參數(對字符串使用雙引號而不是反引號并刪除內部雙引號):
cmdArgs?:=?[]string{...,?"csv=p=0"}
Goexec
包不會調用系統 shell 來處理參數,因此在指定它們時不需要采取相同的預防措施。在這種情況下,無需將第一個“=”后面的部分用引號引起來。
從包文檔中:
與 C 和其他語言的“系統”庫調用不同,os/exec 包有意不調用系統 shell,也不擴展任何 glob 模式或處理通常由 shell 完成的其他擴展、管道或重定向。該包的行為更像是 C 的“exec”函數系列。要擴展 glob 模式,請直接調用 shell,注意轉義任何危險輸入,或使用 path/filepath 包的 Glob 函數。要擴展環境變量,請使用 os 包的 ExpandEnv。
- 1 回答
- 0 關注
- 264 瀏覽
添加回答
舉報
0/150
提交
取消