Heim >PHP-Framework >Laravel >Detaillierte Erklärung, wie Laravel FFmpeg installiert und Videodateien verarbeitet

Detaillierte Erklärung, wie Laravel FFmpeg installiert und Videodateien verarbeitet

藏色散人
藏色散人nach vorne
2021-08-02 14:34:322886Durchsuche

Ubuntu 18.04 Installieren Sie FFmpeg

1. Laden Sie den Quellcode herunter, kompilieren und installieren Sie

1.1 Laden Sie den Quellcode herunter

Github-Adresse: github.com/PHP-FFMpeg/PHP-FFMpeg

1.2 Abhängige Bibliotheken installieren

Es gibt drei Hauptinstallationen: yasm, sdl1.2 und 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

Wenn bei der sdl2.0-Installation ein Fehler auftritt, können Sie die Kompilierungs- und Installationsmethode auswählen:
Laden Sie die neueste Version herunter Version von der offiziellen Website: www.libsdl.org/download-2.0.php
Geben Sie nach dem Dekomprimieren das Verzeichnis ein und führen Sie die folgenden Befehle nacheinander aus:

./configure
make
sudo make install


1.3 Kompilieren und installieren Sie ffmpeg
Geben Sie den Ordner ffmpeg ein und führen Sie das aus Folgen Sie den Befehlen nacheinander:

 ./configuremakesudo make install

Bildbeschreibung hier einfügen
1.4 Testen Sie, ob die Installation erfolgreich ist

laravel-Installation

PHP-FFMpegErweiterung

ffmpeg -version
ffplay -version
Grundlegende Verwendung

1.1, Einführung in die Projekt
Das Nachdem die Einführung abgeschlossen ist, müssen zwei Konfigurationsdateiinformationen formuliert werden, damit wir sie normal verwenden können. Dies ist das oben erwähnte ffmpeg und ffprobe
1.2, globale Konfiguration

Code zu AppServiceProvider.php hinzufügen

composer require php-ffmpeg/php-ffmpeg
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();
        }
    }

例子中的 saveImageVerwenden Sie den Singleton-Modus, um FFMpeg- und FFProbe-Objekte abzurufen. Unter anderem dient exec('which ffmpeg') dazu, die Programmspeicherortinformationen abzurufen Auftrag zum Erstellen der Klasse

Basispaket

🎜Beispiel: 🎜
  • Die erste Sekunde des Videos ist das Cover
  • li>
  • Grundlegende Videoinformationen abrufen
  • ul>rrreee🎜🎜🎜Geschäftliche Nutzung🎜🎜Akzeptieren Sie das vom Request-Objekt übergebene Video als Beispiel🎜rrreee🎜Der saveImage im Beispiel lautet: Die Funktion zum Hochladen von Bildern in die Cloud gibt das hochgeladene zurück Bild-URL🎜🎜Weitere technische Artikel zu Laravel finden Sie in der Spalte „Laravel-Tutorial“! 🎜

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie Laravel FFmpeg installiert und Videodateien verarbeitet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen