✨ 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;
|
protected string $path;
|
||||||
/** @var Stream[] */
|
/** @var Stream[] */
|
||||||
protected array $streams = [];
|
protected array $streams = [];
|
||||||
|
/** @var Attachment[] */
|
||||||
|
protected array $attachments = [];
|
||||||
/** @var AbstractProgressListener[] */
|
/** @var AbstractProgressListener[] */
|
||||||
protected array $listeners = [];
|
protected array $listeners = [];
|
||||||
|
|
||||||
|
|
@ -35,9 +37,8 @@ class Map
|
||||||
return $this;
|
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) {
|
if (!$callback) {
|
||||||
return $stream;
|
return $stream;
|
||||||
}
|
}
|
||||||
|
|
@ -48,8 +49,24 @@ class Map
|
||||||
return $this;
|
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
|
public function saveStream(Stream $stream): static
|
||||||
{
|
{
|
||||||
|
if ($stream instanceof Attachment){
|
||||||
|
$this->attachments[] = $stream;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
$this->streams[] = $stream;
|
$this->streams[] = $stream;
|
||||||
$format = $stream->getCodec();
|
$format = $stream->getCodec();
|
||||||
if ($format instanceof ProgressableInterface) {
|
if ($format instanceof ProgressableInterface) {
|
||||||
|
|
@ -72,7 +89,9 @@ class Map
|
||||||
public function buildCommand(): array
|
public function buildCommand(): array
|
||||||
{
|
{
|
||||||
$commands = [];
|
$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));
|
array_push($commands, ...$stream->buildCommand($idx));
|
||||||
}
|
}
|
||||||
foreach ($this->metadata as $k => $v) {
|
foreach ($this->metadata as $k => $v) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue