我正在尝试在FFmpeg上运行的Go应用程序中使用Google App Engine Standard。当我使用exec.Command()指向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二进制文件的托管版本。对于go1.11 App Engine标准环境,ffmpeg
似乎是system package。
什么是“系统软件包”以及如何使用它们?
当我寻找文档时,我在apt-get
上找到了很多文档,而没有关于如何使用它们的文档,例如App Engine或其他。我是否需要安装它,或者它应该已经是App Engine运行的容器的一部分?
我会像调用其他可执行文件一样调用它吗?如果是这样,那我希望它能奏效,但不会
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
答案 0 :(得分:1)
感谢@iLoveReflection提出的问题,我意识到该应用程序的本地运行版本将调用ffmpeg
命令,并期望该命令位于标准$ PATH环境变量所指向的位置。我以为App Engine可以识别对ffmpeg
的调用,并使用它安装在自定义位置的可执行文件。
将ffmpeg
可执行文件移至/usr/local/bin
,并确保$ PATH包括该目录,以解决此问题。