Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
274 changes: 207 additions & 67 deletions main.bat
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@

@echo off
color 02
setLocal EnableDelayedExpansion
set "STR=WELCOME TO HAJI ENCODER^!"
set "SIZE=80"
set "STR2=BY MOHAMMADREZA AND EGHBAL"
set "SIZE=50"
set "STR3=VERSION 1.3"
set "STR3=VERSION 2.7"
set "SIZE=50"

set "LEN=0"
Expand All @@ -24,89 +23,230 @@ call echo %%spaces:~0,%pref_len%%%%%STR%%%%spaces:~0,%suf_len%%%
call echo %%spaces:~0,%pref_len%%%%%STR2%%%%spaces:~0,%suf_len%%%
call echo %%spaces:~0,%pref_len%%%%%STR3%%%%spaces:~0,%suf_len%%%
call echo %%stars:~0,%SIZE%%%

endLocal

timeout 5
color 07

set /p upload="Do You Want to Upload the Files? [y/n] "
if /i "%upload%" equ "y" set /p course="Enter Course Directory Name: "

for %%a in ("*.mp4" "*.m4v") do (
mkdir "%cd%\%%~na"
)
powershell -command "set-content handler.txt '0'"

echo enc.key>> temp.keyinfo
echo enc.key>> temp.keyinfo
set /a var = 0

echo @echo off>>encoder.bat

