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);

}

}

相关推荐
小此方2 小时前
Linux网络(二十):TCP拥塞控制与延迟应答详解:从拥塞窗口到TCP性能优化,理解TCP与UDP的效率差异
linux·网络·php
专业程序开发源3 小时前
springboot高校学生社团管理系统74810-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
AC赳赳老秦4 小时前
OpenClaw 与 FineBI 联动方案:公开数据自动采集与实时业务分析看板实践
大数据·开发语言·python·php·finebi·deepseek·openclaw
AIGC小尼4 小时前
8G 显存零基础本地部署 AI 漫剧全流程|ComfyUI+Wan2.2+FFmpeg 离线成片完整方案(含代码 / 指令 / 排坑)
人工智能·ffmpeg·php·comfyui·ai漫剧
新鲜势力呀5 小时前
PHP 文件上传系统实战:从上传卡顿到分片上传 + 秒传 + 云存储架构完整优化方案
开发语言·架构·php
专业程序开发源5 小时前
flask动漫推荐系统32319-计算机课程设计、毕业设计
java·spring boot·后端·django·flask·php·课程设计
寺中人1 天前
Xshell 完全入门指南:从安装到实战,远程连接+文件传输+会话管理全拆解
git·ssh·github·php·远程连接·xshell·运维工具
hengdonghui1 天前
Writeup 4 津门杯 2021 Web hate_php
php·web·ctf·通配符
现任明教教主~1 天前
企业查询系统源码
php
派小心.1 天前
页面关闭前埋点丢失:sendBeacon验收
开发语言·php