我正试图在谷歌应用引擎标准版上运行的Go应用程序中使用FFmpeg。当我使用exec指向FFmpeg二进制文件的本地实例时,我可以让它在本地运行。命令((
cmd := exec.Command(
"/Users/justin/Desktop/conversion/ffmpeg", // this won't work on a remote server
"-i", "pipe:0",
"-ac", "1",
"-codec:a", "libmp3lame",
"-b:a", "48k",
"-ar", "24000",
"-f", "mp3",
"pipe:1",
)
cmd.Stdin = bytes.NewReader(synthResp.AudioContent)
var output bytes.Buffer
cmd.Stdout = &output
err = cmd.Run()
显然,当我部署应用程序时,这将不起作用,所以我需要一种方法来指向FFmpeg二进制文件的托管版本。ffmpeg
似乎是go1.11应用程序引擎标准环境的系统包。
什么是"系统包",我如何使用它们当我查找文档时,我发现有很多关于apt-get
的文档,而没有关于如何使用它们、应用程序引擎或其他方面的文档。我需要安装它吗,还是它应该已经是应用程序引擎正在运行的容器(?(的一部分?
我称它为可执行文件吗?如果是这样的话,我希望它能起作用,但它不能
cmd := exec.Command(
"ffmpeg", // <------ what should this be?
"-i", "pipe:0",
"-ac", "1",
"-codec:a", "libmp3lame",
"-b:a", "48k",
"-ar", "24000",
"-f", "mp3",
"pipe:1",
)
cmd.Stdin = bytes.NewReader(synthResp.AudioContent)
var output bytes.Buffer
cmd.Stdout = &output
err = cmd.Run()
日志错误,我看到exec: "ffmpeg": executable file not found in $PATH
感谢@iLoveReflection提出的问题,我意识到本地运行的应用程序版本将调用ffmpeg
命令,期望它位于标准$PATH环境变量所指向的位置。我原以为AppEngine会识别对ffmpeg
的调用,并使用它安装在自定义位置的可执行文件。
将ffmpeg
可执行文件移动到/usr/local/bin
,并确保$PATH包含该目录,解决了该问题。