diff options
-rwxr-xr-x | scripts/manicure.rb | 598 |
1 files changed, 345 insertions, 253 deletions
diff --git a/scripts/manicure.rb b/scripts/manicure.rb index 0f9d6b50f..3e9467e10 100755 --- a/scripts/manicure.rb +++ b/scripts/manicure.rb @@ -11,6 +11,8 @@ # For handling command line arguments to the script require 'optparse' require 'ostruct' +require 'rubygems' +require 'plist' # CLI options: (code based on http://www.ruby-doc.org/stdlib/libdoc/optparse/rdoc/index.html ) def readOptions @@ -78,103 +80,15 @@ class Presets # and display output. def initialize - # Grab input from the user's presets .plist - rawPresets = readPresetPlist - - # Store all the presets in here - presetStew = [] - - # Each item in the array is one line from the .plist - presetStew = rawPresets.split("\n") - - # Now get rid of white space - presetStew = cleanStew(presetStew) - - # This stores the offsets between presets. - presetBreaks = findPresetBreaks(presetStew) - - # Now it's time to use that info to store each - # preset individually, in the master list. - @presetMasterList = [] - i = 0 - while i <= presetBreaks.size - if i == 0 #first preset - # Grab the stew, up to the 1st offset. - @presetMasterList[i] = presetStew.slice(0..presetBreaks[i].to_i) - elsif i < presetBreaks.size #middle presets - # Grab the stew from the last offset to the current.. - @presetMasterList[i] = presetStew.slice(presetBreaks[i-1].to_i..presetBreaks[i].to_i) - else #final preset - # Grab the stew, starting at the last offset, all the way to the end. - @presetMasterList[i] = presetStew.slice(presetBreaks[i-1].to_i..presetStew.length) - end - i += 1 - end - + # Grab the user's home path + homeLocation = `echo $HOME`.chomp + + # Use that to build a path to the presets .plist + inputFile = homeLocation+'/Library/Application Support/HandBrake/UserPresets.plist' + # Parse the presets into hashes - @hashMasterList = [] - - buildPresetHash - - end - - def readPresetPlist # Grab the .plist and store it in presets - - # Grab the user's home path - homeLocation = `echo $HOME`.chomp - - # Use that to build a path to the presets .plist - inputFile = homeLocation+'/Library/Application\ Support/HandBrake/UserPresets.plist' - - # Builds a command that inputs the .plist, but not before stripping all the XML gobbledygook. - parseCommand = 'cat '+inputFile+' | sed -e \'s/<[a-z]*>//\' -e \'s/<\/[a-z]*>//\' -e \'/<[?!]/d\' ' - - puts "\n\n" + @hashMasterList = Plist::parse_xml( inputFile ) - # Run the command, return the raw presets - rawPresets = `#{parseCommand}` - end - - def cleanStew(presetStew) #remove tabbed white space - presetStew.each do |oneline| - oneline.strip! - end - end - - def findPresetBreaks(presetStew) #figure out where each preset starts and ends - i = 0 - j = 0 - presetBreaks =[] - presetStew.each do |presetLine| - if presetLine =~ /Audio1Bitrate/ # This is the first line of a new preset. - presetBreaks[j] = i-1 # So mark down how long the last one was. - j += 1 - end - i += 1 - end - return presetBreaks - end - - def buildPresetHash #fill up @hashMasterList with hashes of all key/value pairs - j = 0 - - # Iterate through all presets, treating each in turn as singleServing - @presetMasterList.each do |singleServing| - - # Initialize the hash for preset j (aka singleServing) - @hashMasterList[j] = Hash.new - - # Each key and value are on sequential lines. - # Iterating through by twos, use that to build a hash. - # Each key, on line i, paired with its value, on line i+1 - i = 1 - while i < singleServing.length - @hashMasterList[j].store( singleServing[i], singleServing[i+1] ) - i += 2 - end - - j += 1 - end end end @@ -182,7 +96,6 @@ end # This class displays the presets to stdout in various formats. class Display - def initialize(hashMasterList, options) @hashMasterList = hashMasterList @@ -201,34 +114,59 @@ class Display # Iterate through the hashes. @hashMasterList.each do |hash| - # Check to make there are valid contents - if hash.key?("PresetName") - - if @options.header == true - # First throw up a header to make each preset distinct - displayHeader(hash) - end - - if @options.cliraw == true - # Show the preset's full CLI string equivalent - generateCLIString(hash) - end - - if @options.cliparse == true - generateCLIParse(hash) - end - - if @options.api == true - # Show the preset as code for test/test.c, HandBrakeCLI - generateAPIcalls(hash) - end - - if @options.apilist == true - # Show the preset as print statements, for CLI wrappers to parse. - generateAPIList(hash) + # Check to see whether we've got a preset or afolder + if !hash["Folder"] + # It's a top-level preset + displayIndividualPreset(hash, 0) + else + # It's a folder, yay + displayFolder( hash, 0 ) + hash["ChildrenArray"].each do |subhash| + # Drill down to see its contents + if !subhash["Folder"] + # It's a preset + displayIndividualPreset(subhash, 1) + else + # It's a folder + displayFolder( subhash, 1 ) + subhash["ChildrenArray"].each do |subsubhash| + # At this point we're far enough down we won't try to drill further + if !subsubhash["Folder"] + displayIndividualPreset(subsubhash, 2) + end + end + displayFolderCloser( 1 ) + end end + displayFolderCloser( 0 ) end - end + end + end + + def displayIndividualPreset(hash, depth) + if @options.header == true + # First throw up a header to make each preset distinct + displayHeader(hash) + end + + if @options.cliraw == true + # Show the preset's full CLI string equivalent + generateCLIString(hash, depth) + end + + if @options.cliparse == true + generateCLIParse(hash, depth) + end + + if @options.api == true + # Show the preset as code for test/test.c, HandBrakeCLI + generateAPIcalls(hash) + end + + if @options.apilist == true + # Show the preset as print statements, for CLI wrappers to parse. + generateAPIList(hash, depth) + end end def displayHeader(hash) # A distinct banner to separate each preset @@ -252,12 +190,12 @@ class Display puts "#{hash["FileCodecs"]}".center(@columnWidth) # Note if the preset isn't built-in - if hash["Type"].to_i == 1 + if hash["Type"] == 1 puts "Custom Preset".center(@columnWidth) end # Note if the preset is marked as default. - if hash["Default"].to_i == 1 + if hash["Default"] == 1 puts "This is your default preset.".center(@columnWidth) end @@ -266,8 +204,71 @@ class Display end - def generateCLIString(hash) # Makes a full CLI equivalent of a preset + def displayFolder( hash, depth ) + + if @options.cliraw == true + # Show the folder's full in a format that matches the CLI equivalents + generateCLIFolderString(hash, depth) + end + + if @options.cliparse == true + # Show the folder in a format that matches the CLI wrapper equivalents + generateCLIFolderParse(hash, depth) + end + + if @options.apilist == true + # Show the folder as print statements, for CLI wrappers to parse. + generateAPIFolderList(hash, depth) + end + + end + + def displayFolderCloser( depth ) + if @options.cliraw == true + # Show the folder's full in a format that matches the CLI equivalents + generateCLIFolderCloserString( depth ) + end + + if @options.cliparse == true + # Show the folder in a format that matches the CLI wrapper equivalents + generateCLIFolderCloserParse( depth ) + end + + if @options.apilist == true + # Show the folder as print statements, for CLI wrappers to parse. + generateAPIFolderCloserList( depth ) + end + end + + def generateCLIFolderString( hash, depth ) # Shows the folder for the CLI equivalents + commandString = "" + depth.times do + commandString << " " + end + (depth+1).times do + commandString << "<" + end + commandString << " " << hash["PresetName"] << "\n\n" + puts commandString + end + + def generateCLIFolderCloserString( depth ) commandString = "" + depth.times do + commandString << " " + end + (depth+1).times do + commandString << ">" + end + commandString << "\n\n" + puts commandString + end + + def generateCLIString(hash, depth) # Makes a full CLI equivalent of a preset + commandString = "" + depth.times do + commandString << " " + end commandString << './HandBrakeCLI -i DVD -o ~/Movies/movie.' #Filename suffix @@ -294,13 +295,13 @@ class Display end #VideoRateControl - case hash["VideoQualityType"].to_i + case hash["VideoQualityType"] when 0 commandString << " -S " << hash["VideoTargetSize"] when 1 commandString << " -b " << hash["VideoAvgBitrate"] when 2 - commandString << " -q " << hash["VideoQualitySlider"] + commandString << " -q " << hash["VideoQualitySlider"].to_s end #FPS @@ -316,15 +317,15 @@ class Display #Audio tracks commandString << " -a " - commandString << hash["Audio1Track"] + commandString << hash["Audio1Track"].to_s if hash["Audio2Track"] - commandString << "," << hash["Audio2Track"] + commandString << "," << hash["Audio2Track"].to_s end if hash["Audio3Track"] - commandString << "," << hash["Audio3Track"] + commandString << "," << hash["Audio3Track"].to_s end if hash["Audio4Track"] - commandString << "," << hash["Audio4Track"] + commandString << "," << hash["Audio4Track"].to_s end #Audio encoders @@ -495,30 +496,30 @@ class Display end # 64-bit files - if hash["Mp4LargeFile"].to_i == 1 + if hash["Mp4LargeFile"] == 1 commandString << " -4" end #Cropping - if !hash["PictureAutoCrop"].to_i + if hash["PictureAutoCrop"] == 0 commandString << " --crop " - commandString << hash["PictureTopCrop"] + commandString << hash["PictureTopCrop"].to_s commandString << ":" - commandString << hash["PictureBottomCrop"] + commandString << hash["PictureBottomCrop"].to_s commandString << ":" - commandString << hash["PictureLeftCrop"] + commandString << hash["PictureLeftCrop"].to_s commandString << ":" - commandString << hash["PictureRightCrop"] + commandString << hash["PictureRightCrop"].to_s end #Dimensions - if hash["PictureWidth"].to_i != 0 - commandString << " -w " - commandString << hash["PictureWidth"] + if hash["PictureWidth"] != 0 + commandString << " -X " + commandString << hash["PictureWidth"].to_s end - if hash["PictureHeight"].to_i != 0 - commandString << " -l " - commandString << hash["PictureHeight"] + if hash["PictureHeight"] != 0 + commandString << " -Y " + commandString << hash["PictureHeight"].to_s end #Subtitles @@ -528,9 +529,9 @@ class Display end #Video Filters - if hash["UsesPictureFilters"].to_i == 1 + if hash["UsesPictureFilters"] == 1 - case hash["PictureDeinterlace"].to_i + case hash["PictureDeinterlace"] when 1 commandString << " --deinterlace=\"fast\"" when 2 @@ -541,7 +542,7 @@ class Display commandString << " --deinterlace=\"slowest\"" end - case hash["PictureDenoise"].to_i + case hash["PictureDenoise"] when 1 commandString << " --denoise=\"weak\"" when 2 @@ -550,17 +551,25 @@ class Display commandString << " --denoise=\"strong\"" end - if hash["PictureDetelecine"].to_i == 1 then commandString << " --detelecine" end - if hash["PictureDeblock"].to_i == 1 then commandString << " --deblock" end + if hash["PictureDetelecine"] == 1 then commandString << " --detelecine" end + if hash["PictureDeblock"] == 1 then commandString << " --deblock" end if hash["VFR"].to_i == 1 then commandString << " --vfr" end + if hash["PictureDecomb"] == 1 then commandString << " --decomb" end + + end + + #Anamorphic + if hash["PicturePAR"] == 1 + commandString << " -p" + elsif hash["PicturePAR"] == 2 + commandString << " -P" end #Booleans - if hash["ChapterMarkers"].to_i == 1 then commandString << " -m" end - if hash["PicturePAR"].to_i == 1 then commandString << " -p" end - if hash["VideoGrayScale"].to_i == 1 then commandString << " -g" end - if hash["VideoTwoPass"].to_i == 1 then commandString << " -2" end - if hash["VideoTurboTwoPass"].to_i == 1 then commandString << " -T" end + if hash["ChapterMarkers"] == 1 then commandString << " -m" end + if hash["VideoGrayScale"] == 1 then commandString << " -g" end + if hash["VideoTwoPass"] == 1 then commandString << " -2" end + if hash["VideoTurboTwoPass"] == 1 then commandString << " -T" end #x264 Options if hash["x264Option"] != "" @@ -575,9 +584,36 @@ class Display puts "\n" end - - def generateCLIParse(hash) # Makes a CLI equivalent of all user presets, for wrappers to parse + + def generateCLIFolderParse( hash, depth ) # Shows the folder for wrappers to parse commandString = "" + depth.times do + commandString << " " + end + (depth+1).times do + commandString << "<" + end + commandString << " " << hash["PresetName"] << "\n\n" + puts commandString + end + + def generateCLIFolderCloserParse( depth ) + commandString = "" + depth.times do + commandString << " " + end + (depth+1).times do + commandString << ">" + end + commandString << "\n\n" + puts commandString + end + + def generateCLIParse(hash, depth) # Makes a CLI equivalent of all user presets, for wrappers to parse + commandString = "" + depth.times do + commandString << " " + end commandString << '+ ' << hash["PresetName"] << ":" #Video encoder @@ -592,13 +628,13 @@ class Display end #VideoRateControl - case hash["VideoQualityType"].to_i + case hash["VideoQualityType"] when 0 commandString << " -S " << hash["VideoTargetSize"] when 1 commandString << " -b " << hash["VideoAvgBitrate"] when 2 - commandString << " -q " << hash["VideoQualitySlider"] + commandString << " -q " << hash["VideoQualitySlider"].to_s end #FPS @@ -614,15 +650,15 @@ class Display #Audio tracks commandString << " -a " - commandString << hash["Audio1Track"] + commandString << hash["Audio1Track"].to_s if hash["Audio2Track"] - commandString << "," << hash["Audio2Track"] + commandString << "," << hash["Audio2Track"].to_s end if hash["Audio3Track"] - commandString << "," << hash["Audio3Track"] + commandString << "," << hash["Audio3Track"].to_s end if hash["Audio4Track"] - commandString << "," << hash["Audio4Track"] + commandString << "," << hash["Audio4Track"].to_s end #Audio encoders @@ -794,30 +830,30 @@ class Display end # 64-bit files - if hash["Mp4LargeFile"].to_i == 1 + if hash["Mp4LargeFile"] == 1 commandString << " -4" end #Cropping - if !hash["PictureAutoCrop"].to_i + if hash["PictureAutoCrop"] == 0 commandString << " --crop " - commandString << hash["PictureTopCrop"] + commandString << hash["PictureTopCrop"].to_s commandString << ":" - commandString << hash["PictureBottomCrop"] + commandString << hash["PictureBottomCrop"].to_s commandString << ":" - commandString << hash["PictureLeftCrop"] + commandString << hash["PictureLeftCrop"].to_s commandString << ":" - commandString << hash["PictureRightCrop"] + commandString << hash["PictureRightCrop"].to_s end #Dimensions - if hash["PictureWidth"].to_i != 0 - commandString << " -w " - commandString << hash["PictureWidth"] + if hash["PictureWidth"] != 0 + commandString << " -X " + commandString << hash["PictureWidth"].to_s end - if hash["PictureHeight"].to_i != 0 - commandString << " -l " - commandString << hash["PictureHeight"] + if hash["PictureHeight"] != 0 + commandString << " -Y " + commandString << hash["PictureHeight"].to_s end #Subtitles @@ -827,9 +863,9 @@ class Display end #Video Filters - if hash["UsesPictureFilters"].to_i == 1 + if hash["UsesPictureFilters"] == 1 - case hash["PictureDeinterlace"].to_i + case hash["PictureDeinterlace"] when 1 commandString << " --deinterlace=\"fast\"" when 2 @@ -840,7 +876,7 @@ class Display commandString << " --deinterlace=\"slowest\"" end - case hash["PictureDenoise"].to_i + case hash["PictureDenoise"] when 1 commandString << " --denoise=\"weak\"" when 2 @@ -849,17 +885,24 @@ class Display commandString << " --denoise=\"strong\"" end - if hash["PictureDetelecine"].to_i == 1 then commandString << " --detelecine" end - if hash["PictureDeblock"].to_i == 1 then commandString << " --deblock" end + if hash["PictureDetelecine"] == 1 then commandString << " --detelecine" end + if hash["PictureDeblock"] == 1 then commandString << " --deblock" end if hash["VFR"].to_i == 1 then commandString << " --vfr" end + if hash["PictureDecomb"] == 1 then commandString << " --decomb" end end + #Anamorphic + if hash["PicturePAR"] == 1 + commandString << " -p" + elsif hash["PicturePAR"] == 2 + commandString << " -P" + end + #Booleans - if hash["ChapterMarkers"].to_i == 1 then commandString << " -m" end - if hash["PicturePAR"].to_i == 1 then commandString << " -p" end - if hash["VideoGrayScale"].to_i == 1 then commandString << " -g" end - if hash["VideoTwoPass"].to_i == 1 then commandString << " -2" end - if hash["VideoTurboTwoPass"].to_i == 1 then commandString << " -T" end + if hash["ChapterMarkers"] == 1 then commandString << " -m" end + if hash["VideoGrayScale"] == 1 then commandString << " -g" end + if hash["VideoTwoPass"] == 1 then commandString << " -2" end + if hash["VideoTurboTwoPass"] == 1 then commandString << " -T" end #x264 Options if hash["x264Option"] != "" @@ -897,8 +940,8 @@ class Display end # 64-bit files - if hash["Mp4LargeFile"].to_i == 1 - commandString << "job->largeFileSize = 1;\n" + if hash["Mp4LargeFile"] == 1 + commandString << "job->largeFileSize = 1;\n " end #Video encoder @@ -913,13 +956,13 @@ class Display end #VideoRateControl - case hash["VideoQualityType"].to_i + case hash["VideoQualityType"] when 0 commandString << "size = " << hash["VideoTargetSize"] << ";\n " when 1 commandString << "job->vbitrate = " << hash["VideoAvgBitrate"] << ";\n " when 2 - commandString << "job->vquality = " << hash["VideoQualitySlider"] << ";\n " + commandString << "job->vquality = " << hash["VideoQualitySlider"].to_s << ";\n " commandString << "job->crf = 1;\n " end @@ -935,21 +978,21 @@ class Display end #Audio tracks - commandString << "atracks = \"" - commandString << hash["Audio1Track"] + commandString << "atracks = strdup(\"" + commandString << hash["Audio1Track"].to_s if hash["Audio2Track"] - commandString << "," << hash["Audio2Track"] + commandString << "," << hash["Audio2Track"].to_s end if hash["Audio3Track"] - commandString << "," << hash["Audio3Track"] + commandString << "," << hash["Audio3Track"].to_s end if hash["Audio4Track"] - commandString << "," << hash["Audio4Track"] + commandString << "," << hash["Audio4Track"].to_s end - commandString << "\";\n " + commandString << "\");\n " # Audio bitrate - commandString << "abitrates = \"" + commandString << "abitrates = strdup(\"" if hash["Audio1Encoder"] != "AC3 Passthru" commandString << hash["Audio1Bitrate"] else @@ -976,10 +1019,10 @@ class Display commandString << "," << "auto" end end - commandString << "\";\n " + commandString << "\");\n " #Audio samplerate - commandString << "arates = \"" + commandString << "arates = strdup(\"" commandString << hash["Audio1Samplerate"] if hash["Audio2Samplerate"] commandString << "," << hash["Audio2Samplerate"] @@ -990,10 +1033,10 @@ class Display if hash["Audio4Samplerate"] commandString << "," << hash["Audio4Samplerate"] end - commandString << "\";\n " + commandString << "\");\n " #Audio encoder - commandString << "acodecs = \"" + commandString << "acodecs = strdup(\"" case hash["Audio1Encoder"] when /AC3/ commandString << "ac3" @@ -1034,10 +1077,10 @@ class Display when /MP3/ commandString << ",lame" end - commandString << "\";\n " + commandString << "\");\n " #Audio mixdowns - commandString << "mixdowns = \"" + commandString << "mixdowns = strdup(\"" case hash["Audio1Mixdown"] when /Mono/ commandString << "mono" @@ -1100,24 +1143,24 @@ class Display commandString << ",auto" end end - commandString << "\";\n " + commandString << "\");\n " #Cropping - if !hash["PictureAutoCrop"].to_i - commandString << "job->crop[0] = " << hash["PictureTopCrop"] << ";\n " - commandString << "job->crop[1] = " << hash["PictureBottomCrop"] << ";\n " - commandString << "job->crop[2] = " << hash["PictureLeftCrop"] << ";\n " - commandString << "job->crop[4] - " << hash["PictureRightCrop"] << ";\n " + if hash["PictureAutoCrop"] == 0 + commandString << "job->crop[0] = " << hash["PictureTopCrop"].to_s << ";\n " + commandString << "job->crop[1] = " << hash["PictureBottomCrop"].to_s << ";\n " + commandString << "job->crop[2] = " << hash["PictureLeftCrop"].to_s << ";\n " + commandString << "job->crop[4] - " << hash["PictureRightCrop"].to_s << ";\n " end #Dimensions - if hash["PictureWidth"].to_i != 0 - commandString << "job->width = " - commandString << hash["PictureWidth"] << ";\n " + if hash["PictureWidth"] != 0 + commandString << "maxWidth = " + commandString << hash["PictureWidth"].to_s << ";\n " end - if hash["PictureHeight"].to_i != 0 - commandString << "job->height = " - commandString << hash["PictureHeight"] << ";\n " + if hash["PictureHeight"] != 0 + commandString << "maxHeight = " + commandString << hash["PictureHeight"].to_s << ";\n " end #Subtitles @@ -1133,9 +1176,9 @@ class Display end #Video Filters - if hash["UsesPictureFilters"].to_i == 1 + if hash["UsesPictureFilters"] == 1 - case hash["PictureDeinterlace"].to_i + case hash["PictureDeinterlace"] when 1 commandString << "deinterlace = 1;\n " commandString << "deinterlace_opt = \"-1\";\n " @@ -1150,7 +1193,7 @@ class Display commandString << "deinterlace_opt = \"1:-1:1\";\n " end - case hash["PictureDenoise"].to_i + case hash["PictureDenoise"] when 1 commandString << "denoise = 1;\n " commandString << "denoise_opt = \"2:1:2:3\";\n " @@ -1162,17 +1205,25 @@ class Display commandString << "denoise_opt = \"7:7:5:5\";\n " end - if hash["PictureDetelecine"].to_i == 1 then commandString << "detelecine = 1;\n " end - if hash["PictureDeblock"].to_i == 1 then commandString << "deblock = 1;\n " end + if hash["PictureDetelecine"] == 1 then commandString << "detelecine = 1;\n " end + if hash["PictureDeblock"] == 1 then commandString << "deblock = 1;\n " end if hash["VFR"].to_i == 1 then commandString << "vfr = 1;\n " end + if hash["PictureDecomb"] == 1 then commandString << "decomb = 1;\n " end + + end + + #Anamorphic + if hash["PicturePAR"] == 1 + commandString << "pixelratio = 1;\n " + elsif hash["PicturePAR"] == 2 + commandString << "pixelratio = 2;\n " end #Booleans - if hash["ChapterMarkers"].to_i == 1 then commandString << "job->chapter_markers = 1;\n " end - if hash["PicturePAR"].to_i == 1 then commandString << "pixelratio = 1;\n " end - if hash["VideoGrayScale"].to_i == 1 then commandString << "job->grayscale = 1;\n " end - if hash["VideoTwoPass"].to_i == 1 then commandString << "twoPass = 1;\n " end - if hash["VideoTurboTwoPass"].to_i == 1 then commandString << "turbo_opts_enabled = 1;\n" end + if hash["ChapterMarkers"] == 1 then commandString << "job->chapter_markers = 1;\n " end + if hash["VideoGrayScale"] == 1 then commandString << "job->grayscale = 1;\n " end + if hash["VideoTwoPass"] == 1 then commandString << "twoPass = 1;\n " end + if hash["VideoTurboTwoPass"] == 1 then commandString << "turbo_opts_enabled = 1;\n" end commandString << "}" @@ -1181,10 +1232,44 @@ class Display #puts "*" * @columnWidth puts "\n" end - - def generateAPIList(hash) # Makes a list of the CLI options a built-in CLI preset uses, for wrappers to parse + + def generateAPIFolderList( hash, depth ) + commandString = "" + + commandString << " printf(\"\\n" + depth.times do + commandString << " " + end + (depth+1).times do + commandString << "<" + end + commandString << " " << hash["PresetName"] + commandString << "\\n\");\n\n" + puts commandString + end + + def generateAPIFolderCloserList( depth ) commandString = "" - commandString << " printf(\"\\n+ " << hash["PresetName"] << ": " + + commandString << " printf(\"\\n" + depth.times do + commandString << " " + end + (depth+1).times do + commandString << ">" + end + commandString << "\\n\");\n\n" + puts commandString + end + + def generateAPIList(hash, depth) # Makes a list of the CLI options a built-in CLI preset uses, for wrappers to parse + commandString = "" + commandString << " printf(\"\\n" + depth.times do + commandString << " " + end + + commandString << "+ " << hash["PresetName"] << ": " #Video encoder if hash["VideoEncoder"] != "MPEG-4 (FFmpeg)" @@ -1198,13 +1283,13 @@ class Display end #VideoRateControl - case hash["VideoQualityType"].to_i + case hash["VideoQualityType"] when 0 commandString << " -S " << hash["VideoTargetSize"] when 1 commandString << " -b " << hash["VideoAvgBitrate"] when 2 - commandString << " -q " << hash["VideoQualitySlider"] + commandString << " -q " << hash["VideoQualitySlider"].to_s end #FPS @@ -1220,15 +1305,15 @@ class Display #Audio tracks commandString << " -a " - commandString << hash["Audio1Track"] + commandString << hash["Audio1Track"].to_s if hash["Audio2Track"] - commandString << "," << hash["Audio2Track"] + commandString << "," << hash["Audio2Track"].to_s end if hash["Audio3Track"] - commandString << "," << hash["Audio3Track"] + commandString << "," << hash["Audio3Track"].to_s end if hash["Audio4Track"] - commandString << "," << hash["Audio4Track"] + commandString << "," << hash["Audio4Track"].to_s end #Audio encoders @@ -1399,30 +1484,30 @@ class Display end # 64-bit files - if hash["Mp4LargeFile"].to_i == 1 + if hash["Mp4LargeFile"] == 1 commandString << " -4" end #Cropping - if !hash["PictureAutoCrop"].to_i + if hash["PictureAutoCrop"] == 0 commandString << " --crop " - commandString << hash["PictureTopCrop"] + commandString << hash["PictureTopCrop"].to_s commandString << ":" - commandString << hash["PictureBottomCrop"] + commandString << hash["PictureBottomCrop"].to_s commandString << ":" - commandString << hash["PictureLeftCrop"] + commandString << hash["PictureLeftCrop"].to_s commandString << ":" - commandString << hash["PictureRightCrop"] + commandString << hash["PictureRightCrop"].to_s end #Dimensions - if hash["PictureWidth"].to_i != 0 - commandString << " -w " - commandString << hash["PictureWidth"] + if hash["PictureWidth"] != 0 + commandString << " -X " + commandString << hash["PictureWidth"].to_s end - if hash["PictureHeight"].to_i != 0 - commandString << " -l " - commandString << hash["PictureHeight"] + if hash["PictureHeight"] != 0 + commandString << " -Y " + commandString << hash["PictureHeight"].to_s end #Subtitles @@ -1432,9 +1517,9 @@ class Display end #Video Filters - if hash["UsesPictureFilters"].to_i == 1 + if hash["UsesPictureFilters"] == 1 - case hash["PictureDeinterlace"].to_i + case hash["PictureDeinterlace"] when 1 commandString << " --deinterlace=\\\"fast\\\"" when 2 @@ -1445,7 +1530,7 @@ class Display commandString << " --deinterlace=\\\"slowest\\\"" end - case hash["PictureDenoise"].to_i + case hash["PictureDenoise"] when 1 commandString << " --denoise=\\\"weak\\\"" when 2 @@ -1454,17 +1539,24 @@ class Display commandString << " --denoise=\\\"strong\\\"" end - if hash["PictureDetelecine"].to_i == 1 then commandString << " --detelecine" end - if hash["PictureDeblock"].to_i == 1 then commandString << " --deblock" end + if hash["PictureDetelecine"] == 1 then commandString << " --detelecine" end + if hash["PictureDeblock"] == 1 then commandString << " --deblock" end if hash["VFR"].to_i == 1 then commandString << " --vfr" end + if hash["PictureDecomb"] == 1 then commandString << " --decomb" end + end + + #Anamorphic + if hash["PicturePAR"] == 1 + commandString << " -p" + elsif hash["PicturePAR"] == 2 + commandString << " -P" end #Booleans - if hash["ChapterMarkers"].to_i == 1 then commandString << " -m" end - if hash["PicturePAR"].to_i == 1 then commandString << " -p" end - if hash["VideoGrayScale"].to_i == 1 then commandString << " -g" end - if hash["VideoTwoPass"].to_i == 1 then commandString << " -2" end - if hash["VideoTurboTwoPass"].to_i == 1 then commandString << " -T" end + if hash["ChapterMarkers"] == 1 then commandString << " -m" end + if hash["VideoGrayScale"] == 1 then commandString << " -g" end + if hash["VideoTwoPass"] == 1 then commandString << " -2" end + if hash["VideoTurboTwoPass"] == 1 then commandString << " -T" end #x264 Options if hash["x264Option"] != "" |