fireworkweb / smpte
Easily deal with Timecode SMPTE format in PHP
Installs: 27 735
Dependents: 0
Suggesters: 0
Security: 0
Stars: 7
Watchers: 3
Forks: 9
Open Issues: 2
Type:project
Requires
- php: ^7.1|^8.0
Requires (Dev)
- phpunit/phpunit: ^7
README
Easily deal with SMPTE Timecode format in PHP. If you need a Javascript lib, check out fireworkweb/smpte.js.
Installation
You can install the package via composer:
composer require fireworkweb/smpte
Usage
Include the Timecode or Validations classes:
use FireworkWeb\SMPTE\Timecode; use FireworkWeb\SMPTE\Validations;
You can instantiate it directly using new:
// passing frame count $timecode = new Timecode(360); // passing a timecode string $timecode = new Timecode('00:00:01:10'); // passing a Datetime object $timecode = new Timecode(new \DateTime('01:34:12'));
Or you can use the static helper:
$timecode = Timecode::fromSeconds(10);
Properties
Object Methods
__construct($time = 0, $frameRate = null, $dropFrame = null)
$time
:int|String|Timecode
time to start with.$frameRate
:float
frame rate to calculate the timecode.$dropFrame
:bool
indicates if is drop frame. ONLY WITH 29.97 FPS
$time
as int is the frame count to be setted with. To deal with seconds, use fromSeconds
.
Note: if $frameRate
or $dropFrame
are null, it will use the default.
toString()
/ __toString()
Returns a timecode string representation.
(new Timecode(360))->toString(); // "00:00:15:00"
add($time, $operation = 1)
Adds a timecode or a frame count to the current Timecode object.
$time
:int|String|Timecode
indicating the value to be added.$operation
:int
used to get the sign oftime
.return
:Timecode
Reference to theTimecode
object.
$tc = new Timecode('00:01:00:00'); // Adding from string $tc->add('00:00:30:00')->toString(); // 00:01:30:00 // Adding frame count $tc->add(1)->toString(); // 00:01:30:01 // Adding from another object $tc2 = new Timecode('00:01:00:00'); $tc->add($tc2)->toString(); // 00:02:30:01
subtract($time)
Substracts a timecode or a frame count to the current Timecode object.
$time
:int|String|Timecode
indicating the value to be added.return
:Timecode
Reference to theTimecode
object.
$tc = new Timecode('00:03:00:00'); // Subtracting from string $tc->subtract('00:00:30:00')->toString(); // 00:02:30:00 // Subtracting frame count $tc->subtract(1)->toString(); // 00:02:29:23 // Subtracting from another object $tc2 = new Timecode('00:01:00:00'); $tc->subtract($tc2)->toString(); // 00:01:29:23
setHours($hours)
Directly set object hours.
$hours
:int
indicating the value to be setted.
$tc = new Timecode('00:03:00:00'); $tc->setHours(1)->toString(); // 01:03:00:00
setMinutes($minutes)
Directly set object minutes.
$minutes
:int
indicating the value to be setted.
$tc = new Timecode('00:03:00:00'); $tc->setMinutes(1)->toString(); // 00:01:00:00
setSeconds($seconds)
Directly set object seconds.
$seconds
:int
indicating the value to be setted.
$tc = new Timecode('00:03:00:00'); $tc->setSeconds(1)->toString(); // 00:03:01:00
setFrames($frames)
Directly set object frames.
$frames
:int
indicating the value to be setted.
$tc = new Timecode('00:03:00:00'); $tc->setFrames(1)->toString(); // 00:03:00:01
setFrameCount($frameCount)
Directly set object frame count. This will recalculate all other attributes, so use it with care.
$frameCount
:int
indicating the value to be setted.
$tc = new Timecode('00:03:00:00'); $tc->setFrameCount(360)->toString(); // 00:00:15:00
Static Methods
frameCountFromTimecode($time, $frameRate = null, $dropFrame = null)
Returns the frame count from a time.
$time
:String
time as string to calculate.$frameRate
:float
frame rate to calculate the timecode.$dropFrame
:bool
indicates if is drop frame.return
:int
returns the frame count
fromSeconds($seconds, $frameRate = null, $dropFrame = null)
Instantiate a new object from seconds instead of timecode/framecount.
$seconds
:int
seconds to convert$frameRate
:float
frame rate to calculate the timecode.$dropFrame
:bool
indicates if is drop frame.return
:Timecode
Returns the newly created object
$tc = Timecode::fromSeconds(15); $tc->toString(); // 00:00:15:00
setDefaultFrameRate($frameRate)
Change default frame rate to instantiate objects with.
$frameRate
:float
New default frame rate.
$tc = new Timecode(); $tc->getFrameRate(); // 24 Timecode::setDefaultFrameRate(25); $tc2 = new Timecode(); $tc2->getFrameRate(); // 25
setDefaultDropFrame($dropFrame)
Change default drop frame to instantiate objects with.
$dropFrame
:float
New default drop frame.
$tc = new Timecode(); $tc->getDropFrame(); // false Timecode::setDefaultDropFrame(true); $tc2 = new Timecode(); $tc2->getDropFrame(); // true
Contributing
All contribution is welcome, please feel free to open tickets and pull requests.