Rumah > rangka kerja php > Laravel > teks badan

Penjelasan terperinci tentang cara laravel memasang FFmpeg dan memproses fail video

藏色散人
Lepaskan: 2021-08-05 09:02:09
ke hadapan
2768 orang telah melayarinya

Ubuntu 18.04 Pasang FFmpeg

1. Muat turun kod sumber, susun dan pasang

1.1 Muat turun kod sumber

alamat github: github.com/PHP-FFMpeg/PHP-FFMpeg

1.2 Pasang perpustakaan bergantung

Terdapat tiga pemasangan utama: yasm, sdl1 .2 dan 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
Salin selepas log masuk

Jika terdapat ralat dalam pemasangan sdl2.0, anda boleh memilih kaedah penyusunan dan pemasangan:
Muat turun versi terkini daripada laman web rasmi: www.libsdl.org/download-2.0.php
Selepas penyahmampatan, masukkan direktori dan laksanakan arahan berikut mengikut urutan:

./configure
make
sudo make install
Salin selepas log masuk


1.3 Susun dan pasang ffmpeg
Masukkan folder ffmpeg dan laksanakan arahan berikut mengikut urutan:

 ./configuremakesudo make install
Salin selepas log masuk

Sisipkan penerangan gambar di sini
1.4 Uji sama ada pemasangan berjaya

ffmpeg -version
ffplay -version
Salin selepas log masuk

pemasangan laravelPHP-FFMpegSambungan

composer require php-ffmpeg/php-ffmpeg
Salin selepas log masuk

Penggunaan asas
1.1, pengenalan kepada projek
pengenalan selesai, ia perlu merumuskan dua maklumat fail konfigurasi untuk kita gunakan secara normal, iaitu ffmpeg yang disebutkan di atas Dan ffprobe
1.2, konfigurasi global

tambah kod 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',
            ]);
        });
    }
Salin selepas log masuk
untuk

untuk menggunakan mod tunggal untuk mendapatkan FFMpeg dan FFProbe objek, di mana exec('which ffmpeg') ialah Dapatkan maklumat lokasi program untuk mencipta kelas

Pakej asas

Contoh:

  • Detik pertama video ialah muka depan
  • Dapatkan maklumat asas video
<?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;
    }}
Salin selepas log masuk

Penggunaan perniagaan

Terima video yang dihantar oleh objek Request sebagai contoh

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();
        }
    }
Salin selepas log masuk

saveImage dalam contoh ialah fungsi yang memuat naik imej ke awan dan mengembalikan imej yang dimuat naik URL

Untuk lebih banyak artikel teknikal laravel, sila lawati lajur tutorial laravel!

Atas ialah kandungan terperinci Penjelasan terperinci tentang cara laravel memasang FFmpeg dan memproses fail video. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!