Public/Timestamps/Merge-SubtitleFile.ps1

function Merge-SubtitleFile {
    <#
    .SYNOPSIS
        Interleaves two SubtitleFile objects into one, sorted by start time.
    .DESCRIPTION
        Useful for combining forced subtitles with a full subtitle track, or
        merging subtitles from two sources.
    .PARAMETER Primary
        The primary SubtitleFile.
    .PARAMETER Secondary
        The SubtitleFile to merge into the primary.
    .EXAMPLE
        $merged = Merge-SubtitleFile -Primary $full -Secondary $forced
    #>

    [CmdletBinding()]
    [OutputType('SubtitleFile')]
    param(
        [Parameter(Mandatory)]
        [SubtitleFile] $Primary,

        [Parameter(Mandatory)]
        [SubtitleFile] $Secondary
    )

    $merged = [SubtitleFile]::new()
    $merged.Format   = $Primary.Format
    $merged.Encoding = $Primary.Encoding
    $merged.Header   = $Primary.Header

    $allEntries = @($Primary.Entries) + @($Secondary.Entries)
    $sorted     = $allEntries | Sort-Object Start

    $i = 1
    foreach ($entry in $sorted) {
        $entry.Index = $i++
    }

    $merged.Entries = $sorted
    return $merged
}