Skip to content

Commit 436cdc4

Browse files
committed
add FFmpeg conversion
1 parent d800be9 commit 436cdc4

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Elegantly\Media\Definitions;
6+
7+
use Closure;
8+
use Elegantly\Media\Enums\MediaType;
9+
use Elegantly\Media\Models\Media;
10+
use Elegantly\Media\Models\MediaConversion;
11+
use Illuminate\Contracts\Filesystem\Filesystem;
12+
use ProtoneMedia\LaravelFFMpeg\Exporters\MediaExporter;
13+
use ProtoneMedia\LaravelFFMpeg\Support\FFMpeg;
14+
use Spatie\TemporaryDirectory\TemporaryDirectory as SpatieTemporaryDirectory;
15+
16+
class MediaConversionFFmpeg extends MediaConversionDefinition
17+
{
18+
/**
19+
* @param Closure(MediaExporter $ffmpeg):void $manipulate
20+
* @param Closure(Media $media, ?MediaConversion $parent):string $fileName
21+
*/
22+
public function __construct(
23+
public string $name,
24+
public Closure $manipulate,
25+
public Closure $fileName,
26+
public null|bool|Closure $when = null,
27+
public ?Closure $onCompleted = null,
28+
public bool $immediate = true,
29+
public bool $queued = true,
30+
public ?string $queue = null,
31+
public array $conversions = [],
32+
) {
33+
34+
parent::__construct(
35+
name: $name,
36+
handle: fn () => null,
37+
when: $when,
38+
onCompleted: $onCompleted,
39+
immediate: $immediate,
40+
queued: $queued,
41+
queue: $queue,
42+
conversions: $conversions
43+
);
44+
}
45+
46+
public function shouldExecute(Media $media, ?MediaConversion $parent): bool
47+
{
48+
if ($this->when !== null) {
49+
return parent::shouldExecute($media, $parent);
50+
}
51+
52+
$source = $parent ?? $media;
53+
54+
return in_array($source->type, [MediaType::Video, MediaType::Audio]);
55+
}
56+
57+
public function handle(
58+
Media $media,
59+
?MediaConversion $parent,
60+
?string $file,
61+
Filesystem $filesystem,
62+
SpatieTemporaryDirectory $temporaryDirectory
63+
): ?MediaConversion {
64+
65+
if (! $file) {
66+
return null;
67+
}
68+
69+
$fileName = $this->fileName;
70+
$manipulate = $this->manipulate;
71+
72+
$newFile = $fileName($media, $parent);
73+
74+
$ffmpeg = FFMpeg::fromFilesystem($filesystem)
75+
->open($file)
76+
->export();
77+
78+
$manipulate($ffmpeg);
79+
80+
$ffmpeg->save($newFile);
81+
82+
return $media->addConversion(
83+
file: $filesystem->path($newFile),
84+
conversionName: $this->name,
85+
parent: $parent,
86+
);
87+
88+
}
89+
}

0 commit comments

Comments
 (0)