echo for %%%%a in ("*.mp4" "*.m4v") do (>>encoder.bat

for %%a in ("*.mp4" "*.m4v") do (
call:sslrand
ffmpeg -i "%cd%\%%a" -hls_key_info_file temp.keyinfo -filter_complex "[v:0]split=4[vtemp001][vtemp002][vtemp003][vtemp004];[vtemp001]scale=w=640:h=360[vout001];[vtemp002]scale=w=960:h=540[vout002];[vtemp003]scale=w=1280:h=720[vout003];[vtemp004]scale=w=1920:h=1080[vout004]" -preset veryfast -crf 16 -r 24 -sc_threshold 0 -map [vout001] -c:v:0 libx264 -map [vout002] -c:v:1 libx264 -map [vout003] -c:v:2 libx264 -map [vout004] -c:v:3 libx264 -map a:0 -map a:0 -map a:0 -map a:0 -f hls -hls_time 10 -hls_playlist_type vod -master_pl_name playlist.m3u8 -hls_segment_filename stream_%%v/data%%06d.ts -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2 v:3,a:3" stream_%%v.m3u8

echo call:sslrand>>encoder.bat

powershell -command "(gc stream_0.m3u8) -replace 'stream_0/', '' | Out-File lq.m3u8 -encoding utf8"
powershell -command "(gc lq.m3u8) -replace 'enc.key', '../enc.key' | Out-File lq.m3u8 -encoding utf8"
(
echo ffmpeg -i "%%%%a" -hls_key_info_file temp.keyinfo -filter_complex "[v:0]split=4[vtemp001][vtemp002][vtemp003][vtemp004];[vtemp001]scale=w=640:h=360[vout001];[vtemp002]scale=w=960:h=540[vout002];[vtemp003]scale=w=1280:h=720[vout003];[vtemp004]scale=w=1920:h=1080[vout004]" -preset veryfast -crf 16 -r 24 -sc_threshold 0 -map [vout001] -c:v:0 libx264 -map [vout002] -c:v:1 libx264 -map [vout003] -c:v:2 libx264 -map [vout004] -c:v:3 libx264 -map a:0 -map a:0 -map a:0 -map a:0 -f hls -hls_time 10 -hls_playlist_type vod -master_pl_name playlist.m3u8 -hls_segment_filename stream_%%%%v/data%%%%06d.ts -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2 v:3,a:3" stream_%%%%v.m3u8

powershell -command "(gc stream_1.m3u8) -replace 'stream_1/', '' | Out-File mq.m3u8 -encoding utf8"
powershell -command "(gc mq.m3u8) -replace 'enc.key', '../enc.key' | Out-File mq.m3u8 -encoding utf8"
echo if exist ../handler.txt powershell -command "$p = get-content ../handler.txt; $m = [int]$p; $m = $m - 1; set-content ../handler.txt $m"

powershell -command "(gc stream_2.m3u8) -replace 'stream_2/', '' | Out-File hq.m3u8 -encoding utf8"
powershell -command "(gc hq.m3u8) -replace 'enc.key', '../enc.key' | Out-File hq.m3u8 -encoding utf8"
echo powershell -command "(gc stream_0.m3u8) -replace 'stream_0/', '' | Out-File lq.m3u8 -encoding utf8"
echo powershell -command "(gc lq.m3u8) -replace 'enc.key', '../enc.key' | Out-File lq.m3u8 -encoding utf8"

powershell -command "(gc stream_3.m3u8) -replace 'stream_3/', '' | Out-File hd.m3u8 -encoding utf8"
powershell -command "(gc hd.m3u8) -replace 'enc.key', '../enc.key' | Out-File hd.m3u8 -encoding utf8"
echo powershell -command "(gc stream_1.m3u8) -replace 'stream_1/', '' | Out-File mq.m3u8 -encoding utf8"
echo powershell -command "(gc mq.m3u8) -replace 'enc.key', '../enc.key' | Out-File mq.m3u8 -encoding utf8"

powershell -command "(gc playlist.m3u8) -replace 'stream_0', 'lq/playlist' | Out-File playlist.m3u8 -encoding utf8"
powershell -command "(gc playlist.m3u8) -replace 'stream_1', 'mq/playlist' | Out-File playlist.m3u8 -encoding utf8"
powershell -command "(gc playlist.m3u8) -replace 'stream_2', 'hq/playlist' | Out-File playlist.m3u8 -encoding utf8"
powershell -command "(gc playlist.m3u8) -replace 'stream_3', 'hd/playlist' | Out-File playlist.m3u8 -encoding utf8"

ren playlist.m3u8 haji.m3u8

ren lq.m3u8 playlist.m3u8
move stream_0 "%cd%/%%~na"
ren "%cd%/%%~na"/stream_0 lq
move playlist.m3u8 "%cd%/%%~na"/lq
del stream_0.m3u8

ren mq.m3u8 playlist.m3u8
move stream_1 "%cd%/%%~na"
ren "%cd%/%%~na"/stream_1 mq
move playlist.m3u8 "%cd%/%%~na"/mq
del stream_1.m3u8

ren hq.m3u8 playlist.m3u8
move stream_2 "%cd%/%%~na"
ren "%cd%/%%~na"/stream_2 hq
move playlist.m3u8 "%cd%/%%~na"/hq
del stream_2.m3u8

ren hd.m3u8 playlist.m3u8
move stream_3 "%cd%/%%~na"
ren "%cd%/%%~na"/stream_3 hd
move playlist.m3u8 "%cd%/%%~na"/hd
del stream_3.m3u8

ren haji.m3u8 playlist.m3u8
move playlist.m3u8 "%cd%/%%~na"
move enc.key "%cd%/%%~na"
echo powershell -command "(gc stream_2.m3u8) -replace 'stream_2/', '' | Out-File hq.m3u8 -encoding utf8"
echo powershell -command "(gc hq.m3u8) -replace 'enc.key', '../enc.key' | Out-File hq.m3u8 -encoding utf8"

)
echo powershell -command "(gc stream_3.m3u8) -replace 'stream_3/', '' | Out-File hd.m3u8 -encoding utf8"
echo powershell -command "(gc hd.m3u8) -replace 'enc.key', '../enc.key' | Out-File hd.m3u8 -encoding utf8"

del temp.keyinfo
echo:
echo:
powershell write-host -fore Green Rendering Completed
echo:
pause
exit
echo powershell -command "(gc playlist.m3u8) -replace 'stream_0', 'lq/playlist' | Out-File playlist.m3u8 -encoding utf8"
echo powershell -command "(gc playlist.m3u8) -replace 'stream_1', 'mq/playlist' | Out-File playlist.m3u8 -encoding utf8"
echo powershell -command "(gc playlist.m3u8) -replace 'stream_2', 'hq/playlist' | Out-File playlist.m3u8 -encoding utf8"
echo powershell -command "(gc playlist.m3u8) -replace 'stream_3', 'hd/playlist' | Out-File playlist.m3u8 -encoding utf8"

echo ren playlist.m3u8 haji.m3u8

echo ren lq.m3u8 playlist.m3u8
echo ren stream_0 lq
echo move playlist.m3u8 "%%cd%%"/lq
echo del stream_0.m3u8

echo ren mq.m3u8 playlist.m3u8
echo ren stream_1 mq
echo move playlist.m3u8 "%%cd%%"/mq
echo del stream_1.m3u8

echo ren hq.m3u8 playlist.m3u8
echo ren stream_2 hq
echo move playlist.m3u8 "%%cd%%"/hq
echo del stream_2.m3u8

echo ren hd.m3u8 playlist.m3u8
echo ren stream_3 hd
echo move playlist.m3u8 "%%cd%%"/hd
echo del stream_3.m3u8

echo ren haji.m3u8 playlist.m3u8

) >>encoder.bat

echo ) >>encoder.bat

