Adresse github : github.com/PHP-FFMpeg/PHP-FFMpeg
Il existe trois installations principales : yasm, sdl1.2 et 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
S'il y a une erreur dans l'installation de sdl2.0, vous pouvez choisir la méthode de compilation et d'installation :
Télécharger la dernière version depuis le site officiel : www.libsdl.org/download-2.0.php
Après la décompression, entrez dans le répertoire et exécutez les commandes suivantes dans l'ordre :
./configure make sudo make install
1.3 Compilez et installez ffmpeg
Entrez le dossier ffmpeg et exécutez le commandes suivantes dans l'ordre :
./configuremakesudo make install
Insérer la description de l'image ici
1.4 Tester si l'installation est réussie
ffmpeg -version ffplay -version
installation de laravelPHP-FFMpegExtension
composer require php-ffmpeg/php-ffmpeg
Utilisation de base
1.1, introduction au projet
Le l'introduction est terminée, il doit formuler deux informations sur le fichier de configuration afin que nous puissions l'utiliser normalement, qui est le ffmpeg mentionné ci-dessus Et ffprobe
1.2, configuration globale
Ajouter du code à 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', ]); }); }
使用单例模式获取 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
rrreee
FFMpeg
et FFProbe
. Parmi eux, exec('which ffmpeg')
permet d'obtenir les informations d'emplacement du programme dans afin de créer la classe package de base🎜🎜Exemple : 🎜saveImage
dans l'exemple est de La fonction de téléchargement d'images sur le cloud renvoie l'URL de l'image téléchargée 🎜🎜Pour plus d'articles techniques sur Laravel, veuillez visiter la colonne 🎜tutoriel Laravel🎜 ! 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!