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
Requires
- php: >=8.0
- php-ffmpeg/php-ffmpeg: ^1.0
- symfony/dependency-injection: ^5.4 || ^6.0 || ^7.0
- symfony/framework-bundle: ^5.4 || ^6.0 || ^7.0
Requires (Dev)
README
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'
- 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"
- Install the Bundle via Composer:
$ composer require fmonts/ffmpeg-bundle
- 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.