thinkphp6使用php-ffmepg (windows)

使用php-ffmpeg之前需要 先下载ffmpeg,官网:http://ffmpeg.org/
在这里插入图片描述点击Download跳转到下面的页面在这里插入图片描述点击红框跳转到下面的页面
在这里插入图片描述
下载后解压
在这里插入图片描述
完成上面的步骤后使用composer下载php-ffmpeg

composer require php-ffmpeg/php-ffmpeg

示例代码(app/controller/Index)和使用代码(app/controller/getScreenshot):

<?php
namespace app\controller;

use app\BaseController;
use FFMpeg\FFMpeg;
use FFMpeg\FFProbe;
use FFMpeg\Coordinate\TimeCode;
use FFMpeg\Coordinate\Dimension;
use FFMpeg\Format\Video\WMV;
use FFMpeg\Format\Audio\Wav;
class Index extends BaseController
{
    public function getScreenshot(){
        ini_set('memory_limit',-1); //没有内存限制
        set_time_limit(0);//不限制执行时间
        //ffmpeg配置
        $path = [
            'ffmpeg.binaries'  => 'E:/phpstudy_pro\WWW/video/video-php/public/ffmpeg/bin/ffmpeg.exe',
            'ffprobe.binaries' => 'E:/phpstudy_pro/WWW/video/video-php/public/ffmpeg/bin/ffprobe.exe',
            'timeout' => 3600,//基础进程的超时
            'ffmpeg.threads' => 12//FFMpeg应使用的线程数
        ];
        $ffmpeg = FFMpeg::create($path);
        $ffprobe= FFProbe::create($path);
        //视频文件夹
        $video_dir    = root_path().'public/static/assets/mp4';
//        $videoInfo=$ffprobe->format($video_dir."/bear.mp4");//也可以使用get获取特定值,第二个参数为默认值(若该参数不存在将返回此默认值)
        //时长 s
        echo "执行开始".date("Y-m-d H:i:s")."\n";
        //获取视频名称
        $video_array = scandir($video_dir);
        unset($video_array[0]);
        unset($video_array[1]);
        $copy_jpg = root_path().'public/static/assets/jpg'.date("Ymd");
        if (!is_dir($copy_jpg)) {
            // 创建文件加
            mkdir($copy_jpg, 0777, true);
        }else{
            deldir($copy_jpg);
        }
        foreach ($video_array as $key=>$val){
            $file = $video_dir."/".$val;
            $duration=$ffprobe->format($file)->get('duration',100);//获取视频时长
            $random = rand(1,intval($duration));//截去毫秒并生成一个随机数(不需要可改为固定数(不超过视频时长))
            //截去视频图片并保存
            $video = $ffmpeg->open($file);
            $jpgName = pathinfo($file,PATHINFO_FILENAME).".jpg";
            $video->frame(TimeCode::fromSeconds($random))->save($copy_jpg.'/'.$jpgName);
            echo "执行成功源文件".$file.",截图为".$copy_jpg.'/'.$jpgName."\n";
//            die;
        }
        echo "执行结束".date("Y-m-d H:i:s")."\n";
    }
    //示例
    public function index()
    {
        // 创建
        $path = [
            'ffmpeg.binaries'  => 'E:/phpstudy_pro\WWW/video/video-php/public/ffmpeg/bin/ffmpeg.exe',
            'ffprobe.binaries' => 'E:/phpstudy_pro/WWW/video/video-php/public/ffmpeg/bin/ffprobe.exe',
            'timeout' => 3600,//基础进程的超时
            'ffmpeg.threads' => 12//FFMpeg应使用的线程数
        ];

        $ffmpeg = FFMpeg::create($path);
//        // 音频资源
        $newAudio = root_path().'/public/static/assets/new.mp3';
        $audio1 = root_path().'/public/static/assets/horse.mp3';
        $audio2 = root_path().'/public/static/assets/cuocuocuo.mp3';

        // 生成音频波形
        $audio = $ffmpeg->open($audio1);
        $waveform = $audio->waveform(640, 120, array('#00FF00'));
        $waveform->save(root_path().'/public/static/assets/waveform.png');

        // 拼接音频
        $audio = $ffmpeg->open($audio1);
        $audio->concat([$audio1, $audio2])->saveFromSameCodecs($newAudio);

        // 转换音频格式(wav)
        $audio = $ffmpeg->open($audio1);
        $audio->save(new Wav(), root_path().'/public/static/assets/horse.wav');

        // 转换视频格式(wmv)
        $video = $ffmpeg->open(root_path().'/public/static/assets/bear.mp4');
        $video->save(new WMV(), root_path().'/public/static/assets/bear.wmv');

        // 截取视频图片
        $file = root_path().'static/assets/bear.mp4';
        $video = $ffmpeg->open($file);
        $video->frame(TimeCode::fromSeconds(12))->save(root_path().'/static/assets/frame.jpg');
        echo "成功";

        // 生成视屏动态
        $video = $ffmpeg->open(root_path().'/public/static/assets/bear.mp4');
        $video
            ->gif(TimeCode::fromSeconds(2), new Dimension(640, 480), 3)
            ->save(root_path().'/public/static/assets/bear.gif');
        //获取视频信息or时长
        $ffprobe=FFProbe::create($path);
        $videoInfo=$ffprobe->format($file);//也可以使用get获取特定值,第二个参数为默认值(若该参数不存在将返回此默认值)
        $duration=$ffprobe->format($file)->get('duration',100);
        dump($videoInfo);
        dump($duration);

    }
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值