$inputFilename = "The_Scarlet_Empress_1934_a_film_directed_by_Josef_von_Sternberg_with_Marlene_Dietrich_John_Lodge_Louise_Dresser_Sam_Jaffe-1378964146886.mp4"
$metadataTitle  = "The.Scarlet.Empress.1934"

$scaleSize_x = 436
$scaleSize_y = 320

$fileType = "webm"

$EXTRACTCLIPS = $true
$COMBINECLIPS  = $false
$CREATEMOSAIC  = $true
$RANDOM_TIMECODES = $false
$TESTRANDOM    = $false

$LOG_FILENAME = "log_file.txt"

# Arrays for the 9 clips (you can modify these)
$out_Filenames   = @("input1","input2","input3","input4","input5","input6","input7","input8","input9")
$out_Timejumps   = @("00:00:58","00:04:58","00:04:49","00:10:56","00:20:29","00:21:18","00:23:41","00:24:10","00:28:18")
$out_Timelength  = @("00:00:05","00:00:05","00:00:05","00:00:05","00:00:05","00:00:05","00:00:05","00:00:05","00:00:05")
$out_bitRates    = @("2M","2M","2M","2M","2M","2M","2M","2M","2M")
$out_subtitles   = @("null","null","null","null","null","null","null","null","null")

$ss_Timejump = "00:00:01"
$scaleSize   = "${scaleSize_x}x${scaleSize_y}"

# =====================================================
# 0. TEST RANDOM (optional)
if ($TESTRANDOM) {
    "=====================" | Out-File $LOG_FILENAME -Append
    (Get-Date) | Out-File $LOG_FILENAME -Append
    "TESTRANDOM" | Out-File $LOG_FILENAME -Append

    for ($i = 0; $i -le 10; $i++) {
        $timejump = Create-RandomTimeCode
        "" | Out-File $LOG_FILENAME -Append
        $i | Out-File $LOG_FILENAME -Append
        $timejump | Out-File $LOG_FILENAME -Append
    }
    "=====================" | Out-File $LOG_FILENAME -Append
}

# =====================================================
# 1. EXTRACT CLIPS
if ($EXTRACTCLIPS) {
    $libVid = "libvpx"          # or "libvpx-vp9"

    $totalNumber = $out_Filenames.Count

    "=====================" | Out-File $LOG_FILENAME -Append
    (Get-Date) | Out-File $LOG_FILENAME -Append
    "new_log_file" | Out-File $LOG_FILENAME -Append
    $metadataTitle | Out-File $LOG_FILENAME -Append
    $scaleSize | Out-File $LOG_FILENAME -Append

    for ($i = 0; $i -lt $totalNumber; $i++) {

        if ($RANDOM_TIMECODES) {
            $timejump = Create-RandomTimeCode
        } else {
            $timejump = if ($i -lt $out_Timejumps.Count) { $out_Timejumps[$i] } else { Create-RandomTimeCode }
        }

        $timelength = if ($i -lt $out_Timelength.Count) { $out_Timelength[$i] } else { "00:00:01" }
        $bitrate    = if ($i -lt $out_bitRates.Count)   { $out_bitRates[$i] }    else { "1M" }
        $subs       = if ($i -lt $out_subtitles.Count)  { $out_subtitles[$i] }   else { "null" }

        # Log
        "=====================" | Out-File $LOG_FILENAME -Append
        $out_Filenames[$i] | Out-File $LOG_FILENAME -Append
        $timejump | Out-File $LOG_FILENAME -Append
        $timelength | Out-File $LOG_FILENAME -Append
        "=====================" | Out-File $LOG_FILENAME -Append

        Write-Host "Processing $($out_Filenames[$i]) at $timejump for $timelength"

        # Two-pass encoding
        $outputFile = "$($out_Filenames[$i]).$fileType"

        # Pass 1
        ffmpeg -ss $timejump -i $inputFilename `
               -c:v $libVid -b:v $bitrate -s $scaleSize `
               -ss $ss_Timejump -t $timelength `
               -vf $subs -sn -an `
               -metadata title=$metadataTitle `
               -f $fileType -y -pass 1 -passlogfile "pass_$i" NUL

        # Pass 2
        ffmpeg -ss $timejump -i $inputFilename `
               -c:v $libVid -b:v $bitrate -s $scaleSize `
               -ss $ss_Timejump -t $timelength `
               -vf $subs -sn -an `
               -metadata title=$metadataTitle `
               -f $fileType -y -pass 2 -passlogfile "pass_$i" $outputFile
    }
}

