在Golang exec中使用管道运行命令
我试图通过使用phantomjs录制一个网页并将stdout(即图像)传输到ffmpeg命令来创建视频来获取示例。您需要运行的命令是:在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 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))
管道是外壳结构,不是命令参数,请参见管道是外壳结构,不是命令参数,请参见