php 7.4 中使用 php-ffmpeg 批量处理视频需先安装 ffmpeg 和 php-ffmpeg 库,再通过循环调用实现转码、截图、裁剪、合并等操作,并注意异常捕获、路径配置、超时设置及进度提示。

PHP 7.4 中使用 php-ffmpeg 批量处理视频,核心是借助 PHP-FFMpeg 库封装 FFmpeg 命令行能力,通过 PHP 脚本循环调用实现批量操作。需注意:该库本身不包含 FFmpeg,必须单独安装并确保 PHP 可执行它。
环境准备:装好 FFmpeg 和 php-ffmpeg
先确认系统已安装 FFmpeg 并加入 PATH(Linux/macOS 运行 ffmpeg -version,Windows 检查命令行能否调用)。再用 Composer 安装库:
若提示找不到 ffprobe,可手动指定路径(常见于 Windows 或自定义安装):
$ffmpeg = FFMpeg\FFMpeg::create([
'ffmpeg.binaries' => '/usr/local/bin/ffmpeg',
'ffprobe.binaries' => '/usr/local/bin/ffprobe',
'timeout' => 3600, // 长视频需延长超时
]);
批量转码:统一调整分辨率与格式
例如将一个目录下所有 MP4 视频转为 720p MP4(H.264+AAC):
- 遍历
glob('videos/*.mp4')获取文件列表 - 对每个文件创建媒体对象:
$video = $ffmpeg->open($path); - 设置格式与尺寸:
$format = new FFMpeg\Format\Video\X264('aac');+$format->setKiloBitrate(1500)->setResize(1280, 720); - 导出:
$video->save($format, "output/{$basename}_720p.mp4");
建议加 try-catch 捕获异常(如编码失败、文件损坏),并记录日志跳过问题文件,避免中断整个流程。
批量抽帧/截图:按时间点或间隔生成缩略图
适合为视频集生成封面或预览图:
- 用
$video->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(5))提取第 5 秒帧 - 或用
addFilter()实现每 10 秒截一张:$video->filters()->interval('00:00:10'); - 保存为 PNG:
$frame->save("thumbs/{$name}_t{$sec}.png");
注意:截图前建议先用 $video->getDurationInSeconds() 获取时长,防止指定时间超出范围。
批量合并或裁剪:按配置文件执行不同操作
可读取 JSON/CSV 配置(如 [{"file":"a.mp4","start":"00:01:20","end":"00:02:30","out":"clip_a.mp4"}]):
- 循环解析每项,用
$video->clip(FFMpeg\Coordinate\TimeCode::fromString($start), FFMpeg\Coordinate\TimeCode::fromString($end)) - 保存时注意输出路径唯一性,避免覆盖;可用
md5_file()判断是否已处理过 - 如需合并多个视频,需先转成相同编码参数(推荐先统一转为 MPEG-TS),再用
concat()格式拼接
批量任务建议加进度提示(如 echo "$i/$total: {$file} → done\n";),或用 pcntl_fork() 简单并发(仅限 CLI 模式且需谨慎资源占用)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











