PHPackages                             tonymans33/video-optimizer - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Image &amp; Media](/categories/media)
4. /
5. tonymans33/video-optimizer

ActiveLibrary[Image &amp; Media](/categories/media)

tonymans33/video-optimizer
==========================

Optimize your Filament videos before they reach your database.

v2.0.0(7mo ago)6698↓18.8%1MITPHPPHP ^8.1|^8.2|^8.3

Since Sep 25Pushed 7mo agoCompare

[ Source](https://github.com/tonymans33/video-optimizer)[ Packagist](https://packagist.org/packages/tonymans33/video-optimizer)[ Docs](https://github.com/tonymans33/video-optimizer)[ RSS](/packages/tonymans33-video-optimizer/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (9)Versions (7)Used By (0)

Video Optimizer for Filament
============================

[](#video-optimizer-for-filament)

[![Latest Version on Packagist](https://camo.githubusercontent.com/c922aa3c66cf35d10f0b8175bfa281f90cc4a9ec769d815e7427cf3656c8ecd9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f746f6e796d616e7333332f766964656f2d6f7074696d697a65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/tonymans33/video-optimizer)[![Total Downloads](https://camo.githubusercontent.com/7366a109bdd95e76be11beeee219a5e2be06fc90cc29f93a795119d451c2944e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f746f6e796d616e7333332f766964656f2d6f7074696d697a65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/tonymans33/video-optimizer)

[![Video Optimizer for Filament](.github/images/hero-image.png)](.github/images/hero-image.png)

Automatically optimize and convert videos uploaded through Filament forms using FFmpeg. Reduce file sizes and standardize formats without any manual intervention.

Results
-------

[](#results)

See the dramatic file size reduction:

### Before Optimization

[](#before-optimization)

**Original MP4**: 17.8 MB

[![Before optimization - 17.8 MB MP4 file](.github/images/before-optimization.png)](.github/images/before-optimization.png)

### After Optimization

[](#after-optimization)

**Optimized WebM**: 679 KB (96% reduction!)

[![After optimization - 679 KB WebM file](.github/images/after-optimization.png)](.github/images/after-optimization.png)

> 🎯 **Result**: Same video quality, **96% smaller file size** - from 17.8 MB down to just 679 KB!

Features
--------

[](#features)

- 🎬 **Automatic video optimization** during upload
- 🔄 **Format conversion** (WebM, MP4)
- ⚡ **Configurable quality levels** (low, medium, high)
- 📦 **Works with standard FileUpload and Spatie Media Library**
- 🔌 **Filament v3 &amp; v4 compatible**
- 🛡️ **Graceful fallback** if optimization fails

Requirements
------------

[](#requirements)

- PHP 8.1+
- Laravel 10.0+
- Filament 3.0+ or 4.0+
- **FFmpeg installed on your server**

### Installing FFmpeg

[](#installing-ffmpeg)

```
# Ubuntu/Debian
sudo apt-get install ffmpeg

# macOS
brew install ffmpeg

# Verify installation
ffmpeg -version
```

Installation
------------

[](#installation)

Install the package via Composer:

```
composer require tonymans33/video-optimizer
```

Publish the configuration file (optional):

```
php artisan vendor:publish --tag="video-optimizer-config"
```

Usage
-----

[](#usage)

### Basic Usage

[](#basic-usage)

Replace Filament's `FileUpload` with `VideoOptimizer`:

```
use Tonymans33\VideoOptimizer\Components\VideoOptimizer;

VideoOptimizer::make('video')
    ->disk('public')
    ->directory('videos')
    ->optimize('medium')  // 'low', 'medium', 'high', or null
    ->format('webm');     // 'webm', 'mp4', or null
```

### With Spatie Media Library

[](#with-spatie-media-library)

For projects using [Spatie Media Library](https://github.com/spatie/laravel-medialibrary):

```
use Tonymans33\VideoOptimizer\Components\SpatieMediaLibraryFileUpload;

SpatieMediaLibraryFileUpload::make('videos')
    ->collection('videos')
    ->multiple()
    ->optimize('medium')
    ->format('webm');
```

### Using the Facade

[](#using-the-facade)

```
use Tonymans33\VideoOptimizer\Facades\VideoOptimizer;

VideoOptimizer::make('video')
    ->optimize('high')
    ->format('mp4');
```

Configuration
-------------

[](#configuration)

Set global defaults in `config/video-optimizer.php`:

```
return [
    // Default optimization level: null, 'low', 'medium', 'high'
    'optimize' => null,

    // Default output format: null, 'webm', 'mp4'
    'format' => null,
];
```

Component-level settings override these defaults.

Optimization Levels
-------------------

[](#optimization-levels)

LevelCRFFile SizeQualityUse Case`low`36SmallestLowerWeb previews, thumbnails`medium`28BalancedGood**Recommended for most use cases**`high`20LargerBestHigh-quality content, archives`null`-OriginalOriginalNo optimization**CRF** = Constant Rate Factor (lower = better quality, larger file)

Supported Formats
-----------------

[](#supported-formats)

- **webm** - Modern, efficient format with excellent compression
- **mp4** - Universal compatibility using H.264 codec
- **null** - Keep original format

How It Works
------------

[](#how-it-works)

1. User uploads a video through your Filament form
2. Component detects video MIME type
3. If optimization/conversion is enabled:
    - Creates temporary file
    - Processes with FFmpeg
    - Saves optimized version
    - Cleans up temporary files
4. If processing fails, original file is uploaded (graceful fallback)

Advanced Example
----------------

[](#advanced-example)

```
use Tonymans33\VideoOptimizer\Components\VideoOptimizer;

VideoOptimizer::make('promotional_video')
    ->label('Promotional Video')
    ->disk('s3')
    ->directory('marketing/videos')
    ->visibility('public')
    ->optimize('high')
    ->format('mp4')
    ->maxSize(512000) // 500MB
    ->acceptedFileTypes(['video/mp4', 'video/quicktime', 'video/x-msvideo'])
    ->downloadable()
    ->openable()
    ->deletable();
```

Performance Considerations
--------------------------

[](#performance-considerations)

- **Processing Time**: Video optimization is CPU-intensive and takes time
- **For Large Files**: Consider implementing queue jobs:

```
// Queue jobs for async processing
VideoOptimizer::make('video')
    ->optimize('medium')
    ->format('webm')
    // Process after form submission using queued jobs
    ->saveUploadedFileUsing(function ($file) {
        dispatch(new OptimizeVideoJob($file));
    });
```

- **Disk Space**: Ensure sufficient temporary storage for processing
- **Memory Limits**: Large videos may require increased PHP memory limits

Troubleshooting
---------------

[](#troubleshooting)

### FFmpeg not found

[](#ffmpeg-not-found)

**Error**: `Binary not found`

**Solution**: Install FFmpeg and ensure it's in your system PATH

```
# Check if FFmpeg is installed
which ffmpeg
ffmpeg -version
```

### Videos not being optimized

[](#videos-not-being-optimized)

1. Check Laravel logs: `storage/logs/laravel.log`
2. Verify MIME type is detected as video
3. Confirm optimization level is set (not `null`)
4. Ensure `local` disk exists in `config/filesystems.php`

### Upload fails silently

[](#upload-fails-silently)

The package falls back to original file upload if optimization fails. Check logs for error details.

### Memory limit errors

[](#memory-limit-errors)

For large videos, increase PHP memory:

```
// In your service provider or config
ini_set('memory_limit', '512M');
```

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on recent changes.

Contributing
------------

[](#contributing)

Contributions are welcome! Please feel free to submit a Pull Request.

Security
--------

[](#security)

If you discover any security issues, please email  instead of using the issue tracker.

Credits
-------

[](#credits)

- [Tony Mansour](https://github.com/tonymans33)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE) for more information.

###  Health Score

41

—

FairBetter than 89% of packages

Maintenance63

Regular maintenance activity

Popularity25

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

6

Last Release

229d ago

Major Versions

v1.0.4 → v2.0.02025-10-01

PHP version history (2 changes)v1.0.0PHP ^8.2

v2.0.0PHP ^8.1|^8.2|^8.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/36414b284c92e487e3413045f1c121b692befbb764f0224eced7cc37e9b7139a?d=identicon)[tony.mans33](/maintainers/tony.mans33)

---

Top Contributors

[![tonymans33](https://avatars.githubusercontent.com/u/66672357?v=4)](https://github.com/tonymans33 "tonymans33 (15 commits)")

---

Tags

laravelvideoffmpegoptimizationfilamentfilamentphptonymans33video-optimizer

###  Code Quality

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/tonymans33-video-optimizer/health.svg)

```
[![Health](https://phpackages.com/badges/tonymans33-video-optimizer/health.svg)](https://phpackages.com/packages/tonymans33-video-optimizer)
```

###  Alternatives

[joshembling/image-optimizer

Optimize your Filament images before they reach your database.

111145.4k12](/packages/joshembling-image-optimizer)[danihidayatx/image-optimizer

Optimize your Filament images before they reach your database. Forked from joshembling/image-optimizer for Filament v4 &amp; v5 support.

254.4k](/packages/danihidayatx-image-optimizer)[codewithdennis/filament-select-tree

The multi-level select field enables you to make single selections from a predefined list of options that are organized into multiple levels or depths.

320392.1k17](/packages/codewithdennis-filament-select-tree)[dotswan/filament-map-picker

Easily pick and retrieve geo-coordinates using a map-based interface in your Filament applications.

124139.3k2](/packages/dotswan-filament-map-picker)[lakshmaji/thumbnail

Thumbnails for videos

108122.2k](/packages/lakshmaji-thumbnail)[rawilk/filament-password-input

Enhanced password input component for filament.

52232.4k3](/packages/rawilk-filament-password-input)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
