laravel项目中使用FFMPeg 剪裁视频

运行环境需安装的软件

ffmpeg

安装的扩展

pbmedia/laravel-ffmpeg: ^8.3

扩展文档 https://packagist.org/packages/pbmedia/laravel-ffmpeg

引入的类

use FFMpeg\Coordinate\TimeCode;

use FFMpeg\Format\Video\X264;

use FFMpeg\Exception\RuntimeException;

use Illuminate\Support\Facades\Storage;

use Illuminate\Support\Str;

use ProtoneMedia\LaravelFFMpeg\Support\FFMpeg;

处理方法

public function cutUrlVideo($ossVideoPath)

{

$maxDuration = env('CLIP_VIDEO_SECONDS'); // 需要的时长

// 原始视频在 OSS 中的路径

$ossVideoPath = 'uploads/resource/2025/02/27/HzFdjwYQwUehk2WChH1DHAroKXMo0EkrG2lh1gQp.mp4';

// 生成本地临时文件路径

$tempInputPath = 'temp/input_' . uniqid() . '.mp4';

$tempOutputPath = 'temp/output_' . uniqid() . '.mp4';

// 将 OSS 视频下载到本地临时文件

Storage::disk('public')->put(tempInputPath, Storage::disk('oss')-\>get(ossVideoPath));

try {

// 获取下载到本地的媒体对象

media = FFMpeg::fromDisk('public')-\>open(tempInputPath);

// 获取视频总时长(秒)

duration = media->getDurationInSeconds();

// 根据时长判断处理逻辑

if (duration \> maxDuration) {

$start = TimeCode::fromSeconds(0);

end = TimeCode::fromSeconds(maxDuration);

clipFilter = new \\FFMpeg\\Filters\\Video\\ClipFilter(start, $end);

media-\>addFilter(clipFilter)

->export()

->toDisk('public')

->inFormat(new X264)

->save($tempOutputPath);

// 生成最终要使用的文件路径

$folderName = "/uploads/resource/" . date("Y/m/d");

extension = pathinfo(basename(ossVideoPath), PATHINFO_EXTENSION);

newFilename = Str::uuid()-\>toString() . '.' . extension;

// 上传到 OSS

ossPath = "{folderName}/{$newFilename}";

Storage::disk('oss')->put(ossPath, Storage::disk('public')-\>get(tempOutputPath));

return $ossPath;

} else {

return $ossVideoPath;

}

} finally {

// 清理临时文件

Storage::disk('public')->delete([tempInputPath, tempOutputPath]);

}

}

相关推荐
zorro_z11 小时前
ThinkPHP8学习篇(十):模型(二)
php
kali-Myon15 小时前
NewStarCTF2025-Week3-Web
sql·安全·web安全·php·ctf
m0_7482402517 小时前
基于Reactor模式的高性能C++仿Muduo库:Server服务器模块实现
服务器·c++·php
—Qeyser21 小时前
Flutter网络请求Dio封装实战
网络·flutter·php·xcode·android-studio
半桔21 小时前
【IO多路转接】IO 多路复用之 select:从接口解析到服务器实战
linux·服务器·c++·github·php
CRMEB系统商城2 天前
【新版发布】标准版PHP v5.6.4正式版,优化部分用户体验
java·大数据·小程序·php·ux
java_logo2 天前
Docker 部署 WordPress 全流程
运维·docker·容器·word·php·1024程序员节
小小小糖果人3 天前
Linux云计算基础篇(24)-PXE批量安装和Kickstart工具
linux·运维·php
非凡的世界3 天前
PHP 异步IO扩展包 AsyncIO v2.0.0 发布
php·异步·1024程序员节
大孜然4 天前
Macao资料生成程序,全新的UI 三端自适应PHP空间
php