Easily deal with SMPTE Timecode format in PHP. If you need a Javascript lib, check out fireworkweb/smpte.js.
You can install the package via composer:
composer require fireworkweb/smpte
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);
Property | Type | Description |
---|---|---|
getFrameCount() |
int |
Total number of frames |
getHours() |
int |
Hours number |
getMinutes() |
int |
Minutes number |
getSeconds() |
int |
Seconds number |
getFrames() |
int |
Frames number |
durationInSeconds() |
int |
Timecode duration in seconds |
$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.
Returns a timecode string representation.
(new Timecode(360))->toString();
// "00:00:15:00"
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
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
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
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
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
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
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
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
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
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
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
All contribution is welcome, please feel free to open tickets and pull requests.