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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32805.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css基本功

为什么 ::first-letter 是伪元素&#xff1f; ::first-letter 的作用是选择并样式化元素的第一个字母&#xff0c;它创建了一个虚拟的元素来包裹这个字母&#xff0c;因此属于伪元素。 grid布局 案例一 <!DOCTYPE html> <html lang"zh-CN"><head&…

环境配置 | 5分钟极简Git入门:从零上手版本控制

你是否刚接触Git&#xff1f;别担心&#xff01;这篇指南将用最简单的步骤带你掌握Git核心操作&#xff0c;快速开启版本控制之旅&#xff01;✨ 1.git在win10上的下载安装 1.1.下载git 打开官方网站 Git - Downloadshttps://git-scm.com/downloads ​ ​​ 1.2.git安装 …

软件工程概述、软件过程模型、逆向工程(高软45)

系列文章目录 软件工程概述、软件过程模型、逆向工程。 文章目录 系列文章目录前言一、软件工程概述二、能力成熟度模型1.能力成熟度模型CMM2.能力成熟度模型集成CMMI 三、软件过程模型1.瀑布模型SDLC2.原型化模型3.螺旋模型4.增量模型5.喷泉模型6.敏捷模型7.统一过程模型RUP 四…

接口自动化入门 —— Jmeter实现在接口工具中关联接口处理方案

1. JMeter 接口关联处理的核心概念 接口关联是指在多个接口请求之间共享数据&#xff0c;例如将一个接口的返回值作为另一个接口的输入参数。常见的场景包括&#xff1a; 使用登录接口返回的 Token 作为后续接口的认证信息。 将一个接口返回的 ID 作为另一个接口的请求参数。…

websocket学习手册及python实现简单的聊天室

概述 WebSocket 是一种网络通信协议&#xff0c;允许在单个 TCP 连接上进行全双工通信。它最核心的优势就在于实现了持久连接&#xff0c;实现了实时的数据传输。HTTP 协议有一个很大的缺点&#xff0c;通信只能由客户端发起&#xff0c;服务器返回响应后连接就会关闭&#xf…

小白学习:提示工程(什么是prompt)

课程链接 https://www.bilibili.com/video/BV1PX9iYQEry/?spm_id_from333.337.search-card.all.click 一 什么是提示工程 【提示工程】也叫【指令工程】 prompt就是给大模型发的指令&#xff0c;如“给我讲个笑话” 懂得提示工程原理会带来什么优势 懂得原理 为什么有的指…

ROS实践(五)机器人自动导航(robot_navigation)

