Heim >PHP-Framework >Laravel >Detaillierte Erklärung, wie Laravel FFmpeg installiert und Videodateien verarbeitet
Github-Adresse: github.com/PHP-FFMpeg/PHP-FFMpeg
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
PHP-FFMpegErweiterung
ffmpeg -version ffplay -versionGrundlegende 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
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', ]); }); }
使用单例模式获取 FFMpeg
和 FFProbe
对象,其中 exec('which ffmpeg')
是获取 程序位置信息,以便创建类
举例:
<?php namespace AppHelpers;use FFMpegCoordinateTimeCode;use IlluminateSupportStr;class FFMpegUtil{ // 获取视频信息 public static function getVideoInfo($streamPath) { $ffprobe = app('ffprobe'); $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(); } }
例子中的 saveImage
Verwenden 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
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!