laravelがFFmpegをインストールしてビデオファイルを処理する方法の詳細な説明

藏色散人
リリース: 2021-08-05 09:02:09
転載
2817 人が閲覧しました

Ubuntu 18.04 FFmpeg をインストールします

1. ソース コードをダウンロードし、コンパイルしてインストールします

1.1 ソース コードをダウンロードします

github アドレス: github.com/PHP-FFMpeg/PHP-FFMpeg

#1.2 依存ライブラリをインストールします##主に 3 つありますインストール: yasm、sdl1 .2、および 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
ログイン後にコピー

sdl2.0 のインストールでエラーが発生した場合は、コンパイルとインストール方法を選択できます:

公式から最新バージョンをダウンロードします。 Web サイト: www.libsdl.org/download-2.0.php

Unzip 次に、ディレクトリに入り、次のコマンドを順番に実行します。

./configure
make
sudo make install
ログイン後にコピー

##1.3 ffmpeg をコンパイルしてインストールします

Enter ffmpeg フォルダーに移動し、次のコマンドを順番に実行します。

 ./configuremakesudo make install
ログイン後にコピー

ここに図の説明を挿入1.4 インストールが成功したかどうかをテストします
ffmpeg -version
ffplay -version
ログイン後にコピー


##laravel のインストール

PHP-FFMpegExtension

composer require php-ffmpeg/php-ffmpeg
ログイン後にコピー

基本的な使い方1.1. プロジェクトの紹介導入は完了です、設定ファイルの情報を 2 つ作成する必要があります通常使用するのは、上記の ffmpeg と ffprobe です。

1.2. グローバル設定


コードを
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('that ffmpeg') は、クラス を作成するためにプログラムの場所情報を取得することです。 基本パッケージ

例:

ビデオの最初の 2 秒がカバーです

ビデオの基本情報を取得します
  • <?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;
        }}
    ログイン後にコピー
  • ビジネス用途

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

は、画像をクラウドにアップロードし、アップロードされた画像の URL を返す関数

laravel の技術記事の詳細については、 laravel チュートリアル 列をご覧ください。

以上がlaravelがFFmpegをインストールしてビデオファイルを処理する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート