github 주소: github.com/PHP-FFMpeg/PHP-FFMpeg
세 가지 주요 설치가 있습니다: 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 설치에 오류가 있는 경우 컴파일 및 설치 방법을 선택할 수 있습니다.
최신 버전 다운로드 버전은 공식 웹사이트에서: www.libsdl.org/download-2.0.php
압축 해제 후 해당 디렉터리에 들어가서 다음 명령을 순서대로 실행합니다.
./configure make sudo make install
1.3 ffmpeg 컴파일 및 설치
ffmpeg 폴더에 들어가서 다음 명령을 실행합니다. 다음 명령을 순서대로 실행하세요.
./configuremakesudo make install
여기에 그림 설명 삽입
1.4 설치 성공 여부 테스트
ffmpeg -version ffplay -version
laravel 설치PHP-FFMpegExtension
composer require php-ffmpeg/php-ffmpeg
기본 사용법
1.1, 프로젝트 소개
The 소개가 완료되면 정상적으로 사용할 수 있도록 두 가지 구성 파일 정보를 공식화해야 합니다. 위에서 언급한 ffmpeg 그리고 ffprobe
1.2, 전역 구성
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
및 FFProbe
객체를 얻습니다. 그 중 exec('which ffmpeg')
는 프로그램 위치 정보를 얻는 것입니다. 클래스 생성 순서 basic package🎜🎜예: 🎜saveImage
는 클라우드에 이미지를 업로드하는 기능으로 업로드된 영상을 반환합니다. 이미지 URL🎜🎜더 많은 Laravel 기술 기사를 보려면 🎜laravel 튜토리얼🎜 칼럼을 방문하세요! 🎜위 내용은 laravel이 FFmpeg를 설치하고 비디오 파일을 처리하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!