# =====================================================
# 2. COMBINE CLIPS (if enabled)
if ($COMBINECLIPS) {
    # Example: combine first 9 clips
    ffmpeg -f concat -safe 0 -i lista.txt inputa.webm
    # Add more lines as needed...
}

# =====================================================
# 3. CREATE MOSAIC (3x3)
if ($CREATEMOSAIC) {
    $mosaic_bitRate = "1.5M"
    $mosaic_libVid  = "libvpx-vp9"

    $scaleSize_x3 = $scaleSize_x * 3
    $scaleSize_y3 = $scaleSize_y * 3
    $totalSize_3x3 = "${scaleSize_x3}x${scaleSize_y3}"

    Write-Host "Creating 3x3 mosaic at $totalSize_3x3 ..."

    $filter = "nullsrc=size=$totalSize_3x3 [base]; " +
              "[0:v] setpts=PTS-STARTPTS, scale=$scaleSize [v0]; " +
              "[1:v] setpts=PTS-STARTPTS, scale=$scaleSize [v1]; " +
              "[2:v] setpts=PTS-STARTPTS, scale=$scaleSize [v2]; " +
              "[3:v] setpts=PTS-STARTPTS, scale=$scaleSize [v3]; " +
              "[4:v] setpts=PTS-STARTPTS, scale=$scaleSize [v4]; " +
              "[5:v] setpts=PTS-STARTPTS, scale=$scaleSize [v5]; " +
              "[6:v] setpts=PTS-STARTPTS, scale=$scaleSize [v6]; " +
              "[7:v] setpts=PTS-STARTPTS, scale=$scaleSize [v7]; " +
              "[8:v] setpts=PTS-STARTPTS, scale=$scaleSize [v8]; " +
              "[base][v0] overlay=shortest=1:x=0:y=0 [tmp1]; " +
              "[tmp1][v1] overlay=shortest=1:x=$scaleSize_x:y=0 [tmp2]; " +
              "[tmp2][v2] overlay=shortest=1:x=$($scaleSize_x*2):y=0 [tmp3]; " +
              "[tmp3][v3] overlay=shortest=1:x=0:y=$scaleSize_y [tmp4]; " +
              "[tmp4][v4] overlay=shortest=1:x=$scaleSize_x:y=$scaleSize_y [tmp5]; " +
              "[tmp5][v5] overlay=shortest=1:x=$($scaleSize_x*2):y=$scaleSize_y [tmp6]; " +
              "[tmp6][v6] overlay=shortest=1:x=0:y=$($scaleSize_y*2) [tmp7]; " +
              "[tmp7][v7] overlay=shortest=1:x=$scaleSize_x:y=$($scaleSize_y*2) [tmp8]; " +
              "[tmp8][v8] overlay=shortest=1:x=$($scaleSize_x*2):y=$($scaleSize_y*2)"

    ffmpeg -i input1.webm -i input2.webm -i input3.webm `
           -i input4.webm -i input5.webm -i input6.webm `
           -i input7.webm -i input8.webm -i input9.webm `
           -filter_complex $filter `
           -c:v $mosaic_libVid -b:v $mosaic_bitRate `
           -metadata title="$metadataTitle" `
           -y "mosaic_3x3.$fileType"

    Write-Host "Mosaic created: mosaic_3x3.$fileType"
}