Video Compression Using Laravel Webner Blogs — eLearning, Salesforce, Web Development & More
Introduction to Video Compression
Video Compression is a term used to define a method to reduce the data used to encode digital video content. This reduction in data further translates to various benefits such as smaller storage requirements and lower transmission bandwidth requirements, for a clip of the video content.
Note:- The below-given method is most suitable for compressing small-sized files
- Add a package in composer as given below-
- composer require pbmedia/laravel-ffmpeg
- Also, make sure you have FFmpeg binaries installed on your machine. If you’re running Linux, you can easily install it by running the following apt install command-
- sudo apt-get install ffmpeg
- In your app.php use these
- In providers
- Pbmedia\LaravelFFMpeg\FFMpegServiceProvider::class
- In aliases
- ‘FFMpeg’ => Pbmedia\LaravelFFMpeg\FFMpegFacade::class
- If you want to compress files with the size around 100 MB then you can use compression in your Controller like:
- Use the following on top of the controller-
- use FFMpeg; use FFMpeg\Coordinate\Dimension; use FFMpeg\Format\Video\X264;
- In your controller method:
- $file = $request->file(‘File’); //get file from request $arrayFileName = explode(“.”, $file->getClientOriginalName()); to get name of file in array form $filename = $file->getClientOriginalName(); //to get existing name of file $storage_path_full = ‘/’.$filename; //to make path $localVideo = Storage::disk(‘public’)->put($storage_path_full, file_get_contents($file)); //to save the file in your public folder $s3FilePath = ‘userMedia/’ ‘ . $arrayFileName[0] . date(‘his’) . ‘.’ . $extension; //to make s3 file path $lowBitrateFormat = (new X264(‘libmp3lame’, ‘libx264’))->setKiloBitrate(500); FFMpeg::fromDisk(‘public’) ->open($filename) ->addFilter(function ($filters) { $filters->resize(new Dimension(960, 540)); }) ->export() ->toDisk(‘s3’) ->inFormat($lowBitrateFormat) ->save($docPath);
- NOTE: This library can be used only for mp4 and AVI videos
- If you are dealing with large-volume files than you should prefer compressing them using Laravel job.
- First, you have to create a job class
- php artisan make:job compressVideo
- When you run this command then in your App\Jobs folder compressVideo.php is automatically created
- Now go to your controller and pass an array
- $filename = $file->getClientOriginalName(); //to get existing name of file $extension = $file->extension(); //to get extension of existing file $user_id = Auth::user()->id(); $arrayFileName = explode(“.”, $file->getClientOriginalName()); to get the name of a file in array form $s3FilePath = ‘userMedia/’ ‘ . $arrayFileName[0] . date(‘his’) . ‘.’ . $extension; //to make s3 file path $compressedFileName = $arrayFileName[0] . date(‘his’) . ‘.’ . $extension; $fileArray =[ ‘filename’=>$filename, ‘extension’=>$extension, ‘user_id’=>$user_id, ‘docPath’=>$docPath, ‘name’=>Auth::user()->name, ‘email’=>Auth::user()->email, ‘compressedFileName’=>$compressedFileName, ‘localVideo’=>$localVideo ]; $fileObject = (object)$fileArray; $response = compressVideo::dispatch($fileObject);
Webner Solutions is a Software Development company focused on developing Insurance Agency Management Systems, Learning Management Systems and Salesforce apps. Contact us at dev@webners.com for your Insurance, eLearning and Salesforce applications.
Originally published at https://blog.webnersolutions.com on December 10, 2019.