Jump to content

You Tube Video Processor


mikeytown2
 Share

Recommended Posts

I completely automated the HEX hack that is now dead.

http://forum.videohelp.com/topic336882.html

since its dead, I've decided to release this. Drag and drop avi/avs files or dir's onto the compiled exe.

#include <GUIConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <Constants.au3>
#include <String.au3>
Opt("TrayIconDebug", 1)
Opt("MustDeclareVars", 1)

Global $filelist[1]
Global $filetype = "*.avs"
Global $ffmpegloc = ""
Global $flvmdiloc = ""

ChkCmd()
If MsgBox(1, "avs/avi to flash", $filelist[0] & " Files to Be processed" & @CRLF & _ArrayToString($filelist, @CRLF, 1)) == 2 Then 
    Exit
EndIf   
GUI()

Func FlashSix($in, $out = "", $vidbitrate = "", $mp3bitrate = "", $samplerate = "", $gopSize = "", $audch = 1, $matrix = "No Matrix")
    local $mp3enc, $videoenc, $matrixSet

    ;set default outputfile
    If $out == "" Then
        $out = $in & $matrix & ".flv"
    EndIf
    
    ;set default video bitrate
    If $vidbitrate == "" Then
        $vidbitrate = 280
    EndIf
    
    ;set default audio bitrate
    If $mp3bitrate == "" Then
        $mp3bitrate = 32
    EndIf
    
    ;set default audio samplerate
    If $samplerate == "" Then
        $samplerate = 22050
    EndIf
    
    ;set default Group of Pictures Size
    If $gopSize == "" Then
        $gopSize = 60
    EndIf
    
    $matrixSet = ''
    
    ;set matrix
    Switch $matrix
    Case "No Matrix"; GOOD
        $matrixSet = ""
    Case "notch matrix" ;GOOD
        $matrixSet = '-inter_matrix "16,18,20,22,24,26,28,30,18,20,22,24,26,28,30,32,20,22,24,26,28,30,32,34,22,24,26,30,32,32,34,36,24,26,28,32,34,34,36,38,26,28,30,32,34,36,38,40,28,30,32,34,36,38,42,42,30,32,34,36,38,40,42,44"'
    Case "M4G LRM V4 LRM is for low to very low bitrates" ;GOOD
        $matrixSet = '-inter_matrix "13,14,16,18,20,21,22,24,14,15,18,19,20,21,22,25,16,18,20,21,22,23,25,27,18,19,21,23,25,26,29,31,20,20,22,25,28,31,35,38,21,21,23,26,31,37,42,48,22,22,25,29,35,42,51,61,24,25,27,31,38,48,61,76"'
    Case "M4G MRM V2 MRM is supposed to work well at moderate bitrates" ;GOOD
        $matrixSet = '-inter_matrix "12,16,16,18,20,22,25,28,16,16,17,20,20,23,26,28,16,17,20,22,24,26,29,31,18,20,22,25,28,31,33,38,20,20,24,28,33,37,43,49,22,23,26,31,37,46,56,65,25,26,29,33,42,56,70,88,28,28,31,38,49,65,88,115"'
    Case "M4G High Detail V3.1 A very sharp matrix, works best at mid bitrates" ;GOOD
        $matrixSet = '-inter_matrix "12,12,12,12,13,16,19,25,12,12,12,12,13,16,21,27,12,12,13,15,18,21,26,33,12,12,15,21,25,30,37,45,13,13,18,25,34,43,54,64,16,16,21,30,43,60,76,94,19,21,26,37,54,76,102,132,25,27,33,45,64,94,132,177"'
    Case "Angel BestVeryLow" ;GOOD
         $matrixSet = '-inter_matrix "16,17,18,19,20,21,99,99,17,18,19,20,21,22,99,99,18,19,20,21,22,23,99,99,19,20,21,22,23,24,99,99,20,21,22,23,25,26,99,99,21,22,23,24,26,99,99,99,22,23,24,26,99,99,99,99,23,24,25,99,99,99,99,99"'
    EndSwitch
    
    ;set ffmpeg location
    If $ffmpegloc == "" Then
        $ffmpegloc = GetFileLoc("ffmpeg.exe", "Select ffmpeg.exe", "Program Files (*.exe)")
    EndIf
    
    ;set flvmdi location
    If $flvmdiloc == "" Then
        $flvmdiloc = GetFileLoc("flvmdi.exe", "Select flvmdi.exe", "Program Files (*.exe)")
    EndIf
    
    ;Set Video bitrate
    $vidbitrate = $vidbitrate *1024
    
    ;Set mp3 bitrate
    $mp3bitrate = $mp3bitrate *1024
    
    ;set mp3 ffmpeg settings
    If $mp3bitrate > 0 Then
        $mp3enc = "-acodec libmp3lame -ab " & $mp3bitrate & " -ar " & $samplerate & " -ac " & $audch
        ;$mp3enc = "-acodec libmp3lame -aq 8 -ar " & $samplerate & " -ac 2"
    Else
        $mp3enc = " -an " ;Disable audio recording
    EndIf
    
    ;set video encodeing settings, only thing to change would be -g 250
    $videoenc = ' -y -vcodec flv -b ' & $vidbitrate & ' -flags mv4+obmc+qpel+loop+gmc+mv0+umv+trell+aic+cbp+qprd -g ' & $gopSize & ' -strict 5 -pred 3 -cmp 3 -subcmp 3 -mbcmp 3 -ildctcmp 3 -precmp 3 -skipcmp 3 -subq 9 -coder 5 -mbd 2 -trellis 10 -i_qfactor 0.71 -qcomp 0.6 -qblur 1 -flags2 mixed_refs+brdo+skiprd+non_linear_q -partitions parti4x4+parti8x8+partp4x4+partp8x8 ' & $matrixSet & ' '

    ;pass 1
    RunWait('"' & $ffmpegloc & '" -i "' & $in & '" -pass 1 ' & $mp3enc & $videoenc & '"' & $out & '"')
        
    ;pass 2
    RunWait('"' & $ffmpegloc & '" -i "' & $in & '" -pass 2 ' & $mp3enc & $videoenc & '"' & $out & '"')
    
    ;add keyframes to metadata
    RunWait('"' & $flvmdiloc & '" ' & '"' & $out & '" /k')
    
    ;hex the File
    If $vidbitrate/1024 > 350 Then
        FLVHex($out)
    EndIf
    