(
echo move *.mp4 ../Completed
echo move *.m4v ../Completed
echo echo:
echo echo:
echo powershell write-host -fore Green RENDER COMPLETED
echo echo:
)>>encoder.bat
echo del temp.keyinfo>>encoder.bat
(
echo set /a var = %%var%% + 1
)>>encoder.bat
echo powershell if($env:upload -eq 'y') { powershell -executionpolicy remotesigned -File uploader.ps1 }>>encoder.bat
echo if /i "%upload%" equ "n" del uploader.ps1>>encoder.bat
powershell -command "Add-Content encoder.bat 'del encoder.bat & exit'"


echo :sslrand>>encoder.bat
echo for /f "tokens=* USEBACKQ" %%%%f in (`openssl rand -out enc.key 16`) do (set var=%%%%f)>>encoder.bat
(
echo EXIT /B 0
)>>encoder.bat


echo $directoryname = Split-Path -Path (Get-Location) -Leaf>>uploader.ps1
echo $currentdirectory = get-location ^| foreach-object { $_.path }>>uploader.ps1
echo $newFolder1 = "ftp://130.185.79.126/public_html/media/$env:course">>uploader.ps1
echo $newFolder2 = "ftp://130.185.79.126/public_html/media/$env:course/$directoryname">>uploader.ps1
echo $ftpuname = "*********">>uploader.ps1
echo $ftppassword = "********">>uploader.ps1

echo try>>uploader.ps1
echo {>>uploader.ps1
echo $makeDirectory = [System.Net.WebRequest]::Create($newFolder1);>>uploader.ps1
echo $makeDirectory.Credentials = New-Object System.Net.NetworkCredential($ftpuname,$ftppassword);>>uploader.ps1
echo $makeDirectory.Method = [System.Net.WebRequestMethods+FTP]::MakeDirectory;>>uploader.ps1
echo $makeDirectory.GetResponse();>>uploader.ps1
echo }catch [Net.WebException]>>uploader.ps1
echo {>>uploader.ps1
echo try {>>uploader.ps1

echo #if there was an error returned, check if folder already existed on server>>uploader.ps1
echo $checkDirectory = [System.Net.WebRequest]::Create($newFolder1);>>uploader.ps1
echo $checkDirectory.Credentials = New-Object System.Net.NetworkCredential($ftpuname,$ftppassword);>>uploader.ps1
echo $checkDirectory.Method = [System.Net.WebRequestMethods+FTP]::PrintWorkingDirectory;>>uploader.ps1
echo $response = $checkDirectory.GetResponse();>>uploader.ps1
echo }>>uploader.ps1
echo catch [Net.WebException] {>>uploader.ps1
echo #if the folder didn't exist, then it's probably a file perms issue, incorrect credentials, dodgy server name etc>>uploader.ps1
echo }>>uploader.ps1
echo }>>uploader.ps1

echo try>>uploader.ps1
echo {>>uploader.ps1
echo $makeDirectory = [System.Net.WebRequest]::Create($newFolder2);>>uploader.ps1
echo $makeDirectory.Credentials = New-Object System.Net.NetworkCredential($ftpuname,$ftppassword);>>uploader.ps1
echo $makeDirectory.Method = [System.Net.WebRequestMethods+FTP]::MakeDirectory;>>uploader.ps1
echo $makeDirectory.GetResponse();>>uploader.ps1
echo }catch [Net.WebException]>>uploader.ps1
echo {>>uploader.ps1
echo try {>>uploader.ps1

echo #if there was an error returned, check if folder already existed on server>>uploader.ps1
echo $checkDirectory = [System.Net.WebRequest]::Create($newFolder2);>>uploader.ps1
echo $checkDirectory.Credentials = New-Object System.Net.NetworkCredential($ftpuname,$ftppassword);>>uploader.ps1
echo $checkDirectory.Method = [System.Net.WebRequestMethods+FTP]::PrintWorkingDirectory;>>uploader.ps1
echo $response = $checkDirectory.GetResponse();>>uploader.ps1
echo }>>uploader.ps1
echo catch [Net.WebException] {>>uploader.ps1
echo #if the folder didn't exist, then it's probably a file perms issue, incorrect credentials, dodgy server name etc>>uploader.ps1
echo }>>uploader.ps1
echo }>>uploader.ps1

echo $FTPHost = "ftp://130.185.79.126/public_html/media/$env:course/$directoryname">>uploader.ps1

echo $uploaderFolder = "$currentdirectory">>uploader.ps1

echo $webclient = New-Object System.Net.WebClient>>uploader.ps1
echo $webclient.Credentials = New-Object System.Net.NetworkCredential($ftpuname,$ftppassword)>>uploader.ps1

echo $SrcEntries = Get-ChildItem $uploaderFolder -Recurse>>uploader.ps1

