projektgopher / laravel-ffmpeg-tween
Generates strings for use in ffmpeg commands to tween between values with easings.
Requires
- php: ^8.1
- illuminate/contracts: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.0|^8.0
- orchestra/testbench: ^8.11|^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
README
FFMpeg can be opaque in its commands. Take the following example:
if(lt(t\,5)\,((w*7/8)-text_w-200)\,if(gt(t\,5+2)\,((w*7/8)-text_w)\,((w*7/8)-text_w-200)+((((w*7/8)-text_w)-((w*7/8)-text_w-200))(if(eq(((t-5)/2)\,0)\,0\,if(eq(((t-5)/2)\,1)\,1\,pow(2\,-10((t-5)/2))*sin((((t-5)/2)*10-0.75)*2.0943951023932)+1))))))
This completely bonkers string will calculate just the x
position of a text element. It'll wait 5 seconds, animate the element from 200px left of its final position over 2 seconds with an easing of EaseOutElastic
. How would you approach changing this to an easing of EaseOutBounce
? Not gonna happen.
This package allows you to build these string in a fluent way that's easily maintainable in a way that feels familiar to php and Laravel devs. The following example will output the exact same string as above, but imagine how much easier it'll be to change:
$finalXpos = '(w*7/8)-text_w'; $x = (new Tween()) ->from("{$finalXpos}-200") ->to($finalXpos) ->delay(Timing::seconds(5)) ->duration(Timing::seconds(2)) ->ease(Ease::OutElastic);
The API is modelled after The GreenSock Animation Platform (GSAP) and all the math for the easings is ported from Easings.net. The stringification of these math strings is ported from This Gitlab repo
Installation
You can install the package via composer:
composer require projektgopher/laravel-ffmpeg-tools
Usage
Using outside of a Laravel application
For now this package can only be used within a Laravel app, but there are plans to extract the core functionality into a separate package that can be used without being bound to the framework.
Testing
Changelog
Please see RELEASES for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
A big "Thank You" to EXACTsports for supporting the development of this package.
License
The MIT License (MIT). Please see License File for more information.