


Explication détaillée de la façon dont Laravel installe FFmpeg et traite les fichiers vidéo
Aug 02, 2021 pm 02:34 PMUbuntu 18.04 Installer FFmpeg
1. Téléchargez le code source, compilez et installez
1.1 Téléchargez le code source
Adresse github : github.com/PHP-FFMpeg/PHP-FFMpeg
1.2 Installer les bibliothèques dépendantes
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 : 🎜- La première seconde de la vidéo est la couverture li>
- Obtenir des informations de base sur la vidéo
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

PHP vs Flutter : le meilleur choix pour le développement mobile

Analyse des avantages et inconvénients des outils de tests unitaires PHP

Comment utiliser le mappage objet-relationnel (ORM) en PHP pour simplifier les opérations de base de données ?

Architecture et pratique du système distribué PHP

Comparaison des dernières versions de Laravel et CodeIgniter

Comment les capacités de traitement des données de Laravel et de CodeIgniter se comparent-elles ?

Tests unitaires de code PHP et tests d'intégration