目录 一、知识点 1. 定位 2. 路径规划 (1)全局路径规划 (2)局部路径规划 3. 避障 二、常用工具和传感器 三、相关功能包 1. move_base(决策规划) 2. amcl(定位) 3. costmap_2d(代价地图) 4. global_planner(全局规划器) 5. local_planner(局部规划器…

分治算法区

分治 一.分治二.经典应用案例三.快速排序&#xff08;1&#xff09;颜色分类&#xff08;2&#xff09;排序数组&#xff08;3&#xff09;数组中第K个最大的元素 四.归并排序1.排序数组2.交易逆序对总数3.计算右侧小于当前元素的个数4.翻转对 一.分治 分治算法是一种通过将复…

设计模式C++

针对一些经典的常见的场景, 给定了一些对应的解决方案&#xff0c;这个就叫设计模式。 设计模式的作用&#xff1a;使代码的可重用性高&#xff0c;可读性强&#xff0c;灵活性好&#xff0c;可维护性强。 设计原则&#xff1a; 单一职责原则&#xff1a;一个类只做一方面的…

零成本搭建Calibre个人数字图书馆支持EPUB MOBI格式远程直读

文章目录 前言1.网络书库软件下载安装2.网络书库服务器设置3.内网穿透工具设置4.公网使用kindle访问内网私人书库 前言 嘿&#xff0c;各位书虫们&#xff01;今天要给大家安利一个超级炫酷的技能——如何在本地Windows电脑上搭建自己的私人云端书库。亚马逊服务停了&#xff…

Qt 数据库操作(Sqlite)

数据库简介 关于数据库的基础知识这里就不做介绍了&#xff0c;相关博客可以查看&#xff1a; SQL基础知识 数据库学霸笔记 上面博客都写的比较详细&#xff0c;本文主要介绍如何使用Qt进行数据库相关操作&#xff0c;数据库分为关系型数据库和非关系型数据&#xff0c;关系…

hackme靶机详细攻略

扫描ip arp-scan -l 访问网站后&#xff0c;点击sign up now注册 注册后登录 点击search显示全部数据 尝试sql注入 确认闭合方式 OSINTand 12# 确定列数 OSINT order by 3# 显示正常 OSINT order by 4# 显示异常 确认回显位置 -1 union select 1,2,3# 确认数据库名 -…

Tweak Power:全方位电脑系统优化的高效工具

在日常使用电脑时&#xff0c;系统性能的下降、垃圾文件的堆积以及硬盘的老化等问题常常困扰着用户。为了提升电脑性能、优化系统运行&#xff0c;许多人会选择系统优化工具。然而&#xff0c;国内一些系统优化软件常常因为广告过多或功能冗杂而让人望而却步。此时&#xff0c;…

element-plus中Autocomplete自动补全输入框组件的使用

目录 1.基本使用 ①从官网赋值如下代码 ②查看运行效果 ③代码解读 2.调用后端接口&#xff0c;动态获取建议数据 结语 1.基本使用 ①从官网赋值如下代码 <template> <div><!-- 自动补全输入框 --><el-autocompletev-model"state":fetc…

SSM基础专项复习6——Spring框架AOP(3)

系列文章 1、SSM基础专项复习1——SSM项目整合-CSDN博客 2、SSM基础专项复习2——Spring 框架&#xff08;1&#xff09;-CSDN博客 3、SSM基础专项复习3——Spring框架&#xff08;2&#xff09;-CSDN博客 4、SSM基础专项复习4——Maven项目管理工具&#xff08;1&#xff…

MATLAB基于ResNet18的交通标志识别系统

1. 数据准备 数据集&#xff1a;该数据集包含了大量标注好的交通标志图片&#xff0c;每类标志都有不同的样本。数据预处理&#xff1a;图像需要进行一些基本的预处理&#xff0c;如调整大小、归一化等&#xff0c;以适应ResNet18的输入要求。 2. 网络设计 使用MATLAB自带的…

【2步解决】phpstudy开机自启(自动启动phpstudy、mysql、nignx或apache、自动打开网址)

重启执行最终效果图&#xff1a; 一、场景 线下部署&#xff0c;需要开启自动动&#xff0c;并打开网址http://localhost/。 二、操作步骤 ①、新建start.txt&#xff0c;并修改为start.bat&#xff0c;使用记事本编辑&#xff0c;粘贴上方代码如下&#xff1a; echo off:…

C++20 `<bit>` 中的整数 2 的幂运算和 `std::bit_cast`:由浅入深的探索

文章目录 引言 1\. 整数 2 的幂运算1.1 检测是否为 2 的幂&#xff1a;std::has_single_bit1.2 计算不小于 x 的最小 2 的幂&#xff1a;std::bit_ceil1.3 计算不大于 x 的最大 2 的幂&#xff1a;std::bit_floor 2\. std::bit_cast2.1 基本用法2.2 实用场景&#xff1a;字节序…

阿里巴巴发布 R1-Omni:首个基于 RLVR 的全模态大语言模型,用于情感识别

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Ubuntu24.04 LTS 版本 Linux 系统在线和离线安装 Docker 和 Docker compose

一、更换软件源并更新系统 在 Ubuntu 24.04 LTS 中&#xff0c;系统引入了全新的软件源配置格式。现在的源配置文件内容更加结构化且清晰&#xff0c;主要包含了软件类型 (Types)、源地址 (URIs)、版本代号 (Suites) 以及组件 (Components) 等信息。 # cat /etc/apt/sources.li…