日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

詳解Laravel如何安裝FFmpeg并進行視頻文件處理

Ubuntu 18.04 安裝FFmpeg

1、下載源碼編譯安裝

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


61079f3f7da12.jpg


編譯安裝ffmpeg

進入ffmpeg文件夾,依次執行以下命令:


61079f6d89c8d.jpg


./configuremakesudo make install

在這里插入圖片描述

測試是否安裝成功

ffmpeg -version
ffplay -version


61079fa46de0b.png


laravel 安裝PHP-FFMpeg擴展

composer require php-ffmpeg/php-ffmpeg

基本使用

1.1、 引入到項目

引入完成,它需要制定 兩個配置文件信息,以便我們正常使用,也就是上文所講的 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('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 是將圖片上傳到 云端的函數,返回上傳后的圖片 url


分享到:
標簽:Laravel如何安裝 安裝FFmpeg Laravel視頻文件處理
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定