>  기사  >  PHP 프레임워크  >  laravel이 FFmpeg를 설치하고 비디오 파일을 처리하는 방법에 대한 자세한 설명

laravel이 FFmpeg를 설치하고 비디오 파일을 처리하는 방법에 대한 자세한 설명

藏色散人
藏色散人앞으로
2021-08-02 14:34:322724검색

Ubuntu 18.04 FFmpeg 설치

1. 소스 코드 다운로드, 컴파일 및 설치

1.1 소스 코드 다운로드

github 주소: github.com/PHP-FFMpeg/PHP-FFMpeg

1.2 종속 라이브러리 설치

세 가지 주요 설치가 있습니다: yasm, sdl1.2 및 sdl2.0

安装 yasmsudo apt-get install yasm
安装sdl1.2sudo apt-get install libsdl1.2-dev
安装 sdl2.0sudo apt-get install libstdl2-devsudo apt-get install libstdl2-dev

sdl2.0 설치에 오류가 있는 경우 컴파일 및 설치 방법을 선택할 수 있습니다.
최신 버전 다운로드 버전은 공식 웹사이트에서: www.libsdl.org/download-2.0.php
압축 해제 후 해당 디렉터리에 들어가서 다음 명령을 순서대로 실행합니다.

./configure
make
sudo make install


1.3 ffmpeg 컴파일 및 설치
ffmpeg 폴더에 들어가서 다음 명령을 실행합니다. 다음 명령을 순서대로 실행하세요.

 ./configuremakesudo make install

여기에 그림 설명 삽입
1.4 설치 성공 여부 테스트

ffmpeg -version
ffplay -version

laravel 설치PHP-FFMpegExtension

composer require php-ffmpeg/php-ffmpeg

기본 사용법
1.1, 프로젝트 소개
The 소개가 완료되면 정상적으로 사용할 수 있도록 두 가지 구성 파일 정보를 공식화해야 합니다. 위에서 언급한 ffmpeg 그리고 ffprobe
1.2, 전역 구성

AppServiceProvider.php에 코드 추가AppServiceProvider.php 中添加代码

    public function boot()
    {
        $this->registerSingleObject();
    }
     private function registerSingleObject()
    {//       $ffmpeg = FFMpeg::create(array(//           'ffmpeg.binaries'  => '/usr/local/ffmpeg/ffmpeg',//           'ffprobe.binaries' => '/usr/local/ffmpeg/ffprobe',//           'timeout'          => 3600, // The timeout for the underlying process//           'ffmpeg.threads'   => 12,   // The number of threads that FFMpeg should use//       ));
        $this->app->singleton('ffmpeg', function ($app) {
            return FFMpeg::create([
                'ffmpeg.binaries'  => '/usr/local/ffmpeg/ffmpeg',
                'ffprobe.binaries' => '/usr/local/ffmpeg/ffprobe',
            ]);
        });
        $this->app->singleton('ffprobe', function ($app) {
            return FFProbe::create([
                'ffprobe.binaries' => '/usr/local/ffmpeg/ffprobe',
            ]);
        });
    }

使用单例模式获取 FFMpegFFProbe 对象,其中 exec('which ffmpeg') 是获取 程序位置信息,以便创建类

基础封装

举例:

  • 视频的第一秒为封面
  • 获取视频基础信息
<?php

namespace AppHelpers;use FFMpegCoordinateTimeCode;use IlluminateSupportStr;class FFMpegUtil{

    // 获取视频信息
    public static function getVideoInfo($streamPath)
    {
        $ffprobe = app(&#39;ffprobe&#39;);
        $stream  = $ffprobe->streams($streamPath)->videos()->first();
        return $stream ? $stream->all() : [];
    }

    // 截取
    public static function getCover($streamPath, $fromSecond)
    {
        $ffmpeg   = app('ffmpeg');
        $video    = $ffmpeg->open($streamPath);
        $frame    = $video->frame(TimeCode::fromSeconds($fromSecond)); //提取第几秒的图像
        $fileName = 'video/' . Str::random(12) . '.jpg';
        if (!is_dir(storage_path("video"))) {
            mkdir(storage_path("video"), 0777);
        }
        $frame->save(storage_path($fileName));
        return $fileName;
    }}

业务使用

接受 Request 对象传入的 视频 为例子

public function saveVideotoQiniu($file)
    {
        Auth::loginUsingId(1);
        if ($user = getUser()) {

            // 1.判断是否存在此视频
            $path  = $file->getRealPath();
            $hash  = md5_file($path);
            $video = Video::firstOrNew(['json->hash' => $hash]);
            if ($video->id) {
                $video->touch();
                return $video;
            }

            // 2.保存到 云
            $cdn_path = $this->saveFile($file);
            $db_path  = getPath($cdn_path);

            // 3.获取截图
            $fileName = FFMpegUtil::getCover($path, 1);
            $image    = $this->saveImage(new UploadedFile(storage_path($fileName), 'file.jpg'));

            //4.设置视频信息
            $data     = [];
            $data     = FFMpegUtil::getVideoInfo($path);
            $duration = array_get($data, 'duration');
            $duration = $duration > 0 ? ceil($duration) : $duration;

            $video->path    = $db_path;
            $video->user_id = $user->id;
            $video->setJsonData('width', array_get($data, 'width'));
            $video->setJsonData('height', array_get($data, 'height'));
            $video->duration = $duration;
            $video->setJsonData('cover', $image->path);
            $video->save();
        }
    }

例子中的 saveImagerrreee

싱글턴 모드를 사용하여 FFMpegFFProbe 객체를 얻습니다. 그 중 exec('which ffmpeg')는 프로그램 위치 정보를 얻는 것입니다. 클래스 생성 순서

basic package🎜🎜예: 🎜
  • 동영상의 첫 번째 초가 표지입니다.
  • li>
  • 기본 동영상 정보 가져오기
  • ul>rrreee🎜🎜🎜업무용🎜🎜Request 객체에서 전달한 영상을 예시로 받아들여🎜rrreee🎜예제의 saveImage는 클라우드에 이미지를 업로드하는 기능으로 업로드된 영상을 반환합니다. 이미지 URL🎜🎜더 많은 Laravel 기술 기사를 보려면 🎜laravel 튜토리얼🎜 칼럼을 방문하세요! 🎜

위 내용은 laravel이 FFmpeg를 설치하고 비디오 파일을 처리하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제