Heim > PHP-Framework > Laravel > Hauptteil

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

藏色散人
Freigeben: 2021-08-05 09:02:09
nach vorne
2768 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren


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
Nach dem Login kopieren

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

laravel-Installation

PHP-FFMpegErweiterung

ffmpeg -version
ffplay -version
Nach dem Login kopieren
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
Nach dem Login kopieren
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',
            ]);
        });
    }
Nach dem Login kopieren

使用单例模式获取 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;
    }}
Nach dem Login kopieren

业务使用

接受 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();
        }
    }
Nach dem Login kopieren

例子中的 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!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!