laravel处理视频文件,包含视频的剪辑和音频合成

使用FFmpeg

使用composer安装:

$ composer require php-ffmpeg/php-ffmpeg

详细文档

一. 遇到的第一个问题

Unable to load FFProbe in file
问题一:Unable to load FFProbe in file
查阅了很多博客之后,发现得去ffmpeg官网下载安装ffmpeg。
然后在create()中传入参数。(参数为文件路径)

        $config = [
            'ffmpeg.binaries'  => '/var/www/blog/public/ffmpeg/bin/ffmpeg.exe',// the path to the FFProbe binary
            'ffprobe.binaries' =>  '/var/www/blog/public/ffmpeg/bin/ffprobe.exe',// the path to the FFProbe binary
            'timeout'          => 3600, // the timeout for the underlying process
            'ffmpeg.threads'   => 12,   // the number of threads that FFMpeg should use
        ];


        $ffmpeg = FFMpeg::create($config);

(二进制文件指的是后缀为exe的文件)

① 这里出现的一个小问题是应该下载static版而不是开发版。
static目录结构:
在这里插入图片描述
开发版目录结构:
在这里插入图片描述
② 我这里地址路径是在laradock里面的路径。

分割线------------------------------------------------------
我使用的是laradock+laravel,在本地成功之后发现laradock上好像自带ffmpeg,于是迫不及待的试了一试。laradock官方文档
在这里插入图片描述
就是打开.env文件然后把ffmpeg改成true,再build一下,在workspace里面/usr/bin 里面就有ffmpeg和ffprobe文件了。

但是!!!

不知道为什么这里的这两个东西用不了。(有大佬看见希望救救我T T)

根据路径引入之后一直报错Unable to load FFProbe

(或者Your FFProbe version is too old and does not support -help option, please upgrade.

在这里插入图片描述
根本到不了return 111;那里 T T

就在这个地方研究了很久,看了很多博客之后也没有解决问题。

最后有幸发现了这个解释。网站地址在这里插入图片描述

于是最后我又去了ffmpeg官网,在workspace中下载了ffmpeg的开发版。

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

通过.gitignore在工作区中进行了安装。

//关键的几个命令,./configure相关命令可以去百度看看
./configure --enable-shared --prefix=/monchickey/ffmpeg
make
make install

最终得到了可执行的二进制文件
然后再引入这个文件就可以啦。

不过最后有些代码按着文档上的那些方法来写却报错了。感觉可能是下载的版本不对还是别的什么问题,这里我还没深入研究。

直接用了laravel中执行命令的方法来使用了。

        $newname = time() .'_'. rand(10000, 99999999);//制作新名字  没后缀
        $ext_a =  $request->file('audio')->getClientOriginalExtension();//获取后缀名
        //进行剪辑
        if ($audio_time>$video_time){//音频长于视频的时候
            $process = new Process(['/var/www/blog/resources/new_ffmpeg/bin/ffmpeg','-ss','0','-t',$video_time,'-i',$audio_realpath,'-codec','copy','ffmpeg/'.$newname.'.'.$ext_a]);
            $process->run();
// 命令行执行结束
        if (!$process->isSuccessful()) {
            throw new ProcessFailedException($process);
        }
        echo $process->getOutput();//这里可以优化。。。。
        }

最后
在这里插入图片描述
唉,看了好多天博客,虽然还没弄透彻,但是总算功能出来了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值