【问题标题】:Golang command working in terminal but not with exec packageGolang 命令在终端中工作,但不适用于 exec 包
【发布时间】:2016-08-17 17:57:16
【问题描述】:

我正在将视频生成库从 NodeJS 转换为主要使用 FFMPEG 进行所有视频处理的 GO。我已经编写了所有 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] 没有这样的过滤器:'fade=in:0:15,fade=out:105:15'

打开过滤器时出错!

2016/08/17 17:48:53 退出状态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

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

请帮忙。

【问题讨论】:

    标签: go ffmpeg exec


    【解决方案1】:

    当您使用strings.Fields(command) 时,字段将按空格分隔。这导致parts 切片包含一个值'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)
    

    【讨论】:

    • 哇。我不敢相信这解决了它。我的朋友,你是个天才。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 2011-03-28
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多