liveChapters function

String liveChapters(
  1. List<LiveCue> cues,
  2. Duration length
)

The cues as an ffmpeg metadata file of chapters, the last one running to length.

Implementation

String liveChapters(List<LiveCue> cues, Duration length) {
  final StringBuffer metadata = StringBuffer(';FFMETADATA1\n');
  for (int i = 0; i < cues.length; i++) {
    final LiveCue cue = cues[i];
    final Duration end = i + 1 < cues.length
        ? cues[i + 1].start
        : (length > cue.end ? length : cue.end);
    final String title = cue.text
        .replaceAllMapped(RegExp(r'[=;#\\]'), (Match m) => '\\${m[0]}')
        .replaceAll('\n', ' ');
    metadata
      ..write('\n[CHAPTER]\nTIMEBASE=1/1000\n')
      ..write('START=${cue.start.inMilliseconds}\n')
      ..write('END=${end.inMilliseconds}\n')
      ..write('title=$title\n');
  }
  return metadata.toString();
}