在Golang exec中使用管道运行命令

在Golang exec中使用管道运行命令,go,ffmpeg,Go,Ffmpeg,我试图通过使用phantomjs录制一个网页并将stdout(即图像)传输到ffmpeg命令来创建视频来获取示例。您需要运行的命令是: phantomjs runner.js | ffmpeg -y -c:v png -f image2pipe -r 25 -t 10 -i - -c:v libx264 -pix_fmt yuv420p -movflags +faststart dragon.mp4 如果我直接在终端中运行该命令的类似版本,我可以让它正常工作。问题是我需要通过Golang包运

我试图通过使用phantomjs录制一个网页并将stdout(即图像)传输到ffmpeg命令来创建视频来获取示例。您需要运行的命令是:

phantomjs runner.js | ffmpeg -y -c:v png -f image2pipe -r 25 -t 10  -i - -c:v libx264 -pix_fmt yuv420p -movflags +faststart dragon.mp4
如果我直接在终端中运行该命令的类似版本,我可以让它正常工作。问题是我需要通过Golang包运行上述命令。与:

cmd := exec.Command(parts[0], parts[1:]...)

方法,第一个参数是正在执行的命令的基本可执行文件,它不尊重管道。我想让它在一个命令中工作,这样我就不必将所有图像写入文件,然后运行第二个ffmpeg命令来读取所有这些图像。有什么建议吗

我想这对你有帮助

     cmd := "phantomjs runner.js | ffmpeg -y -c:v png -f image2pipe -r 25 -t 10  -i - -c:v libx264 -pix_fmt yuv420p -movflags +faststart dragon.mp4"
     output, err := exec.Command("bash","-c",cmd).Output()
     if err != nil {
            return fmt.Sprintf("Failed to execute command: %s", cmd)
     }
     fmt.Println(string(output))

我想这对你有帮助

     cmd := "phantomjs runner.js | ffmpeg -y -c:v png -f image2pipe -r 25 -t 10  -i - -c:v libx264 -pix_fmt yuv420p -movflags +faststart dragon.mp4"
     output, err := exec.Command("bash","-c",cmd).Output()
     if err != nil {
            return fmt.Sprintf("Failed to execute command: %s", cmd)
     }
     fmt.Println(string(output))

管道是外壳结构,不是命令参数,请参见管道是外壳结构,不是命令参数,请参见