Преобразование секунд и длительности в формат времени SRT (субтитры) (PHP)

У меня есть такой вклад:

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

Это набор инструкций субтитров, который говорит следующее:

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

Этот вход должен быть преобразован в формат SRT, поэтому он становится примерно таким:

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

Может ли кто-нибудь показать мне, как бы вы конвертировали любое заданное значение секунд в формат SRT (00: 00: 00,000) с использованием PHP?

Это все, что мне действительно нужно, остальное я могу понять сам.

Спасибо, высоко ценится.

3

Решение

Я в конце концов понял это с помощью https://stackoverflow.com/a/4763921/998415

Это моя собственная функция, основанная на приведенном выше скрипте:

function seconds2SRT( $seconds )
{
$hours = 0;
$milliseconds = str_replace( "0.", '', $seconds - floor( $seconds ) );

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" : '')
;
}

Посмотрите, как это работает в этой демонстрации: https://eval.in/665896

2

Другие решения

Вы можете создавать субтитры, как это:

$subtitles = new Subtitles();
$subtitles->add(10, 11, 'Subtitle Text 1');
$subtitles->add(15, 17, 'Subtitle Text 2');
$subtitles->add(20, 23, 'Subtitle Text 3');
echo $subtitles->content('srt');

// or if you need file
$subtitles->save('subtitle-file.srt');

Вам необходимо скачать эту библиотеку: https://github.com/mantas-done/subtitles

0

По вопросам рекламы [email protected]