2015-09-07 1 views
3

Я искал и не нашел ничего подобного.
Я пытаюсь создать простой скрипт PHP/js/jq, который может добавлять или вычитать секунды из файла .srt. Я не уверен, что регулярное выражение - это то, с чем я должен пойти, чтобы достичь этого или что-то еще.
Пользователь загрузит/скопирует текст файла srt, а затем добавит количество секунд в поле ввода, которое они хотят добавить или вычесть секунды из SRT.Добавление или вычитание секунд из файла .SRT

Например, если пользователь добавляет +4 секунд к следующему SRT файла:

0 
00:00:04,594 --> 00:00:10,594 
this is a subtitle 

1 
00:00:40,640 --> 00:00:46,942 
this is another subtitle 

2 
00:02:05,592 --> 00:02:08,694 
this is one more subtitle 

Он должен выглядеть следующим образом:

0 
00:00:08,594 --> 00:00:14,594 
this is a subtitle 

1 
00:00:44,640 --> 00:00:50,942 
this is another subtitle 

2 
00:02:09,592 --> 00:02:12,694 
this is one more subtitle 
+0

Как вы говорите, вопрос звучит слишком широко. Пожалуйста, сушите задачу и делитесь тем, что вы пробовали до сих пор. –

+1

читайте в массиве, зацикливайте строку за строкой, добавьте секунды, напишите новый файл - по крайней мере, начните –

+0

[Запись Wikipedia на .srt-файлы] (https://en.wikipedia.org/wiki/SubRip#SubRip_. 28.srt.29_structure_examples), похоже, указывает на то, что номер заголовка отображается на линии до времени/субтитров. Просто интересно, это жесткое требование, поскольку это может повлиять на ответ. –

ответ

1

Вот решение в PHP, который является одним из ваши указанные языки.

Если вы можете представить время смещение, которое вы хотите применить в качестве string вы можете использовать DateTime методы DateTime::modify(), DateTime::createFromFormat() и preg_replace_callback() добиться того, что вы хотите сделать.

SubRip Wikipedia entry определяет формат таймкод как:

hours:minutes:seconds,milliseconds

Таким образом, мы можем написать регулярное выражение, чтобы захватить это; например: /(\d+:\d+:\d+,\d+)/ - хотя вы можете уточнить это.

Учитывая сценарий, где файл .srt считывается в строку $srt, и вы хотите, чтобы увеличить время на 5 секунд:

<?php 

$srt = <<<EOL 

0 
00:00:04,594 --> 00:00:10,594 this is a subtitle 

1 
00:00:40,640 --> 00:00:46,942 this is a subtitle 

2 
00:02:05,592 --> 00:02:08,694 this is a subtitle 
EOL; 

$regex = '/(\d+:\d+:\d+,\d+)/'; 
$offset = '+5 seconds'; 

$result = preg_replace_callback($regex, function($match) use ($offset) { 
    $dt = DateTime::createFromFormat('H:i:s,u', $match[0]); 
    $dt->modify($offset); 
    return $dt->format('H:i:s,u'); 
}, $srt); 

echo $result; 

На каждом $match используйте DateTime::createFromFormat() для преобразования соответствия таймкод в DateTime, который затем можно изменить и переформатировать в виде строки, представляющей время смещения.

Вы можете использовать различные значения смещения с DateTime::modify() включая, но не ограничиваясь ими: +1 minute, -30 seconds, 1 hour 2 minutes и так далее. Подробнее см. Связанную документацию.

Это дает:

0 
00:00:09,594000 --> 00:00:15,594000 this is a subtitle 

1 
00:00:45,640000 --> 00:00:51,942000 this is a subtitle 

2 
00:02:10,592000 --> 00:02:13,694000 this is a subtitle 

Надеется, что это помогает :)

+0

Спасибо Darragh ..! Извините, что опоздал, чтобы ответить и признать это. это, безусловно, поможет мне начать свой день с чего-то. Я тестировал его, и он отлично работает. Спасибо Upvote - это все, что я могу сделать. – Amit

+0

Не проблема. Рад помочь! –

+1

Работал из коробки. Очень полезное решение! –

0

Если вы хотите поддержать больше форматов на вашем сайте, вы можете использовать библиотеку:

$user_subtitles = $_POST['user_subtitles']; 

$subtitles = Subtitles::load($user_subtitles, 'srt'); // you can load different formats of subtitles 
$subtitles->time(4); // +4 seconds 

echo $subtitles->content(); 

https://github.com/mantas-done/subtitles

+0

Я пытался получить вашу многообещающую библиотеку, однако, не получилось. Я попробовал 'require_once (" Subtitles.php ")', затем 'use \ Done \ Subtitles \ Subtitles;' и запустить. Результат: 'Неустранимая ошибка: нечистая ошибка: класс 'Выполнено \ Субтитры \ Помощники не найдены'. Затем были включены файлы Helpers.php и php в папке Converter, следующая ошибка: «Интерфейс» Done \ Subtitles \ ConverterContract «не найден» - Не могли бы вы завершить свой скрипт выше? –

+0

Привет, вам нужно загрузить его с помощью «композитора». Или просто загрузите все файлы, как вы делали с required_once. Их не так много. –