Range extraction

The filter can perform time range extraction of the source using [xs](#xs) and [xe](#xe) options.  
The formats allowed for times specifiers are:  

- 'T'H:M:S, 'T'M:S: specify time in hours, minutes, seconds  
- 'T'H:M:S.MS, 'T'M:S.MS, 'T'S.MS: specify time in hours, minutes, seconds and milliseconds  
- INT, FLOAT, NUM/DEN: specify time in seconds (number or fraction)  
- 'D'INT, 'D'FLOAT, 'D'NUM/DEN: specify end time as offset to start time in seconds (number or fraction) - only valid for [xe](#xe)  
- 'F'NUM: specify time as frame number, 1 being first  
- XML DateTime: specify absolute UTC time  

    
In this mode, the timestamps are rewritten to form a continuous timeline, unless [xots](#xots) is set.  
When multiple ranges are given, the filter will try to seek if needed and supported by source.  
  
Example
```
gpac -i m.mp4 reframer:xs=T00:00:10,T00:01:10,T00:02:00:xe=T00:00:20,T00:01:20 [dst]
```
  
This will extract the time ranges [10s,20s], [1m10s,1m20s] and all media starting from 2m  
  
If no end range is found for a given start range:  

- if a following start range is set, the end range is set to this next start  
- otherwise, the end range is open  

  
Example
```
gpac -i m.mp4 reframer:xs=0,10,25:xe=5,20 [dst]
```
  
This will extract the time ranges [0s,5s], [10s,20s] and all media starting from 25s  
Example
```
gpac -i m.mp4 reframer:xs=0,10,25 [dst]
```
  
This will extract the time ranges [0s,10s], [10s,25s] and all media starting from 25s  
  
It is possible to signal range boundaries in output packets using [splitrange](#splitrange).  
This will expose on the first packet of each range in each PID the following properties:  

- `FileNumber`: starting at 1 for the first range, to be used as replacement for $num$ in templates  
- `FileSuffix`: corresponding to `StartRange_EndRange` or `StartRange` for open ranges, to be used as replacement for $FS$ in templates  

  
Example
```
gpac -i m.mp4 reframer:xs=T00:00:10,T00:01:10:xe=T00:00:20:splitrange -o dump_$FS$.264 [dst]
```
  
This will create two output files dump_T00.00.10_T00.02.00.264 and dump_T00.01.10.264.  
_Note: The `:` and `/` characters are replaced by `.` in `FileSuffix` property._  
  
It is possible to modify PID properties per range using [props](#props). Each set of property must be specified using the active separator set.  

__Warning: The option must be escaped using double separators in order to be parsed properly.__  
  
Example
```
gpac -i m.mp4 reframer:xs=0,30::props=#Period=P1,#Period=P2:#foo=bar [dst]
```
  
This will assign to output PIDs  

- during the range [0,30]: property `Period` to `P1`  
- during the range [30, end]: properties `Period` to `P2` and property `foo` to `bar`  

  
For uncompressed audio PIDs, input frame will be split to closest audio sample number.  
  
When [xround](#xround) is set to `seek`, the following applies:  

- a single range shall be specified  
- the first I-frame preceding or matching the range start is used as split point  
- all packets before range start are marked as seek points  
- packets overlapping range start are forwarded with a `SkipBegin` property set to the amount of media to skip  
- packets overlapping range end are forwarded with an adjusted duration to match the range end  

This mode is typically used to extract a range in a frame/sample accurate way, rather than a GOP-aligned way.  
  
When [xround](#xround) is not set to `seek`, compressed audio streams will still use seek mode.  
Consequently, these streams will have modified edit lists in ISOBMFF which might not be properly handled by players.  
This can be avoided using [no_audio_seek](#no_audio_seek), but this will introduce audio delay.