mokhosh / laravel-xml2srt
此包已废弃且不再维护。作者建议使用 mokhosh/laravel-captions 包。
在 Laravel 中处理 SRT 文件和 YouTube XML 字幕
v3.0.0
2024-08-09 09:06 UTC
Requires
- php: ^8.2
- ext-simplexml: *
- illuminate/contracts: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- larastan/larastan: ^2.0.1
- laravel/facade-documenter: dev-main
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.8|^8.0
- orchestra/testbench: ^8.8|^9.0
- pestphp/pest: ^2.20
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
README
您可以将 XML 时间码解析成逐行字幕表示,然后根据解析后的字幕生成 SRT 文件。
安装
您可以通过 composer 安装此包。
composer require mokhosh/laravel-caption
概念
Caption
有一个 Collection
的 Line
,您可以向其中 add()
一个新的 Line
。您也可以获取 Caption
的所有 lines()
。每一行是一个只读值对象,由一个浮点数 start
、一个浮点数 duration
和一个 text
组成。
您还可以使用 TimecodeConverter
的 floatToTimecode()
将浮点秒/毫秒值转换为格式化时间码。
用法
假设您需要读取任何自定义格式的字幕并基于其内容生成 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)。有关更多信息,请参阅 许可文件。