Skip to content

Instantly share code, notes, and snippets.

@drpshtiwan
Created December 24, 2024 12:43
Show Gist options
  • Save drpshtiwan/b111615206f4a621478a176996235bde to your computer and use it in GitHub Desktop.
Save drpshtiwan/b111615206f4a621478a176996235bde to your computer and use it in GitHub Desktop.
<?php
namespace App\Action\Admin\Upload;
use FFMpeg\Format\Video\X264;
use ProtoneMedia\LaravelFFMpeg\Support\FFMpeg;
class EncodeVideoFileAction
{
public static function handle(
string $inputPath,
?string $inputDisk = null,
string $outputFolder = 'upload-output'
): string {
$lowBitrate = (new X264('aac'))->setKiloBitrate(500);
$midBitrate = (new X264('aac'))->setKiloBitrate(1000);
$highBitrate = (new X264('aac'))->setKiloBitrate(1500);
$fileName = pathinfo($inputPath, PATHINFO_FILENAME);
$outputPath = "$outputFolder/$fileName/index.m3u8";
$disk = $inputDisk ?? config('jano.resource_disk');
FFMpeg::fromDisk($disk)
->open($inputPath)
->exportForHLS()
->setSegmentLength(10)
// ->addFormat($lowBitrate, function ($media) {
// $media->scale(640, 360);
// })
->addFormat($midBitrate, function ($media) {
$media->scale(1280, 720);
})
->addFormat($highBitrate, function ($media) {
$media->scale(1920, 1080);
})
->toDisk($disk)
->save($outputPath);
return $outputPath;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment