saeven/subtitles

There is no license information available for the latest version (dev-master) of this package.

Subtitle converter and generator for PHP

Maintainers

Details

github.com/Saeven/subtitles

Source

Installs: 1 674

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 49

dev-master 2023-04-10 16:12 UTC

This package is auto-updated.

Last update: 2024-10-10 20:04:00 UTC


README

Convert and edit subtitles and captions.

Supported formats

Installation

composer require saeven/subtitles

Fork Notes

This package was forked from mantas-done/subtitles (thank you) to become more opinionated, to implement strict types and new interfaces, and to implement proper PSR-4 loading. What's more, this version of that package removes all ability to manipulate files directly or to attempt to infer the existence of converters by scanning the filesystem with file_exists and so forth. It also resorts to pattern matching in cases where the original implementation would split strings. Lastly, it adds Carbon to perform time conversions.

Usage

Convert .srt content to .vtt:

// add namespace
use \Circlical\Subtitles\Subtitles;

(new Subtitles())->load($srtContent, 'srt')->content('vtt');

Manually create VTT

$subtitles = new Subtitles();
$subtitles->add(0, 5, 'This text is shown in the beggining of video for 5 seconds');
file_put_contents( './foo', $subtitles->content('subtitles.vtt'));

Load subtitles from string

$string = "
1
00:02:17,440 --> 00:02:20,375
Senator, we're making our final approach
";  

$subtitles = Subtitles::load($string, 'srt');

Get file content without saving to file

echo $subtitles->content('vtt');

Add subtitles

$subtitles->add(0, 5, 'some text'); // from 0, till 5 seconds  

// Add multiline text
$subtitles->add(0, 5, [
    'first line',
    'second line',
]);

Remove subtitles

$subtitles->remove(0, 5); // from 0, till 5 seconds

Add 1 second to all subtitles

$subtitles->shiftTime(1);

Subtract 0.5 second

$subtitles->shiftTime(-0.5);

Add 5 second to subtitles starting from 1 minute till 2 mintes

$subtitles->shiftTime(5, 60, 120);

Example: shift time gradually by 2 seconds over 1 hour video. At the beginning of the video don't change time, in the middle shift time by 1 second. By the end of video, shift time by 2 seconds.

$subtitles->shiftTimeGradually(2, 0, 3600);

"Internal Format"

"Internal Format" is just a PHP array. It is used internally in library to be able to convert between different formats.

Array
(
    [0] => Array
        (
            [start] => 137.44
            [end] => 140.375
            [lines] => Array
                (
                    [0] => Senator, we're making
                    [1] => our final approach into Coruscant.
                )
        )
    [1] => Array
        (
            [start] => 140.476
            [end] => 142.501
            [lines] => Array
                (
                    [0] => Very good, Lieutenant.
                )
        )
)
[start] - when to start showing text (float - seconds)
[end] - when to stop showing text (float -seconds)
[lines] - one or more text lines (array)

Running Tests

./vendor/bin/phpunit

Contribution

Not all original converters from the fork have been corrected. Feel free to convert one from the 'todo' folder and open a PR!

Report Bugs

If some file is not working with the library, please create and issue and attach the file.