Home > PHP Framework > Laravel > body text

Detailed explanation of how laravel installs FFmpeg and processes video files

藏色散人
Release: 2021-08-05 09:02:09
forward
2816 people have browsed it

Ubuntu 18.04 Install FFmpeg

1. Download the source code, compile and install

1.1 Download the source code

github address: github.com/PHP-FFMpeg/PHP-FFMpeg

##1.2 Install dependent libraries

There are three main installations: yasm, sdl1 .2 and 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
Copy after login
If there is an error in the installation of sdl2.0, you can choose the compilation and installation method:

Download the latest version from the official website: www.libsdl.org/download-2.0.php
Unzip Then enter the directory and execute the following commands in sequence:

./configure
make
sudo make install
Copy after login

##1.3 Compile and install ffmpeg Enter the ffmpeg folder and execute the following commands in sequence:


 ./configuremakesudo make install
Copy after login
Insert picture description here1.4 Test whether the installation is successful

ffmpeg -version
ffplay -version
Copy after login

laravel installation

PHP-FFMpeg

Extension

composer require php-ffmpeg/php-ffmpeg
Copy after login
Basic use

1.1. Introduction to the project

The introduction is completed. It needs to formulate two configuration file information for us to use normally, which is the ffmpeg and ffprobe mentioned above
1.2. Global configuration

Add code to

AppServiceProvider.php

<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">    public function boot()     {         $this-&gt;registerSingleObject();     }      private function registerSingleObject()     {//       $ffmpeg = FFMpeg::create(array(//           'ffmpeg.binaries'  =&gt; '/usr/local/ffmpeg/ffmpeg',//           'ffprobe.binaries' =&gt; '/usr/local/ffmpeg/ffprobe',//           'timeout'          =&gt; 3600, // The timeout for the underlying process//           'ffmpeg.threads'   =&gt; 12,   // The number of threads that FFMpeg should use//       ));         $this-&gt;app-&gt;singleton('ffmpeg', function ($app) {             return FFMpeg::create([                 'ffmpeg.binaries'  =&gt; '/usr/local/ffmpeg/ffmpeg',                 'ffprobe.binaries' =&gt; '/usr/local/ffmpeg/ffprobe',             ]);         });         $this-&gt;app-&gt;singleton('ffprobe', function ($app) {             return FFProbe::create([                 'ffprobe.binaries' =&gt; '/usr/local/ffmpeg/ffprobe',             ]);         });     }</pre><div class="contentsignin">Copy after login</div></div>Use singleton mode to obtain

FFMpeg

and FFProbe objects, where exec('which ffmpeg') is to obtain program location information in order to create a class

Basic packageExample:

The first second of the video is the cover
  • Get the basic information of the video
  • <?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;
        }}
    Copy after login

Business useThe video passed in by the Request object is Example

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();
        }
    }
Copy after login

saveImage

in the example is a function that uploads images to the cloud and returns the uploaded image URLFor more laravel technical articles, please visit

laravel tutorial

column!

The above is the detailed content of Detailed explanation of how laravel installs FFmpeg and processes video files. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:learnku.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template