$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" }