PHP使用php-ffmpeg剪辑视频需先系统安装FFmpeg并配置路径,再用Composer安装库;核心是初始化FFMpeg实例、加载视频、调用clip()或filters()->trim()按秒级时间截取,并指定X264等编码格式导出。

PHP 使用 php-ffmpeg 剪辑视频片段,核心是通过 FFmpeg 的 PHP 封装库操作音视频流,实现按时间截取(trim)、拼接、转码等。关键在于正确初始化 FFMpeg 实例、加载媒体、设置剪辑起止时间,并导出新文件。
安装 php-ffmpeg 及依赖
该库本身不包含 FFmpeg 二进制程序,需系统级安装 FFmpeg 并确保 PHP 能调用它:
- 在服务器上安装原生 FFmpeg(如 Ubuntu 执行
sudo apt install ffmpeg) - 用 Composer 安装 PHP 包:
composer require php-ffmpeg/php-ffmpeg - 确认 PHP 进程有权限执行
ffmpeg命令(可通过exec('which ffmpeg')测试)
基础剪辑:按时间截取一段视频
使用 clip() 方法指定起始时间和持续时长(单位:秒),或用 filters()->trim() 更灵活控制:
$ffmpeg = FFMpeg\FFMpeg::create([
'ffmpeg.binaries' => '/usr/bin/ffmpeg',
'ffprobe.binaries' => '/usr/bin/ffprobe',
]);
$video = $ffmpeg->open('/path/to/input.mp4');
// 方式一:clip(起始秒数, 持续秒数)
$video->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(10),
FFMpeg\Coordinate\TimeCode::fromSeconds(5))
->export()
->toDisk('local')
->inFormat(new FFMpeg\Format\Video\X264())
->save('output_clip.mp4');
// 方式二:trim(支持 start/end 精确到毫秒)
$video->filters()->trim(FFMpeg\Coordinate\TimeCode::fromSeconds(10),
FFMpeg\Coordinate\TimeCode::fromSeconds(15))
->export()
->toDisk('local')
->inFormat(new FFMpeg\Format\Video\X264())
->save('output_trim.mp4');
导出时注意编码与兼容性
直接剪辑不重编码会快很多(使用 -c copy),但仅当输入格式支持精确帧切割时才可靠;多数情况建议显式指定编码器以保证输出稳定:
立即学习“PHP免费学习笔记(深入)”;
- 用
X264格式可设 CRF、preset 等参数提升质量/速度平衡 - 添加音频流处理(如静音、音量调整)需额外调用
filters() - 若源视频含 B 帧,纯 copy 可能导致首尾几帧不准,此时 trim + 编码更稳妥
常见问题处理
剪辑失败通常源于路径、权限或时间参数错误:
- 报错 “Unable to probe video”:检查文件路径是否可读、
ffprobe是否可用 - 输出黑屏/无声:确认源文件有有效音视频流(可用
ffprobe -v quiet -show_entries stream=codec_type -of csv input.mp4验证) - 时间不准确:避免用字符串传时间(如
'00:00:10'),统一用TimeCode::fromSeconds()或::fromString() - 大文件超时:在导出前加
setTimeOut(0)防止 PHP 脚本中断



















