fmonts/ffmpeg-bundle

Symfony bundle to provide PHP-FFmpeg as a Symfony service (https://github.com/PHP-FFMpeg/PHP-FFMpeg/)

Installs: 108 626

Dependents: 0

Suggesters: 0

Security: 0

Stars: 11

Watchers: 3

Forks: 29

Open Issues: 0

Type:symfony-bundle

0.8.6 2024-09-29 08:44 UTC

This package is auto-updated.

Last update: 2024-10-29 09:02:56 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

This bundle provides a simple wrapper for the PHP_FFmpeg library, exposing the library as a Symfony service.

This fork adds Symfony5, Symfony6 and Symfony7 support and drops legacy Symfony and PHP support

Set up the bundle

0. Install FFmpeg and Find the Binary Paths

To use this bundle, you need FFmpeg installed on your system. Find out where the binaries (ffmpeg and ffprobe) are located.

Ubuntu/Debian:

$ sudo apt install ffmpeg
$ whereis ffmpeg
# outputs: ffmpeg: /usr/bin/ffmpeg
$ whereis ffprobe
# outputs: ffmpeg: /usr/bin/ffprobe

macOS (Apple Silicon):

$ brew install ffmpeg
$ which ffmpeg
# outputs: /opt/homebrew/bin/ffmpeg
$ which ffprobe
# outputs: /opt/homebrew/bin/ffprobe

Windows:

Download FFmpeg from ffmpeg.org. Extract the binaries to a folder and note their location, e.g.:

  ffmpeg_binary: 'C:\Program Files\FFMpeg\ffmpeg.exe'
  ffprobe_binary: 'C:\Program Files\FFMpeg\ffprobe.exe'
  1. Create the required configuration in config/packages/dubture_f_fmpeg.yaml (or rename it if using a different setup):
dubture_f_fmpeg:
  ffmpeg_binary: /usr/bin/ffmpeg
  ffprobe_binary: /usr/bin/ffprobe
  binary_timeout: 300 # Use 0 for infinite
  threads_count: 4
  temporary_directory: "%kernel.cache_dir%/ffmpeg"
  1. Install the Bundle via Composer:
$ composer require fmonts/ffmpeg-bundle
  1. Register the FFmpeg Service

Add the FFmpeg service in services.yaml under the services section:

FFMpeg\FFMpeg: '@dubture_ffmpeg.ffmpeg'

Usage example

Once set up, you can use FFmpeg in your controllers for video manipulation. Below is a sample controller action:

use FFMpeg\FFMpeg;
use FFMpeg\Coordinate\Dimension;
use FFMpeg\Filters\Video\ResizeFilter;
use FFMpeg\Format\Video\X264;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

class VideoController extends AbstractController
{
    public function resize(FFMpeg $FFMpeg): Response
    {
        // Open video
        $video = $FFMpeg->open('/your/source/folder/input.avi');
        
        // Resize to 1280x720
        $video
          ->filters()
          ->resize(new Dimension(1280, 720), ResizeFilter::RESIZEMODE_INSET)
          ->synchronize();
        
        // Start transcoding and save video
        $video->save(new X264(), '/your/target/folder/video.mp4');
    }
}

Supported Symfony and PHP Versions

  • Symfony Versions: 5.4, 6.x, and 7.x
  • PHP Versions: 8.0 and higher

For further documentation, visit the official PHP-FFmpeg library to explore more options and features.