Maison > cadre php > Laravel > le corps du texte

Explication détaillée de la façon dont Laravel installe FFmpeg et traite les fichiers vidéo

藏色散人
Libérer: 2021-08-05 09:02:09
avant
2768 Les gens l'ont consulté

Ubuntu 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
Copier après la connexion

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
Copier après la connexion


1.3 Compilez et installez ffmpeg
Entrez le dossier ffmpeg et exécutez le commandes suivantes dans l'ordre :

 ./configuremakesudo make install
Copier après la connexion

Insérer la description de l'image ici
1.4 Tester si l'installation est réussie

ffmpeg -version
ffplay -version
Copier après la connexion

installation de laravelPHP-FFMpegExtension

composer require php-ffmpeg/php-ffmpeg
Copier après la connexion

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.phpAppServiceProvider.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',
            ]);
        });
    }
Copier après la connexion

使用单例模式获取 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;
    }}
Copier après la connexion

业务使用

接受 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();
        }
    }
Copier après la connexion

例子中的 saveImagerrreee

Utilisez le mode singleton pour obtenir les objets 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
rrreee🎜🎜🎜Utilisation professionnelle🎜🎜Accepter la vidéo transmise par l'objet Request à titre d'exemple🎜rrreee🎜Le 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!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!