gpt4 book ai didi

Golang 命令在终端中工作但不与 exec 包一起工作

转载 作者:数据小太阳 更新时间:2023-10-29 03:14:55 30 4
gpt4 key购买 nike

我正在将视频生成库从 NodeJS 转换为 GO,主要使用 FFMPEG 进行所有视频处理。我已经编写了所有 FFMPEG 命令来完成我想要的生成。问题是当我尝试通过 os/exec 运行命令时包,失败了。但是,如果我复制确切的命令并直接在终端中运行它,它就可以工作,但我无法弄清楚为什么会这样。我运行命令的代码如下:

command := "ffmpeg -y -loop 1 -i image.png -vf 'fade=in:0:15,fade=out:105:15' -c:v mpeg2video -t 5 -s 1280x720 -r 30 -q:v 1 -preset ultrafast image.mpg"

parts := strings.Fields(command)
cmd := exec.Command(parts[0], parts[1:]...)
cmd.Stderr = os.Stderr
cmd.Stdout = os.Stdout
err := cmd.Run()
if err != nil {
panic(err)
}

当我尝试运行这段代码时得到的 ffmpeg 错误是:

[AVFilterGraph @ 0x22a9bc0] No such filter: 'fade=in:0:15,fade=out:105:15'

Error opening filters!

2016/08/17 17:48:53 exit status 1

如我之前所述,如果我复制 EXACT 命令:

ffmpeg -y -loop 1 -i image.png -vf 'fade=in:0:15,fade=out:105:15' -c:v mpeg2video -t 5 -s 1280x720 -r 30 -q:v 1 -preset ultrafast image.mpg

直接在终端运行,没问题。

请帮忙。

最佳答案

当您使用 strings.Fields(command) 时,字段将按空格拆分。这导致 parts slice 包含一个带引号的值 'fade=in:0:15,fade=out:105:15'。这个完整的值(带引号)被传递给 ffmpeg 命令,该命令无法识别。

shell 会去掉这些引号并传递字符串 fade=in:0:15,fade=out:105:15 只有 Go 不会这样做。要修复,请尝试:

// remove the quotes around fade=in:0:15,fade=out:105:15
command := "ffmpeg -y -loop 1 -i image.png -vf fade=in:0:15,fade=out:105:15 -c:v mpeg2video -t 5 -s 1280x720 -r 30 -q:v 1 -preset ultrafast image.mpg"

parts := strings.Fields(command)

关于Golang 命令在终端中工作但不与 exec 包一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39003365/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com