Search code examples
phpsubtitledatetime-conversionsrt

Converting Seconds and Duration to SRT (subtitle) time format (PHP)


I have an input like like this:

start: 10 | duration: 1 | text: Subtitle Text 1 
start: 15 | duration: 2 | text: Subtitle Text 2 
start: 20 | duration: 3 | text: Subtitle Text 3

It's a subtitle instruction set, that says following:

At 10 second of the video, show "Subtitle Text 1" for 1 seconds
At 15 second of the video, show "Subtitle Text 2" for 2 seconds
At 20 second of the video, show "Subtitle Text 3" for 3 seconds

This input needs to be converted into SRT format, so it becomes something like this:

1
00:00:10,000 --> 00:00:11,000
Subtitle Text 1

2
00:00:15,000 --> 00:00:17,000
Subtitle Text 2

3
00:00:20,000 --> 00:00:23,000
Subtitle Text 3

Would it be possible for someone to show me how would you go about converting any given seconds value into SRT format (00:00:00,000) by using PHP?

That's all I really need, the rest I can figure out myself.

Thanks, much appreciated.


Solution

  • private function seconds2SRT($seconds)
    {
        $hours = 0;
        $whole = floor($seconds);
        $fraction = $seconds - $whole;
        $milliseconds = number_format($fraction, 3, '.', ',');
        $milliseconds_array = explode('.', strval($milliseconds));
        $milliseconds = $milliseconds_array[1];
    
        if ($seconds > 3600) {
            $hours = floor($seconds / 3600);
        }
        $seconds = $seconds % 3600;
    
    
        return str_pad($hours, 2, '0', STR_PAD_LEFT)
            . gmdate(':i:s', $seconds)
            . ($milliseconds ? ",$milliseconds" : '');
    }