@echo off setlocal enabledelayedexpansion :: ===================================================== :: Windows Batch (.bat) version - Video Mosaic Script :: ===================================================== :: ====================== CONFIG ====================== set "inputFilename=The_Scarlet_Empress_1934_a_film_directed_by_Josef_von_Sternberg_with_Marlene_Dietrich_John_Lodge_Louise_Dresser_Sam_Jaffe-1378964146886.mp4" set "metadataTitle=The.Scarlet.Empress.1934" set scaleSize_x=436 set scaleSize_y=320 set fileType=webm set EXTRACTCLIPS=true set COMBINECLIPS=false set CREATEMOSAIC=true set RANDOM_TIMECODES=false set TESTRANDOM=false set LOG_FILENAME=log_file.txt :: Arrays (9 clips) set out_Filenames[0]=input1 set out_Filenames[1]=input2 set out_Filenames[2]=input3 set out_Filenames[3]=input4 set out_Filenames[4]=input5 set out_Filenames[5]=input6 set out_Filenames[6]=input7 set out_Filenames[7]=input8 set out_Filenames[8]=input9 set out_Timejumps[0]=00:00:58 set out_Timejumps[1]=00:04:58 set out_Timejumps[2]=00:04:49 set out_Timejumps[3]=00:10:56 set out_Timejumps[4]=00:20:29 set out_Timejumps[5]=00:21:18 set out_Timejumps[6]=00:23:41 set out_Timejumps[7]=00:24:10 set out_Timejumps[8]=00:28:18 set out_Timelength[0]=00:00:05 set out_Timelength[1]=00:00:05 set out_Timelength[2]=00:00:05 set out_Timelength[3]=00:00:05 set out_Timelength[4]=00:00:05 set out_Timelength[5]=00:00:05 set out_Timelength[6]=00:00:05 set out_Timelength[7]=00:00:05 set out_Timelength[8]=00:00:05 set out_bitRates[0]=2M set out_bitRates[1]=2M set out_bitRates[2]=2M set out_bitRates[3]=2M set out_bitRates[4]=2M set out_bitRates[5]=2M set out_bitRates[6]=2M set out_bitRates[7]=2M set out_bitRates[8]=2M set out_subtitles[0]=null set out_subtitles[1]=null set out_subtitles[2]=null set out_subtitles[3]=null set out_subtitles[4]=null set out_subtitles[5]=null set out_subtitles[6]=null set out_subtitles[7]=null set out_subtitles[8]=null set ss_Timejump=00:00:01 set /a "scaleSize_x3=%scaleSize_x%*3" set /a "scaleSize_y3=%scaleSize_y%*3" set "scaleSize=%scaleSize_x%x%scaleSize_y%" :: ===================================================== :: 0. TEST RANDOM (optional) if "%TESTRANDOM%"=="true" ( echo ===================== >> %LOG_FILENAME% echo %date% %time% >> %LOG_FILENAME% echo TESTRANDOM >> %LOG_FILENAME% for /l %%i in (0,1,10) do ( set /a sec=!random! %% 60 set /a min=!random! %% 60 set /a hou=!random! %% 2 echo. >> %LOG_FILENAME% echo %%i >> %LOG_FILENAME% echo !hou!:!min!:!sec! >> %LOG_FILENAME% ) echo ===================== >> %LOG_FILENAME% ) :: ===================================================== :: 1. EXTRACT CLIPS if "%EXTRACTCLIPS%"=="true" ( set libVid=libvpx :: set libVid=libvpx-vp9 echo ===================== >> %LOG_FILENAME% echo %date% %time% >> %LOG_FILENAME% echo new_log_file >> %LOG_FILENAME% echo %metadataTitle% >> %LOG_FILENAME% echo %scaleSize% >> %LOG_FILENAME% for /l %%i in (0,1,8) do ( if "%RANDOM_TIMECODES%"=="true" ( set /a sec=!random! %% 60 set /a min=!random! %% 60 set /a hou=!random! %% 2 set "timejump=!hou!:!min!:!sec!" ) else ( set "timejump=!out_Timejumps[%%i]!" ) set "timelength=!out_Timelength[%%i]!" set "bitrate=!out_bitRates[%%i]!" set "subs=!out_subtitles[%%i]!" echo ===================== echo !out_Filenames[%%i]! echo !timejump! echo !timelength! echo ===================== >> %LOG_FILENAME% echo !out_Filenames[%%i]! >> %LOG_FILENAME% echo !timejump! >> %LOG_FILENAME% echo !timelength! >> %LOG_FILENAME% echo ===================== >> %LOG_FILENAME% echo Processing !out_Filenames[%%i]! at !timejump! for !timelength! :: 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" "!out_Filenames[%%i]!.%fileType%" ) ) :: ===================================================== :: 3. CREATE 3x3 MOSAIC if "%CREATEMOSAIC%"=="true" ( set mosaic_bitRate=1.5M set mosaic_libVid=libvpx-vp9 echo Creating 3x3 mosaic... :: Build the complex filter (long but necessary) set "filter=nullsrc=size=%scaleSize_x3%x%scaleSize_y3% [base];" set "filter=!filter! [0:v] setpts=PTS-STARTPTS, scale=%scaleSize% [v0];" set "filter=!filter! [1:v] setpts=PTS-STARTPTS, scale=%scaleSize% [v1];" set "filter=!filter! [2:v] setpts=PTS-STARTPTS, scale=%scaleSize% [v2];" set "filter=!filter! [3:v] setpts=PTS-STARTPTS, scale=%scaleSize% [v3];" set "filter=!filter! [4:v] setpts=PTS-STARTPTS, scale=%scaleSize% [v4];" set "filter=!filter! [5:v] setpts=PTS-STARTPTS, scale=%scaleSize% [v5];" set "filter=!filter! [6:v] setpts=PTS-STARTPTS, scale=%scaleSize% [v6];" set "filter=!filter! [7:v] setpts=PTS-STARTPTS, scale=%scaleSize% [v7];" set "filter=!filter! [8:v] setpts=PTS-STARTPTS, scale=%scaleSize% [v8];" set "filter=!filter! [base][v0] overlay=shortest=1:x=0:y=0 [tmp1];" set "filter=!filter! [tmp1][v1] overlay=shortest=1:x=%scaleSize_x%:y=0 [tmp2];" set "filter=!filter! [tmp2][v2] overlay=shortest=1:x=%scaleSize_x%*2:y=0 [tmp3];" set "filter=!filter! [tmp3][v3] overlay=shortest=1:x=0:y=%scaleSize_y% [tmp4];" set "filter=!filter! [tmp4][v4] overlay=shortest=1:x=%scaleSize_x%:y=%scaleSize_y% [tmp5];" set "filter=!filter! [tmp5][v5] overlay=shortest=1:x=%scaleSize_x%*2:y=%scaleSize_y% [tmp6];" set "filter=!filter! [tmp6][v6] overlay=shortest=1:x=0:y=%scaleSize_y%*2 [tmp7];" set "filter=!filter! [tmp7][v7] overlay=shortest=1:x=%scaleSize_x%:y=%scaleSize_y%*2 [tmp8];" set "filter=!filter! [tmp8][v8] overlay=shortest=1:x=%scaleSize_x%*2:y=%scaleSize_y%*2" ffmpeg -i input1.%fileType% -i input2.%fileType% -i input3.%fileType% ^ -i input4.%fileType% -i input5.%fileType% -i input6.%fileType% ^ -i input7.%fileType% -i input8.%fileType% -i input9.%fileType% ^ -filter_complex "!filter!" ^ -c:v !mosaic_libVid! -b:v !mosaic_bitRate! ^ -metadata title="%metadataTitle%" ^ -y "mosaic_3x3.%fileType%" echo Mosaic created: mosaic_3x3.%fileType% ) echo. echo Script finished. pause