From ba7bd907809bd1b861bab52df9a473db4207326c Mon Sep 17 00:00:00 2001 From: Guilherme Date: Thu, 26 Sep 2013 16:03:58 -0300 Subject: [PATCH 1/4] Created ClipFilter --- src/FFMpeg/Filters/Video/ClipFilter.php | 65 +++++++++++++++++++++++ src/FFMpeg/Filters/Video/VideoFilters.php | 15 ++++++ 2 files changed, 80 insertions(+) create mode 100644 src/FFMpeg/Filters/Video/ClipFilter.php diff --git a/src/FFMpeg/Filters/Video/ClipFilter.php b/src/FFMpeg/Filters/Video/ClipFilter.php new file mode 100644 index 0000000..ecb2671 --- /dev/null +++ b/src/FFMpeg/Filters/Video/ClipFilter.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace FFMpeg\Filters\Video; + +use FFMpeg\Format\VideoInterface; +use FFMpeg\Media\Video; +use FFMpeg\Coordinate\TimeCode; + +class ClipFilter implements VideoFilterInterface +{ + /** @var TimeCode */ + private $start; + /** @var TimeCode */ + private $duration; + /** @var integer */ + private $priority; + + public function __construct(TimeCode $start, TimeCode $duration, $priority = 0) + { + $this->start = $start; + $this->duration = $duration; + $this->priority = $priority; + } + + /** + * {@inheritdoc} + */ + public function getPriority() + { + return $this->priority; + } + + /** + * @return TimeCode + */ + public function getStart() + { + return $this->start; + } + + /** + * @return TimeCode + */ + public function getDuration() + { + return $this->duration; + } + + /** + * {@inheritdoc} + */ + public function apply(Video $video, VideoInterface $format) + { + return array('-ss', $this->start->__toString(), '-t', $this->duration->__toString()); + } +} diff --git a/src/FFMpeg/Filters/Video/VideoFilters.php b/src/FFMpeg/Filters/Video/VideoFilters.php index d0ffc8d..5a9fd6b 100644 --- a/src/FFMpeg/Filters/Video/VideoFilters.php +++ b/src/FFMpeg/Filters/Video/VideoFilters.php @@ -66,6 +66,21 @@ class VideoFilters extends AudioFilters return $this; } + + /** + * Clips (cuts) the video. + * + * @param TimeCode $start + * @param TimeCode $duration + * + * @return VideoFilters + */ + public function clip($start, $duration) + { + $this->media->addFilter(new ClipFilter($start, $duration)); + + return $this; + } /** * Resamples the audio file. From 3fb918a7e237b587f0eb2930a8cb9c1b17394e35 Mon Sep 17 00:00:00 2001 From: guimeira Date: Fri, 27 Sep 2013 01:30:11 -0300 Subject: [PATCH 2/4] Parameter on ClipFilter made optional --- src/FFMpeg/Filters/Video/ClipFilter.php | 11 +++++++++-- src/FFMpeg/Filters/Video/VideoFilters.php | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) mode change 100644 => 100755 src/FFMpeg/Filters/Video/ClipFilter.php mode change 100644 => 100755 src/FFMpeg/Filters/Video/VideoFilters.php diff --git a/src/FFMpeg/Filters/Video/ClipFilter.php b/src/FFMpeg/Filters/Video/ClipFilter.php old mode 100644 new mode 100755 index ecb2671..9cb3921 --- a/src/FFMpeg/Filters/Video/ClipFilter.php +++ b/src/FFMpeg/Filters/Video/ClipFilter.php @@ -24,7 +24,7 @@ class ClipFilter implements VideoFilterInterface /** @var integer */ private $priority; - public function __construct(TimeCode $start, TimeCode $duration, $priority = 0) + public function __construct(TimeCode $start, TimeCode $duration = null, $priority = 0) { $this->start = $start; $this->duration = $duration; @@ -60,6 +60,13 @@ class ClipFilter implements VideoFilterInterface */ public function apply(Video $video, VideoInterface $format) { - return array('-ss', $this->start->__toString(), '-t', $this->duration->__toString()); + $commands = array('-ss', (string) $this->start); + + if($this->duration !== null) { + $commands[] = '-t'; + $commands[] = (string) $this->duration; + } + + return $commands; } } diff --git a/src/FFMpeg/Filters/Video/VideoFilters.php b/src/FFMpeg/Filters/Video/VideoFilters.php old mode 100644 new mode 100755 index 5a9fd6b..d502d26 --- a/src/FFMpeg/Filters/Video/VideoFilters.php +++ b/src/FFMpeg/Filters/Video/VideoFilters.php @@ -75,7 +75,7 @@ class VideoFilters extends AudioFilters * * @return VideoFilters */ - public function clip($start, $duration) + public function clip($start, $duration = null) { $this->media->addFilter(new ClipFilter($start, $duration)); From cdeed25ada20a11774146d522a64cf1797765a6e Mon Sep 17 00:00:00 2001 From: guimeira Date: Fri, 27 Sep 2013 01:31:29 -0300 Subject: [PATCH 3/4] Added ClipFilter to the README --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) mode change 100644 => 100755 README.md diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 6ace127..9584a2f --- a/README.md +++ b/README.md @@ -167,6 +167,19 @@ filters solves this issue. $video->filters()->synchronize(); ``` +###### Clip + +Cuts the video at a desired point. + +```php +$video->filters()->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(30), FFMpeg\Coordinate\TimeCode::fromSeconds(15)); +``` + +The clip filter takes two parameters: + +- `$start`, an instance of `FFMpeg\Coordinate\TimeCode`, specifies the start point of the clip +- `$duration`, optional, an instance of `FFMpeg\Coordinate\TimeCode`, specifies the duration of the clip + #### Audio `FFMpeg\Media\Audio` can be transcoded, ie : change codec, isolate audio or From e1688c79668b0138791da58cfdf88a01b7cfe6b5 Mon Sep 17 00:00:00 2001 From: guimeira Date: Fri, 27 Sep 2013 01:34:46 -0300 Subject: [PATCH 4/4] Standard fixing --- src/FFMpeg/Filters/Video/ClipFilter.php | 20 ++++++++++---------- src/FFMpeg/Filters/Video/VideoFilters.php | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/FFMpeg/Filters/Video/ClipFilter.php b/src/FFMpeg/Filters/Video/ClipFilter.php index 9cb3921..5e015a8 100755 --- a/src/FFMpeg/Filters/Video/ClipFilter.php +++ b/src/FFMpeg/Filters/Video/ClipFilter.php @@ -26,8 +26,8 @@ class ClipFilter implements VideoFilterInterface public function __construct(TimeCode $start, TimeCode $duration = null, $priority = 0) { - $this->start = $start; - $this->duration = $duration; + $this->start = $start; + $this->duration = $duration; $this->priority = $priority; } @@ -60,13 +60,13 @@ class ClipFilter implements VideoFilterInterface */ public function apply(Video $video, VideoInterface $format) { - $commands = array('-ss', (string) $this->start); - - if($this->duration !== null) { - $commands[] = '-t'; - $commands[] = (string) $this->duration; - } - - return $commands; + $commands = array('-ss', (string) $this->start); + + if ($this->duration !== null) { + $commands[] = '-t'; + $commands[] = (string) $this->duration; + } + + return $commands; } } diff --git a/src/FFMpeg/Filters/Video/VideoFilters.php b/src/FFMpeg/Filters/Video/VideoFilters.php index d502d26..c8a31d8 100755 --- a/src/FFMpeg/Filters/Video/VideoFilters.php +++ b/src/FFMpeg/Filters/Video/VideoFilters.php @@ -66,7 +66,7 @@ class VideoFilters extends AudioFilters return $this; } - + /** * Clips (cuts) the video. *