Frage

1
00:00:00,074 --> 00:00:02,564
Previously on Breaking Bad...

2
00:00:02,663 --> 00:00:04,393
Words...

ich muss SRT-Dateien mit PHP analysieren und alle Subs in der Datei mit Variablen drucken.

ich konnte die richtigen Registrierungsexps nicht finden.dabei muss ich die Variablen id, time und subtitle verwenden.und beim Drucken dürfen keine array () s usw. vorhanden sein.muss genauso gedruckt werden wie in der Originaldatei.

ich meine, ich muss drucken wie;

$number <br> (e.g. 1)
$time <br> (e.g. 00:00:00,074 --> 00:00:02,564)
$subtitle <br> (e.g. Previously on Breaking Bad...)

übrigens habe ich diesen Code.aber es sieht die Linien nicht.es muss bearbeitet werden, aber wie?

$srt_file = file('test.srt',FILE_IGNORE_NEW_LINES);
$regex = "/^(\d)+ ([\d]+:[\d]+:[\d]+,[\d]+) --> ([\d]+:[\d]+:[\d]+,[\d]+) (\w.+)/";

foreach($srt_file as $srt){

    preg_match($regex,$srt,$srt_lines);

    print_r($srt_lines);
    echo '<br />';

}
War es hilfreich?

Lösung

Hier ist eine kurze und einfache Zustandsmaschine zum Analysieren der SRT-Dateizeile nach Zeile: generasacodicetagpre.

Ergebnis: generasacodicetagpre.

Sie können dann das Anschluss an Subs anschließen oder durch Array-Offset auf sie zugreifen: generasacodicetagpre.

, um alle Subbene zu zeigen, indem Sie über jedem Schleifen einreichen und angezeigt werden: generasacodicetagpre.

Weiterlesung: substreifen Textdateiformat

Andere Tipps

das nicht übereinstimmt, da Ihr $ srt_file-Array so aussehen könnte: generasacodicetagpre.

Ihre Regex wird keiner dieser Elemente anpassen.

Wenn Ihre Absicht die gesamte Datei in einem langen Speicher-HOG-OF-A-String lesen soll, verwenden Sie date_get_contents, um den gesamten Dateiinhalt in eine Zeichenfolge zu erhalten.Verwenden Sie dann einen Preg_match_all, um alle REGEX-Übereinstimmungen zu erhalten.

Andernfalls versuchen Sie möglicherweise, das Array durchzusetzen, und versuchen Sie, verschiedene Regex-Muster anzupassen, um festzustellen, ob die Zeile eine ID, ein Zeitbereich oder Text ist und angemessen ist.Natürlich möchten Sie möglicherweise auch eine Logik, um sicherzustellen, dass Sie in der richtigen Reihenfolge Werte erhalten (ID, dann Zeitbereich, dann Text).

Gruppieren Sie die file() array in Stücke von 4 mit array_chunk(), dann lass den letzten Eintrag weg, da es eine Leerzeile wie diese ist:

foreach( array_chunk( file( 'test.srt'), 4) as $entry) {
    list( $number, $time, $subtitle) = $entry;
    echo $number . '<br />';
    echo $time . '<br />';
    echo $subtitle . '<br />';
}

Ich habe eine Klasse gemacht, um eine .SRT-Datei in ein Array zu konvertieren. Jede Eingabe des Arrays hat die folgenden Eigenschaften:

  • -Um: Eine Zahl, die die ID des Untertitels (2) darstellt
  • Start: Float, die Startzeit in Sekunden (24.443)
  • Ende: Float, die Endzeit in Sekunden (27.647)
  • startstring: Die Startzeit im menschlichen lesbaren Format (00: 00: 24.443)
  • Endstring: Die Endzeit im menschlichen lesbaren Format (00: 00: 24.647)
  • Dauer: Die Dauer des Untertitels, in MS (3204)
  • Text: Der TextderUntertitel(.diePeacocksherrschte überGongmenCity )

    Der Code lautet PHP7: generasacodicetagpre.

    Oder checken Sie es hier draußen: https://github.com/Lingtalfi/videosubtitles .

Sie können dieses Projekt verwenden: https://github.com/captioning/captioning

Beispielcode: generasacodicetagpre.

Beispielausgabe: generasacodicetagpre.

Es kann mit der PHP-Line-Pause erfolgen. Ich könnte es erfolgreich machen Lass mich meinen Code zeigen generasacodicetagpre.

hier $ movie-> srt ist der Untertitel des Formats, das Sie in dieser Frage veröffentlicht haben. Wie wir sehen, ist jeder Zeitraum zwei neue Zeile, Ich hoffe, du bekommst Antwort.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top