mokhosh/laravel-xml2srt

此包已废弃且不再维护。作者建议使用 mokhosh/laravel-captions 包。

在 Laravel 中处理 SRT 文件和 YouTube XML 字幕

v3.0.0 2024-08-09 09:06 UTC

This package is auto-updated.

Last update: 2024-08-09 09:08:45 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

您可以将 XML 时间码解析成逐行字幕表示,然后根据解析后的字幕生成 SRT 文件。

安装

您可以通过 composer 安装此包。

composer require mokhosh/laravel-caption

概念

Caption 有一个 CollectionLine,您可以向其中 add() 一个新的 Line。您也可以获取 Caption 的所有 lines()。每一行是一个只读值对象,由一个浮点数 start、一个浮点数 duration 和一个 text 组成。

您还可以使用 TimecodeConverterfloatToTimecode() 将浮点秒/毫秒值转换为格式化时间码。

用法

假设您需要读取任何自定义格式的字幕并基于其内容生成 SRT 字幕。

以下是如何将 OpenAI 转写 Json 转换为 STR 文件的示例

use Mokhosh\LaravelCaption\Caption;use Mokhosh\LaravelCaption\Generators\SrtGenerator;use Mokhosh\LaravelCaption\Line;

// $response = OpenAI::audio()->transcribe();

$caption = new Caption;

foreach ($response->segments as $segment) {
    $caption->add(new Line(
        floatval($segment->start),
        floatval($segment->end) - floatval($segment->start),
        trim($segment->text),
    ));
}

SrtGenerator::load($caption)->export('output.srt');

或者您可以使用外观加载包含 OpenAI 响应的 json 文件

use Mokhosh\LaravelCaption\Facades\LaravelCaption;

// convert to srt and return output path
$output = LaravelCaption::openai2srt('input.json', 'output.srt');

您可以将 YouTube xml 时间码文件转换为 srt 字幕文件,如下所示

use Mokhosh\LaravelCaption\Facades\LaravelCaption;

// convert to srt and return output path
$output = LaravelCaption::xml2srt('input.xml', 'output.srt');

如果需要将 xml 分块为较小的 srt 文件,请这样做

use Mokhosh\LaravelCaption\Facades\LaravelCaption;

// chunk every 10 lines into chunks/ folder and return an array of chunks' paths
$chunks = LaravelCaption::xml2srt('input.xml', 'chunks/', every: 10);

如果您需要更多控制,请这样做

use Mokhosh\LaravelCaption\Generators\SrtGenerator;use Mokhosh\LaravelCaption\Parsers\XmlCaptionParser;

$caption = XmlCaptionParser::import('input.xml')->parse();
$output = SrtGenerator::load($caption)->export('output.srt');

并且对于分块

use Mokhosh\LaravelCaption\Generators\SrtGenerator;use Mokhosh\LaravelCaption\Parsers\XmlCaptionParser;

$caption = XmlCaptionParser::import('input.xml')->parse();
// chunk every 4 lines into chunks folder and prefix chunk files with the word "part"
$chunks = SrtGenerator::load($caption)->chunk(4, 'chunks/', 'part');

测试

./vendor/bin/pest

更新日志

有关最近更改的更多信息,请参阅 更新日志

贡献

有关详细信息,请参阅 贡献

鸣谢

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件