✨ Support attachments
This commit is contained in:
parent
82d2fdaeae
commit
77cf08260a
2 changed files with 68 additions and 3 deletions
46
src/Attachment.php
Normal file
46
src/Attachment.php
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
namespace Danjones\FFMpeg;
|
||||
|
||||
use FFMpeg\Format\FormatInterface;
|
||||
|
||||
class Attachment extends Stream
|
||||
{
|
||||
protected string $input = '';
|
||||
|
||||
public function __construct(Map $map, string $file = '')
|
||||
{
|
||||
$this->map = $map;
|
||||
$this->input = $file;
|
||||
// Shouldn't be necessary, but just in case
|
||||
$this->codec = new Format\Copy();
|
||||
}
|
||||
|
||||
public function mime(string $mime): static
|
||||
{
|
||||
return $this->addMetadata('mimetype', $mime);
|
||||
}
|
||||
|
||||
public function setCodec(FormatInterface $codec): static
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function parseCodec(): static
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function saveAttachment(): Map
|
||||
{
|
||||
return $this->saveStream();;
|
||||
}
|
||||
|
||||
public function buildCommand(int $idx = 0): array
|
||||
{
|
||||
$commands = parent::buildCommand($idx);
|
||||
$commands[0] = '-attach';
|
||||
|
||||
return $commands;
|
||||
}
|
||||
}
|
||||
25
src/Map.php
25
src/Map.php
|
|
@ -13,6 +13,8 @@ class Map
|
|||
protected string $path;
|
||||
/** @var Stream[] */
|
||||
protected array $streams = [];
|
||||
/** @var Attachment[] */
|
||||
protected array $attachments = [];
|
||||
/** @var AbstractProgressListener[] */
|
||||
protected array $listeners = [];
|
||||
|
||||
|
|
@ -35,9 +37,8 @@ class Map
|
|||
return $this;
|
||||
}
|
||||
|
||||
public function stream(callable $callback = null): Stream|static
|
||||
protected function doStream(Stream $stream, callable $callback = null): Stream|static
|
||||
{
|
||||
$stream = new Stream($this);
|
||||
if (!$callback) {
|
||||
return $stream;
|
||||
}
|
||||
|
|
@ -48,8 +49,24 @@ class Map
|
|||
return $this;
|
||||
}
|
||||
|
||||
public function stream(callable $callback = null): Stream|static
|
||||
{
|
||||
return $this->doStream(new Stream($this), $callback);
|
||||
}
|
||||
|
||||
public function attach(string $file = '', callable $callback = null): Attachment|static
|
||||
{
|
||||
return $this->doStream(new Attachment($this, $file), $callback);
|
||||
}
|
||||
|
||||
public function saveStream(Stream $stream): static
|
||||
{
|
||||
if ($stream instanceof Attachment){
|
||||
$this->attachments[] = $stream;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
$this->streams[] = $stream;
|
||||
$format = $stream->getCodec();
|
||||
if ($format instanceof ProgressableInterface) {
|
||||
|
|
@ -72,7 +89,9 @@ class Map
|
|||
public function buildCommand(): array
|
||||
{
|
||||
$commands = [];
|
||||
foreach ($this->streams as $idx => $stream) {
|
||||
$streams = $this->streams;
|
||||
array_push($streams, ...$this->attachments);
|
||||
foreach ($streams as $idx => $stream) {
|
||||
array_push($commands, ...$stream->buildCommand($idx));
|
||||
}
|
||||
foreach ($this->metadata as $k => $v) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue