ホームページ > 記事 > PHPフレームワーク > laravelがFFmpegをインストールしてビデオファイルを処理する方法の詳細な説明
github アドレス: github.com/PHP-FFMpeg/PHP-FFMpeg
安装 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.phpUnzip 次に、ディレクトリに入り、次のコマンドを順番に実行します。
./configure make sudo make install
Enter ffmpeg フォルダーに移動し、次のコマンドを順番に実行します。
./configuremakesudo make install
ffmpeg -version ffplay -version
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
および
オブジェクトを取得します。 exec('that 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; }}
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(); } }
は、画像をクラウドにアップロードし、アップロードされた画像の URL を返す関数
laravel の技術記事の詳細については、 laravel チュートリアル
列をご覧ください。
以上がlaravelがFFmpegをインストールしてビデオファイルを処理する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。