
本文介绍在无法直接安装系统级 ffmpeg 的共享主机上,通过上传静态编译版 ffmpeg/ffprobe 二进制文件,并在 laravel 中正确配置 php-ffmpeg 扩展的方法。
本文介绍在无法直接安装系统级 ffmpeg 的共享主机上,通过上传静态编译版 ffmpeg/ffprobe 二进制文件,并在 laravel 中正确配置 php-ffmpeg 扩展的方法。
在共享主机(Shared Hosting)环境中,由于权限限制,通常无法通过 apt、yum 或 brew 安装系统级 FFmpeg,也无法修改 PATH 环境变量或执行 sudo 命令。此时,推荐使用静态编译版 FFmpeg(Static Builds)——它不依赖外部库,单文件即可运行,适合无 root 权限的托管环境。
✅ 步骤一:下载并上传静态二进制文件
前往官方可信源下载静态构建版本:
? https://www.php.cn/link/8eeb60739056599c49ec611385593697
选择最新稳定版的 Linux 64-bit 静态包(如 ffmpeg-git-amd64-static.tar.xz),解压后将其中的 ffmpeg 和 ffprobe 两个可执行文件上传至你的共享主机(例如:/home/username/public_html/ffmpeg-bin/)。
⚠️ 注意事项:
- 确保上传后文件具有可执行权限(可通过 FTP 客户端或
chmod 755 ffmpeg ffprobe设置;若无 SSH 权限,请联系主机商确认是否支持执行上传的二进制文件); - 路径需使用绝对路径(可通过
<?php echo $_SERVER['DOCUMENT_ROOT']; ?>辅助定位); - 避免放在 Web 可访问目录(如
public/),防止被恶意直接调用,建议存放于app/同级的非公开目录(如/home/username/ffmpeg-bin/)。
✅ 步骤二:Laravel 中配置 PHP-FFMpeg
确保已通过 Composer 安装 php-ffmpeg/php-ffmpeg:
composer require php-ffmpeg/php-ffmpeg
在需要使用 FFmpeg 的位置(如控制器或服务类),显式指定二进制路径:
use FFMpeg\FFMpeg;
$ffmpeg = FFMpeg::create([
'ffmpeg.binaries' => '/home/username/ffmpeg-bin/ffmpeg',
'ffprobe.binaries' => '/home/username/ffmpeg-bin/ffprobe',
'timeout' => 3600, // 根据长任务需求适当延长
]);
// 示例:转码 MP4 为 720p 并保存
$video = $ffmpeg->open('/path/to/input.mp4');
$video->filters()
->resize(new \FFMpeg\Coordinate\Dimension(1280, 720))
->synchronize();
$video->save(new \FFMpeg\Format\Video\X264(), '/path/to/output.mp4');✅ 补充建议
- 若遇到
Permission denied错误,请确认二进制文件权限为755,且所在目录无noexec挂载限制(部分共享主机禁用exec(),此时需改用 API 方式转码或迁移至 VPS); - 可封装为 Laravel Service Provider 或 Facade,实现全局复用与路径统一管理;
- 生产环境务必添加异常捕获(
try/catch)并记录 FFmpeg 错误输出,便于调试。
通过以上方式,你无需系统级权限即可在 Laravel 共享主机项目中稳定集成音视频处理能力。


















