常见原因是未安装或未配置系统级ffmpeg,php-ffmpeg是纯php封装库,依赖ffmpeg可执行文件;需确保终端能运行ffmpeg -version,windows要加bin目录到path,macos推荐brew install ffmpeg --with-libvpx --with-libvmaf,ubuntu建议添加ppa:savoury1/ffmpeg4源。

Composer 安装 php-ffmpeg 失败,常见原因是什么?
php-ffmpeg 本身不是 PHP 扩展,而是一个纯 PHP 封装库,它依赖系统级的 ffmpeg 可执行文件。很多人用 Composer 装完 php-ffmpeg 后一调用就报错,根本不是 Composer 没装上,而是压根没装或没配好系统里的 ffmpeg。
- 确保终端里能直接运行
ffmpeg -version,返回版本号才算真正可用 - Windows 用户别只下官网的 zip 包,解压后必须把
bin/目录加进系统PATH,否则 PHP 进程找不到命令 - macOS 用 Homebrew 安装推荐
brew install ffmpeg --with-libvpx --with-libvmaf(基础版可能缺 WebM 或质量分析支持) - Linux(如 Ubuntu)别用系统源里老旧的
ffmpeg(比如 3.x),建议用apt install ffmpeg前先加ppa:savoury1/ffmpeg4源
怎么用 Composer 正确引入 php-ffmpeg 到项目中?
php-ffmpeg 的官方包名是 php-ffmpeg/php-ffmpeg,不是 ffmpeg 或 php-ffmpeg 单词拼写。装错包名会导致类自动加载失败,new FFmpeg\FFMpeg() 直接报 Class not found。
- 运行
composer require php-ffmpeg/php-ffmpeg(注意斜杠,不是短横线) - 如果项目已禁用自动加载优化,装完后补一句
composer dump-autoload - 不要手动 require 或 include 类文件——这个包完全走 PSR-4 自动加载,只要命名空间对、
use对就行 - Laravel 用户注意:Laravel 9+ 默认启用了 classmap 优化,但
php-ffmpeg的部分工具类(如FFProbe)路径较深,建议在composer.json的"autoload"下加一行"psr-4": {"FFMpeg\": "vendor/php-ffmpeg/php-ffmpeg/src/FFMpeg/"}(非必须,但可避免某些环境下的加载延迟)
视频转码时卡住或报 “Unable to load FFProbe” 怎么办?
这个错误几乎都指向 ffprobe 不可用。php-ffmpeg 默认用 ffprobe 分析输入文件元信息(时长、码率、帧率等),没有它,连 open() 都会失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先确认
ffprobe -version能正常执行,它和ffmpeg通常在同一目录 - 在代码里显式指定路径比依赖环境变量更稳:
$ffmpeg = FFMpeg\FFMpeg::create([ 'ffmpeg.binaries' => '/usr/local/bin/ffmpeg', 'ffprobe.binaries' => '/usr/local/bin/ffprobe', ]);
- 如果服务器不允许执行系统命令(如某些共享主机),这条路根本走不通——
php-ffmpeg无法纯 PHP 实现解析,别白费时间折腾 - Docker 用户注意:基础
php:alpine镜像默认不含ffmpeg,要用apk add ffmpeg显式安装,且确保ffprobe也在 PATH 中(Alpine 的 ffmpeg 包通常自带)
截图或转码后文件为空/损坏,参数设置要注意什么?
save() 成功不代表文件真的能播。常见陷阱是格式不匹配、编码器不可用、或关键参数漏设。
- 截图务必用
frameAt()+save(),别用getFrameFromSeconds()(已废弃),也别漏掉->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(5))这种完整链式调用 - 转 MP4 时如果输出黑屏,大概率是没指定视频编码器:
->setVideoCodec('libx264')必须显式写,不能依赖默认值 - 音频流容易被意外丢弃:加
->copyAudio(false)是为了去掉音频,但如果原视频没音频,这句反而导致 mux 失败;不确定时先用->addFilter('-vcodec libx264 -acodec aac')显式声明编解码器 - 输出路径要有写权限,且父目录必须存在——
php-ffmpeg不会自动创建多层目录,mkdir -p /path/to/out得自己来
实际跑通的关键,从来不是 Composer 装没装上,而是你有没有亲眼看到 ffmpeg -i input.mp4 -ss 5 -vframes 1 out.jpg 这条命令在 shell 里真能执行出图。其它都是在这之上的封装。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