echo $Srcfolders = $SrcEntries ^| Where-Object{$_.PSIsContainer}>>uploader.ps1
echo $SrcFiles = $SrcEntries ^| Where-Object{!$_.PSIsContainer}>>uploader.ps1

echo foreach($folder in $Srcfolders)>>uploader.ps1
echo {>>uploader.ps1
echo $SrcFolderPath = $uploaderFolder -replace "\\","\\" -replace "\:","\:" >>uploader.ps1
echo $DesFolder = $folder.Fullname -replace $SrcFolderPath,$FTPHost>>uploader.ps1
echo $DesFolder = $DesFolder -replace "\\", "/">>uploader.ps1

echo try>>uploader.ps1
echo {>>uploader.ps1
echo $makeDirectory = [System.Net.WebRequest]::Create($DesFolder);>>uploader.ps1
echo $makeDirectory.Credentials = New-Object System.Net.NetworkCredential($ftpuname,$ftppassword);>>uploader.ps1
echo $makeDirectory.Method = [System.Net.WebRequestMethods+FTP]::MakeDirectory;>>uploader.ps1
echo $makeDirectory.GetResponse();>>uploader.ps1
echo }>>uploader.ps1
echo catch [Net.WebException]>>uploader.ps1
echo {>>uploader.ps1
echo try {>>uploader.ps1
echo $checkDirectory = [System.Net.WebRequest]::Create($DesFolder);>>uploader.ps1
echo $checkDirectory.Credentials = New-Object System.Net.NetworkCredential($ftpuname,$ftppassword);>>uploader.ps1
echo $checkDirectory.Method = [System.Net.WebRequestMethods+FTP]::PrintWorkingDirectory;>>uploader.ps1
echo $response = $checkDirectory.GetResponse();>>uploader.ps1
echo }>>uploader.ps1
echo catch [Net.WebException] { }>>uploader.ps1
echo }>>uploader.ps1
echo }>>uploader.ps1

echo foreach($entry in $SrcFiles)>>uploader.ps1
echo {>>uploader.ps1
echo $SrcFullname = $entry.fullname>>uploader.ps1
echo $SrcName = $entry.Name>>uploader.ps1
echo write-output $SrcFullName>>uploader.ps1
echo if($SrcName -ne "encoder.bat" -And $SrcName -ne "uploader.ps1"){>>uploader.ps1
echo $SrcFilePath = $uploaderFolder -replace "\\","\\" -replace "\:","\:">>uploader.ps1
echo $DesFile = $SrcFullname -replace $SrcFilePath,$FTPHost>>uploader.ps1
echo $DesFile = $DesFile -replace "\\", "/">>uploader.ps1
echo $uri = New-Object System.Uri($DesFile)>>uploader.ps1
echo $webclient.uploadFile($uri, $SrcFullname)>>uploader.ps1
echo }>>uploader.ps1
echo }>>uploader.ps1
echo powershell write-host -fore Green "UPLOAD COMPLETED">>uploader.ps1
echo del uploader.ps1>>uploader.ps1
echo del encoder.bat>>uploader.ps1
echo pause>>uploader.ps1

:sslrand
setlocal
for /f "tokens=* USEBACKQ" %%f in (`openssl rand -out enc.key 16`) do (set var=%%f)
EXIT /B 0
echo enc.key>> temp.keyinfo
echo enc.key>> temp.keyinfo

mkdir Completed

for %%a in ("*.mp4" "*.m4v") do (

echo "%%~na"
call:current_process "%%~na" "%%a"
)
del encoder.bat
powershell write-host -fore Green "ENCODE COMPLETED"
del handler.txt
del temp.keyinfo
del uploader.ps1
exit

:current_process
:pointer
SET /A timerand=%RANDOM% * 5 / 32768 + 1
for /f "skip=1" %%p in ('wmic cpu get loadpercentage') do set /a usage=%%p
if %usage% geq 95 (
timeout 10
powershell write-host -fore Green "WAITING FOR CURRENT STACK TO FINISH"
goto :pointer
)
set folder=uploaderbax
set directory_name=%~1
set file_name=%~2
mkdir "%cd%\%~1"
powershell -command "$d = $env:directory_name ; $f = $env:file_name ; $c = ' - ' + -join ((48..57) + (65..90) + (97..122) | get-random -Count 10 | %%%{[char]$_}) ; rename-item $d $d$c ; move-item $f $d$c ; copy-item encoder.bat $d$c ; copy-item uploader.ps1 $d$c ; copy-item temp.keyinfo $d$c ; cd $d$c ; $p = get-content ../handler.txt; $m = [int]$p; $m = $m + 1; set-content ../handler.txt $m ; start-process encoder.bat"
exit /b 0