在Python310环境的Google Cloud Function中找不到ffmpeg的问题
解决Google Cloud Functions Python 3.10环境找不到ffmpeg的问题
问题原因
Google Cloud Functions(GCF)的Python 3.10及更高版本运行时,已不再默认预装ffmpeg,这是官方文档未及时更新导致的版本差异。另外你之前的find命令因参数错误(多余的双引号),也无法正确定位文件。
修复步骤
1. 修正find命令(验证文件是否存在)
你之前的find命令参数中,"-name","\"ffmpeg\""会让系统查找带双引号的文件名,正确写法应该去掉引号:
import subprocess def find_ffmpeg(request): cmd = ['find', '/', '-name', 'ffmpeg'] ffmpeg = subprocess.Popen(cmd, stdout=subprocess.PIPE) out, err = ffmpeg.communicate() return out
如果执行后仍无结果,说明当前环境确实没有预装ffmpeg。
2. 手动添加ffmpeg的三种方法
方法一:使用GCF层(推荐)
层是GCF中共享依赖的最佳方式,避免每次冷启动重复安装:
- 下载对应架构(GCF默认是x86_64 Linux)的ffmpeg预编译二进制文件
- 将二进制文件放在
bin/目录下,打包成zip包(zip根目录要直接包含bin/,不要嵌套文件夹) - 在GCF控制台或通过gcloud命令将该zip上传为层
- 在你的函数配置中添加该层,部署后ffmpeg会位于
/opt/bin/ffmpeg,调用时使用绝对路径即可:subprocess.Popen(["/opt/bin/ffmpeg", "-i", "input.mp4", "output.mp4"])
方法二:函数启动时自动安装
适合临时测试,但会增加冷启动时间:
import subprocess import os def ensure_ffmpeg(): # 检查ffmpeg是否已安装 if not os.path.exists("/usr/bin/ffmpeg"): # 更新apt源并安装ffmpeg subprocess.run(["apt-get", "update"], check=True, capture_output=True) subprocess.run(["apt-get", "install", "-y", "ffmpeg"], check=True, capture_output=True) def your_function(request): ensure_ffmpeg() # 执行ffmpeg命令 result = subprocess.run(["/usr/bin/ffmpeg", "-version"], capture_output=True, text=True) return result.stdout
方法三:打包ffmpeg二进制到函数代码
将ffmpeg二进制文件直接放在你的函数代码目录中,部署时一起上传:
- 下载对应架构的ffmpeg二进制,放在函数根目录
- 给二进制文件添加执行权限:
chmod +x ffmpeg - 调用时使用相对路径或绝对路径:
subprocess.Popen(["./ffmpeg", "-i", "input.mp4", "output.mp4"])
内容的提问来源于stack exchange,提问作者Valentin Gabriel Raduti
相关产品推荐
相关产品推荐

