Laravel 10.x 里如何使用ffmpeg

这篇具有很好参考价值的文章主要介绍了Laravel 10.x 里如何使用ffmpeg。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原理上很简单,就是使用命令行去调用ffmpeg,然后分析一下输出是不是有错误。

安装

首先安装 symfony/process,主要用于包装一下,用来代替 exec, passthru, shell_exec and system 。

composer require symfony/process
composer require symfony/filesystem

要注意 Laravel 10.x 是锁定 symfony 6.4的,所以无法安装最新的 7.0 ,但用起来也没什么问题。

创建服务

照例创建服务,服务类:VideoMakerService,接口类:VideoMakerContract,服务提供类:VideoMakerProvider,快捷名称:videomaker,Facade类:VideoMaker

参考 保姆级教程:Laravel中添加Service

暂时就提供一个服务,把图片生成几秒视频。

    public function imageToBaseVideo(string $imageFile, string $targetFile, float $duration): bool{
        // $workingDir=$this->ffmpegTempDir;
        $params=[
            $this->ffmpegFile,
            '-loop', '1',
            '-framerate', '30',
            '-i', $imageFile,
            '-vf', 'scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2,setsar=1',
            '-c:v', 'libx264',
            '-t', $duration,
            '-y',
            $targetFile,
        ];
        return ExecHelper::run($params);
    }

这里使用了 ExecHelper 来运行,只是对Process做了包装

class ExecHelper{

    public static function run(array $params){
        $success=false;
        $process = new Process($params);
        $code=$process->run(function ($type, $buffer): void {
            if (Process::ERR === $type) {
                Log::debug('ERR > ', $buffer);
            } else {
                Log::debug('OUT > ', $buffer);
            }
        });
        $success=$code===0;

        return $success;
    }
}

创建命令行

命令行类:ProcessVideo

    public function handle(VideoMakerContract $videoMakerContract)
    {
        $imageFile = $this->argument('imageFile');
        $targetFile = $this->argument('targetFile');
        $duration = $this->option('duration');
        // print params
        $this->info('imageFile: '.$imageFile.' , targetFile: '.$targetFile.' , duration: '.$duration);
        // convert to absolute path
        $imageFile=PathHelper::toAbsolutePath($imageFile);
        // validate imageFile
        if(!file_exists($imageFile)){
            $this->error('imageFile not exists');
            return;
        }
        $targetFile=PathHelper::toAbsolutePath($targetFile);
        // validate targetFile
        if(!file_exists($targetFile)){
            $this->error('targetFile not exists');
            return;
        }
        // validate duration
        if(!is_numeric($duration)){
            $this->error('duration must be numeric');
            return;
        }
        $success=$videoMakerContract->imageToBaseVideo($imageFile, $targetFile, $duration);

        $this->info('success: '.$success);
    }

参考:保姆级教程:Laravel里如何创建自己的命令行 

这里面用到PathHelper就是简要地补全一下路径

class PathHelper{
    public static function toAbsolutePath(string $path): string{
        return Path::makeAbsolute($path, self::currentPath());
    }

    public static function currentPath(): string{
        return realpath('.');
    }
}

准备好图片

复制任意一张图片到 storage/app/tmp/t.jpg

运行命令行

./artisan process:video ./storage/app/tmp/t.jpg ./storage/app/tmp/t.mp4 --duration=5

 Laravel 10.x 里如何使用ffmpeg,ffmpeg,php,laravel,laravel,php

轻松生成 t.mp4 ,ffmpeg 的参数可以参考专栏里其他文章文章来源地址https://www.toymoban.com/news/detail-817616.html

到了这里,关于Laravel 10.x 里如何使用ffmpeg的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PHP的Laravel的数据库迁移

    在终端输入以下代码 php artisan migrate 我的报错啦!!!!! 数据库里面只有两张表,实际上应该有四张的!!! 反正表已经迁移完成了,就把迁移完成的表的内容注释掉,接着执行php artisan migrate,得到下一个表的内容。 然后依次类推直至所有表都创建完成!!! 当然啦!

    2024年02月04日
    浏览(56)
  • PHP Laravel 路由、中间件、数据库等例子

    以下是使用Laravel框架时的一些常见示例: 1. 路由(Routes): // 定义基本路由 Route::get(\\\'/home\\\', \\\'HomeController@index\\\'); // 带有参数的路由 Route::get(\\\'/user/{id}\\\', \\\'UserController@show\\\'); // 路由组 Route::middleware([\\\'auth\\\'])-group(function () {     Route::get(\\\'/dashboard\\\', \\\'DashboardController@index\\\');     Route::pos

    2024年02月16日
    浏览(56)
  • laravel如何使用scout+elasticsearch搜索,并支持IK分词

    本扩展包支持IK分词设置。 在按下文操作前请先阅读 laravel scout 全文搜索文档 安装 您可以通过composer安装软件包 wannanbigpig/laravel-scout-elastic: Laravel 会自动注册驱动服务提供者。 Elasticsearch 配置 安装完成后,您应该使用vendor:publish Artisan命令发布Scout配置文件。该命令将把scou

    2024年02月06日
    浏览(83)
  • 医疗安全不良事件管理系统源码(PHP+ vue+laravel)

    医疗安全不良事件管理系统全套源码 不良事件上报系统源码 不良事件 管理系统 帮助医院梳理建立不良事件上报与管理的一体化解决方案,包含上报内容、归口科室、上报流程及管理办法。提供面向医院的不良事件全过程管理平台,包含事件上报、事件处理、事件追踪、RC

    2024年02月06日
    浏览(59)
  • larvel 中的api.php_Laravel 开发 API

    Laravel10中提示了Target *classController does not exist,为什么呢? 原因是:laravel8开始写法变了。换成了新的写法了 解决方法一: 在路由数组加入 AppHttpControllers 即可。 再次访问URL,搞定。 解决方法二: 打开 appProvidersRouteServiceProvider.php 修改,添加一个namespace变量

    2024年02月06日
    浏览(71)
  • 学习路之PHP--laravel postman 提交表单出现419错误

    问题图片 解决: 白名单 有时候你可能希望设置一组不需要 CSRF 保护的 URL 。例如,如果你正在使用 Stripe 处理付款并使用了他们的 webhook 系统,你会需要从 CSRF 的保护中排除 Stripe webhook 处理程序路由,因为 Stripe 不知道要发送什么样的 CSRF 令牌到你的路由。 通常,你应该把

    2024年01月19日
    浏览(59)
  • 如何使用Laravel的HTTP客户端与外部API交互

    Laravel使API交互对新的和有经验的Web开发人员来说都是轻而易举的。Larvel的HTTP客户端是建立在PHP的Guzzle HTTP客户端之上,让开发者在进行HTTP请求时有更顺畅的体验。它的主要功能包括认证, 路由, 和有效的对象关系映射(ORM). 本文将探讨如何使用Laravel的HTTP客户端来进行请求, 调

    2024年01月21日
    浏览(84)
  • 甘特图控件DHTMLX Gantt教程:dhtmlxGantt 与PHP: Laravel(下)

    DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求,具备完善的甘特图图表库,功能强大,价格便宜,提供丰富而灵活的JavaScript API接口,与各种服务器端技术(PHP,ASP.NET,Java等)简单集成,满足多种定制开发需求

    2024年02月06日
    浏览(75)
  • 【PHP面试题42】Laravel依赖注入实现的原理是怎么样的

    本文已收录于PHP全栈系列专栏:PHP面试专区。 计划将全覆盖PHP开发领域所有的面试题, 对标资深工程师/架构师序列 ,欢迎大家提前关注锁定。 Laravel是一个流行的PHP开发框架,它提供了许多方便和强大的功能来简化开发过程。其中一个关键功能是依赖注入(Dependency Injecti

    2024年02月16日
    浏览(41)
  • php项目laravel框架下在yapi接口文档中运行生产环境的接口

    在 Laravel 中运行 YApi 项目需要经过以下步骤: 1. 安装 Node.js 和 YApi 首先需要在服务器上安装 Node.js 和 YApi,可以按照官方文档进行安装。如果您已经安装了 Node.js,可以使用以下命令安装 YApi: 2. 创建 YApi 项目 在 Laravel 项目的根目录下创建一个新的目录,用于存放 YApi 项目。

    2024年01月25日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包