EndFunc

;Grab Drag-n-Droped files/dir's
Func ChkCmd()
    ;Files where dropped onto exe
    If $CmdLine[0] > 0 Then
        Local $dirbit = 0
        For $x = 1 To $CmdLine[0] Step + 1 ;run though all files droped and look for dir's
            If StringInStr(FileGetAttrib($CmdLine[$x]), "D") Then
                $dirbit += 1
                If $dirbit = 1 Then ;if a dir is found then ask what type of file extension to look for
                    $filetype = InputBox("input file extention", "input file extention", $filetype )
                EndIf
                FileListFromDir($CmdLine[$x]) ;parce dir looking for file of that extenstion
            Else ;add file to list
                _ArrayAdd($filelist, $CmdLine[$x])
                $filelist[0] += 1
            EndIf
        Next
    EndIf
EndFunc

;add to array, list of files in a dir
Func FileListFromDir($dir)
    ;search for the first file with the correct file extenstion
    Local $file, $search = FileFindFirstFile($dir & "\" & $filetype)
    ; Check if the search was successful
    If $search = -1 Then
        MsgBox(0, "Error", "No " & $filetype & " files found")
    EndIf

    ;add found files to array
    While 1
        $file = FileFindNextFile($search)
        If @error Then 
            ExitLoop
        EndIf
        ;Add file to array
        _ArrayAdd($filelist, $dir & "\" & $file)
        $filelist[0] += 1
    WEnd
    FileClose($search) ; Close the search handle
EndFunc   ;==>FileListFromDir

;Location of file
Func GetFileLoc($fname, $title, $type)
    local $temp = FileFindFirstFile(@ScriptDir & "\" & $fname)
    If $temp <> -1 Then
        $fname = FileFindNextFile($temp)
        FileClose($temp)
        Return ($fname)
    Else
        FileClose($temp)
        $temp = FileOpenDialog($title, @ScriptDir, $type, 3, $fname)
        If @error = 1 Then Exit
        Return $temp
    EndIf
EndFunc   ;==>GetFileLoc

;Open File
Func FLVHex($file)
    Local $contents, $loc, $fsz, $maxfz = Round(27.56*1024*1024), $maxsec = 660, $neededSec, $a = "0000", $b = "0000", $c = "0000", $d = "0000"
    $fsz = FileGetSize($file)
    
    ;1min ~=~ 2,611,907 bits
    $neededSec = Round($fsz/($maxfz/$maxsec))

    ;Calc hextime
    Switch Int($neededSec/60)+1
    Case 1
        $a = "4E00"
    Case 2
        $a = "5E00"
    Case 3
        $a = "6680"
    case 4
        $a = "6E00"
    case 5
        $a = "72C0"
    Case 6
        $a = "7680"
    Case 7
        $a = "7A40"
    Case 8
        $a = "7E00"
    Case 9
        $a = "80E0"
    Case 10
        $a = "82C0"
    Case Else
        $a = "84A0" 
    EndSwitch
    
    $contents = FileRead(FileOpen($file, 16), $fsz)
    $loc = StringInStr($contents, "6475726174696F6E0040")
    $contents = StringReplace($contents, $loc, "6475726174696F6E0040" & $a & $b & $c & $d, 1 )
    FileWrite(FileOpen($file, 18), ($contents))
EndFunc

Func FindPower($s)
    Local $temp = 2, $x=0
    While $temp < $s
        $x +=1
        $temp = 2^$x
    WEnd
    Return $x
EndFunc


Func GUI()
    #Region ### START Koda GUI section ### Form=Form1.kxf
    Local $Form1, $Label1, $vbr, $Label2, $abr, $Label3, $Label4, $Label5, $Label6, $vgop, $asr, $ac, $vm, $ok, $cancel, $nMsg
    $Form1 = GUICreate("Form1")
    $Label1 = GUICtrlCreateLabel("Target Video Bitrate", 8, 8, 98, 17)
    $vbr = GUICtrlCreateInput("280", 8, 24, 121, 21)
    $Label2 = GUICtrlCreateLabel("Target Audio Bitrate", 264, 8, 98, 17)
    $abr = GUICtrlCreateInput("32", 264, 24, 121, 21)
    $Label3 = GUICtrlCreateLabel("Audio Sample Rate", 152, 8, 95, 17)
    $Label4 = GUICtrlCreateLabel("Audio Channels", 264, 56, 78, 17)
    $Label5 = GUICtrlCreateLabel("Video Group Of Pictures Size", 8, 56, 141, 17)
    $vgop = GUICtrlCreateInput("60", 8, 72, 121, 21)
    $Label6 = GUICtrlCreateLabel("Video Matrix", 8, 128, 62, 17)
    $asr = GUICtrlCreateList("", 152, 24, 49, 97)
    GUICtrlSetData(-1, "11025|22050|44100", "22050")
    $ac = GUICtrlCreateList("", 264, 72, 41, 45)
    GUICtrlSetData(-1, "1|2", "1")
    $vm = GUICtrlCreateList("", 8, 144, 401, 136)
    GUICtrlSetData(-1, "Angel BestVeryLow|M4G High Detail V3.1 A very sharp matrix, works best at mid bitrates.|M4G LRM V4 LRM is for low to very low bitrates|M4G MRM V2 MRM is supposed to work well at moderate bitrates|No Matrix|notch matrix", "notch matrix")
    $ok = GUICtrlCreateButton("ok", 80, 288, 75, 25, 0)
    $cancel = GUICtrlCreateButton("cancel", 256, 288, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $ok
            For $x = 1 To $filelist[0] Step +1
                FlashSix($filelist[$x], "", GUICtrlRead($vbr), GUICtrlRead($abr), GUICtrlRead($asr), GUICtrlRead($vgop), GUICtrlRead($ac), GUICtrlRead($vm))
            Next
            Exit
        Case $cancel
            Exit
        EndSwitch
    WEnd
EndFunc

Requires ffmpeg.exe and flvmdi.exe to be in the same dir as this compiled exe

http://ffdshow.faireal.net/mirror/ffmpeg/

http://www.buraks.com/flvmdi/

Assumes video has already been resized (320x240).

Edited by mikeytown2
Link to comment
Share on other sites

Link to comment
Share on other sites

@ptrex thanks! btw there are gui's out there that do what i did, just without the hex hack.

http://forum.doom9.org/showthread.php?p=1018336

The next step would be automating the creation of Flash8 video files, although this is a little tricky, and as far as i know, hasn't been nicely packaged.

Option A

Option B

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...