PHPackages                             podlove/podlove-timeline - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. podlove/podlove-timeline

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

podlove/podlove-timeline
========================

PHP library providing a toolkit to handle various timeline/chapter formats.

v2.1.0(6mo ago)85.4k1MITPHPPHP &gt;=8.0.0

Since May 5Pushed 6mo ago16 watchersCompare

[ Source](https://github.com/podlove/podlove-timeline)[ Packagist](https://packagist.org/packages/podlove/podlove-timeline)[ RSS](/packages/podlove-podlove-timeline/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (2)Versions (14)Used By (0)

Podlove Timeline
================

[](#podlove-timeline)

PHP library providing a toolkit to handle various timeline/chapter formats.

Supported formats:

- mp4chaps
- psc
- JSON
- PodcastIndexJSON (see [specification](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/examples/chapters/jsonChapters.md))

Usage
-----

[](#usage)

### Create Chapters Programmatically

[](#create-chapters-programmatically)

```
use \Podlove\Chapters\Chapters;
use \Podlove\Chapters\Chapter;

$chapters = new Chapters();
$chapters->addChapter( new Chapter( 1234, 'Intro' ) );
$chapters->addChapter( new Chapter( 5234, 'Second Chapter' ) );
echo $chapters[0]->get_title(); // => "Intro"
```

### Printer

[](#printer)

#### Printer — PSC (Podlove Simple Chapters)

[](#printer--psc-podlove-simple-chapters)

```
use \Podlove\Chapters\Chapters;
use \Podlove\Chapters\Chapter;
use \Podlove\Chapters\Printer;

$chapters = new Chapters();
$chapters->addChapter( new Chapter( 1234, 'Intro', 'http://example.com' ) );
$chapters->addChapter( new Chapter( 1235, 'Second Chapter' ) );
$chapters->setPrinter( new Printer\PSC() );
echo (string) $chapters;
/* =>

*/
```

#### Printer — mp4chaps

[](#printer--mp4chaps)

```
use \Podlove\Chapters\Chapters;
use \Podlove\Chapters\Chapter;
use \Podlove\Chapters\Printer;

$chapters = new Chapters();
$chapters->addChapter( new Chapter( 1234, 'Intro', 'http://example.com' ) );
$chapters->addChapter( new Chapter( 754000, 'About us' ) );
$chapters->addChapter( new Chapter( 3723000, 'Later' ) );
$chapters->setPrinter( new Printer\Mp4chaps() );
echo (string) $chapters;
/* =>
00:00:01.234 Intro
00:12:34.000 About us
01:02:03.000 Later
*/
```

#### Printer — JSON

[](#printer--json)

```
use \Podlove\Chapters\Chapters;
use \Podlove\Chapters\Chapter;
use \Podlove\Chapters\Printer;

$chapters = new Chapters();
$chapters->addChapter( new Chapter( 1234, 'Intro', 'http://example.com' ) );
$chapters->addChapter( new Chapter( 754000, 'About us' ) );
$chapters->addChapter( new Chapter( 3723000, 'Later', '', 'http://example.com/foo.jpg' ) );
$chapters->setPrinter( new Printer\JSON() );
/* =>
[
	{ "start": "00:00:01.234", "title": "Intro", "href": "http://example.com", "image": "" },
	{ "start": "00:12:34.000", "title": "About us", "href": "", "image": "" },
	{ "start": "01:02:03.000", "title": "Later", "href": "", "image": "http://example.com/foo.jpg" }
]
*/
```

### Parser

[](#parser)

Parse chapters in various formats.

#### Parser — PSC (Podlove Simple Chapters)

[](#parser--psc-podlove-simple-chapters)

```
use \Podlove\Chapters\Parser;

$psc_string = '

';

$chapters = Parser\PSC::parse( $psc_string );
echo $chapters[0]->get_title(); // => "Intro"
```

#### Parser — mp4chaps

[](#parser--mp4chaps)

```
use \Podlove\Chapters\Parser;

$mp4chaps_string = "3.45 Intro\n3.46 The End";
$chapters = Parser\Mp4chaps::parse( $mp4chaps_string );
echo $chapters[0]->get_title(); // => "Intro"
```

#### Parser — JSON

[](#parser--json)

```
use \Podlove\Chapters\Parser;

$json_string = "[
	{ "start": "00:00:01.234", "title": "Intro", "href": "http://example.com" },
]";
$chapters = Parser\Mp4chaps::parse( $json_string );
echo $chapters[0]->get_title(); // => "Intro"
```

###  Health Score

50

—

FairBetter than 95% of packages

Maintenance66

Regular maintenance activity

Popularity28

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity75

Established project with proven stability

 Bus Factor1

Top contributor holds 83.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~384 days

Recently: every ~1141 days

Total

13

Last Release

202d ago

Major Versions

v1.1.9 → v2.0.02023-10-14

PHP version history (2 changes)v1.0.0PHP &gt;=5.3.0

v2.0.0PHP &gt;=8.0.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/d4769237263906fc84e2cae1a3aea1af93f39076b479945db7453f49776194fc?d=identicon)[eteubert](/maintainers/eteubert)

---

Top Contributors

[![eteubert](https://avatars.githubusercontent.com/u/235918?v=4)](https://github.com/eteubert "eteubert (20 commits)")[![PeterTheOne](https://avatars.githubusercontent.com/u/666289?v=4)](https://github.com/PeterTheOne "PeterTheOne (3 commits)")[![sthesing](https://avatars.githubusercontent.com/u/464966?v=4)](https://github.com/sthesing "sthesing (1 commits)")

---

Tags

parserconverterwebvttpodlovemp4chapspscchapter

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/podlove-podlove-timeline/health.svg)

```
[![Health](https://phpackages.com/badges/podlove-podlove-timeline/health.svg)](https://phpackages.com/packages/podlove-podlove-timeline)
```

###  Alternatives

[nikic/php-parser

A PHP parser written in PHP

17.4k954.1M2.5k](/packages/nikic-php-parser)[doctrine/lexer

PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.

11.2k959.9M160](/packages/doctrine-lexer)[erusev/parsedown

Parser for Markdown.

15.1k156.8M870](/packages/erusev-parsedown)[league/commonmark

Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)

3.0k437.5M1.0k](/packages/league-commonmark)[masterminds/html5

An HTML5 parser and serializer.

1.8k269.7M322](/packages/masterminds-html5)[sabberworm/php-css-parser

Parser for CSS Files written in PHP

1.8k211.0M75](/packages/sabberworm-php-css-parser)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
