4

私は検索しましたが、似たようなものは何も見つかりませんでした。
私が達成しようとしているのは、.srt ファイルから秒数を加算または減算できる単純な PHP/js/jq スクリプトを作成することです。正規表現がそれを達成するために使用する必要があるものなのか、それとも他のものなのかはわかりません。
ユーザーは、srt ファイルのテキストをアップロード/コピーし、入力ボックスに秒数を追加して、SRT から秒数を加算または減算します。

たとえば、ユーザーが次の srt ファイルに +4 秒を追加するとします。

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
4

2 に答える 2

1

これは、指定した言語の 1 つである PHP でのソリューションです。

適用したい時間オフセットを として表すことができる場合は、メソッドをstring使用して、やりたいことを達成できます。DateTimeDateTime::modify()DateTime::createFromFormat()preg_replace_callback()

SubRip ウィキペディアのエントリでは、タイムコード形式を次のように指定しています。

時間:分:秒、ミリ秒

したがって、これをキャプチャする正規表現を記述できます。例: /(\d+:\d+:\d+,\d+)/- これを改良したいかもしれませんが。

.srt ファイルが string$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 seconds1 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

お役に立てれば :)

于 2015-09-07T22:20:09.100 に答える
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

于 2017-01-15T17:32:03.853 に答える