OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / scripts / manicure.rb
index 4dc8691..f458aec 100755 (executable)
@@ -275,10 +275,6 @@ class Display
     case hash["FileFormat"]
     when /MP4/
       commandString << "mp4 "
-    when /AVI/
-      commandString << "avi "
-    when /OGM/
-      commandString << "ogm "
     when /MKV/
       commandString << "mkv "
     end
@@ -289,8 +285,8 @@ class Display
       case hash["VideoEncoder"]
       when /x264/
         commandString << "x264"
-      when /XviD/
-        commandString << "xvid"
+      when /Theora/
+        commandString << "theora"
       end
     end
 
@@ -315,179 +311,88 @@ class Display
       else
         commandString << " -r " << hash["VideoFramerate"]
       end
+      
+      if hash["VideoFrameratePFR"] == 1
+        commandString << " --pfr "
+      end
     end
     
     #Audio tracks
-    commandString << " -a "
-    commandString << hash["Audio1Track"].to_s
-    if hash["Audio2Track"]
-      commandString << "," << hash["Audio2Track"].to_s
-    end
-    if hash["Audio3Track"]
-      commandString << "," << hash["Audio3Track"].to_s
-    end
-    if hash["Audio4Track"]
-      commandString << "," << hash["Audio4Track"].to_s
-    end
-    
-    #Audio encoders
-    commandString << " -E "
-    case hash["Audio1Encoder"]
-    when /AC3 /
-      commandString << "ac3"
-    when /AAC/
-      commandString << "faac"
-    when /Vorbis/
-      commandString << "vorbis"
-    when /MP3/
-      commandString << "lame"
-    end
-    case hash["Audio2Encoder"]
-    when /AC3 /
-      commandString << ",ac3"
-    when /AAC/
-      commandString << ",faac"
-    when /Vorbis/
-      commandString << ",vorbis"
-    when /MP3/
-      commandString << ",lame"
-    end
-    case hash["Audio3Encoder"]
-    when /AC3 /
-      commandString << ",ac3"
-    when /AAC/
-      commandString << ",faac"
-    when /Vorbis/
-      commandString << ",vorbis"
-    when /MP3/
-      commandString << ",lame"
-    end
-    case hash["Audio4Encoder"]
-    when /AC3 /
-      commandString << ",ac3"
-    when /AAC/
-      commandString << ",faac"
-    when /Vorbis/
-      commandString << ",vorbis"
-    when /MP3/
-      commandString << ",lame"
-    end
-    
-    #Audio bit rate
-    commandString << " -B "
-    commandString << hash["Audio1Bitrate"]
-    if hash["Audio2Bitrate"]
-      if hash["Audio2Encoder"] != "AC3 Passthru"
-        commandString << "," << hash["Audio2Bitrate"]
-      else
-        commandString << "," << "auto"
-      end
-    end
-    if hash["Audio3Bitrate"]
-      if hash["Audio3Encoder"] != "AC3 Passthru"
-        commandString << "," << hash["Audio3Bitrate"]
-      else
-        commandString << "," << "auto"
-      end
-    end
-    if hash["Audio4Bitrate"]
-      if hash["Audio4Encoder"] != "AC3 Passthru"
-        commandString << "," << hash["Audio4Bitrate"]
-      else
-        commandString << "," << "auto"
-      end
-    end
+    audioBitrates = ""
+    audioEncoders = ""
+    audioMixdowns = ""
+    audioSamplerates = ""
+    audioTracks = ""
+    audioTrackDRCs = ""
+    audioCount = hash["AudioList"].size
+    
+    hash["AudioList"].each do |audioTrack|
+      audioCount = audioCount - 1
 
-    #Audio sample rate
-    commandString << " -R "
-    commandString << hash["Audio1Samplerate"]
-    if hash["Audio2Samplerate"]
-      commandString << "," << hash["Audio2Samplerate"]
-    end
-    if hash["Audio3Samplerate"]
-      commandString << "," << hash["Audio3Samplerate"]
-    end
-    if hash["Audio4Samplerate"]
-      commandString << "," << hash["Audio4Samplerate"]
-    end
-    
-    #Audio Mixdown
-    commandString << " -6 "
-    case hash["Audio1Mixdown"]
-    when /Mono/
-      commandString << "mono"
-    when /Stereo/
-      commandString << "stereo"
-    when /Dolby Surround/
-      commandString << "dpl1"
-    when /Dolby Pro Logic II/
-      commandString << "dpl2"
-    when /discrete/
-      commandString << "6ch"
-    when /Passthru/
-      commandString << "auto"
-    end
-    
-    if hash["Audio2Mixdown"]
-      case hash["Audio2Mixdown"]
-      when /Mono/
-        commandString << ",mono"
-      when /Stereo/
-        commandString << ",stereo"
-      when /Dolby Surround/
-        commandString << ",dpl1"
-      when /Dolby Pro Logic II/
-        commandString << ",dpl2"
-      when /discrete/
-        commandString << ",6ch"
-      when /Passthru/
-        commandString << ",auto"
+      #Bitrates
+      audioBitrates << audioTrack["AudioBitrate"]
+      
+      #Encoders
+      case audioTrack["AudioEncoder"]
+        when /AC3 Pass/
+          audioEncoders << "copy:ac3"
+        when /AC3/
+          audioEncoders << "ac3"
+        when /AAC/
+          audioEncoders << "faac"
+        when /Vorbis/
+          audioEncoders << "vorbis"
+        when /MP3/
+          audioEncoders << "lame"
       end
-    end
-    
-    if hash["Audio3Mixdown"]
-      case hash["Audio3Mixdown"]
+      
+      #Mixdowns
+      case audioTrack["AudioMixdown"]
       when /Mono/
-        commandString << ",mono"
+        audioMixdowns << "mono"
       when /Stereo/
-        commandString << ",stereo"
+        audioMixdowns << "stereo"
       when /Dolby Surround/
-        commandString << ",dpl1"
+        audioMixdowns << "dpl1"
       when /Dolby Pro Logic II/
-        commandString << ",dpl2"
+        audioMixdowns << "dpl2"
       when /discrete/
-        commandString << ",6ch"
+        audioMixdowns << "6ch"
       when /Passthru/
-        commandString << ",auto"
+        audioMixdowns << "auto"
       end
-    end
-    
-    if hash["Audio4Mixdown"]
-      case hash["Audio4Mixdown"]
-      when /Mono/
-        commandString << ",mono"
-      when /Stereo/
-        commandString << ",stereo"
-      when /Dolby Surround/
-        commandString << ",dpl1"
-      when /Dolby Pro Logic II/
-        commandString << ",dpl2"
-      when /discrete/
-        commandString << ",6ch"
-      when /Passthru/
-        commandString << ",auto"
+      
+      #Samplerates
+      audioSamplerates << audioTrack["AudioSamplerate"]
+      
+      #Tracks
+      audioTracks << audioTrack["AudioTrack"].to_s
+      
+      #DRC
+      audioTrackDRCs << audioTrack["AudioTrackDRCSlider"].to_s
+      
+      if audioCount > 0
+        audioBitrates << ","
+        audioEncoders << ","
+        audioMixdowns << ","
+        audioSamplerates << ","
+        audioTracks << ","
+        audioTrackDRCs << ","
       end
+      
     end
-    
+    commandString << " -a " << audioTracks
+    commandString << " -E " << audioEncoders
+    commandString << " -B " << audioBitrates
+    commandString << " -6 " << audioMixdowns
+    commandString << " -R " << audioSamplerates
+    commandString << " -D " << audioTrackDRCs
+        
     #Container
     commandString << " -f "
     case hash["FileFormat"]
     when /MP4/
       commandString << "mp4"
-    when /AVI/
-      commandString << "avi"
-    when /OGM/
-      commandString << "ogm"
     when /MKV/
       commandString << "mkv"
     end
@@ -525,7 +430,7 @@ class Display
     end
     
     #Subtitles
-    if hash["Subtitles"] != "None"
+    if hash["Subtitles"] && hash["Subtitles"] != "None"
       if hash["Subtitles"] == "Autoselect"
         commandString << " --subtitle-scan"
       else
@@ -538,37 +443,38 @@ class Display
     if hash["UsesPictureFilters"] == 1
       
       case hash["PictureDeinterlace"]
-      when 1
-        commandString << " --deinterlace=\"fast\""
       when 2
-        commandString << " --deinterlace=\slow\""
+        commandString << " --deinterlace=\"fast\""
       when 3
-        commandString << " --deinterlace=\"slower\""
+        commandString << " --deinterlace=\slow\""
       when 4
+        commandString << " --deinterlace=\"slower\""
+      when 5
         commandString << " --deinterlace=\"slowest\""
       end
       
       case hash["PictureDenoise"]
-      when 1
-        commandString << " --denoise=\"weak\""
       when 2
-        commandString << " --denoise=\"medium\""
+        commandString << " --denoise=\"weak\""
       when 3
+        commandString << " --denoise=\"medium\""
+      when 4
         commandString << " --denoise=\"strong\""
       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
+      if hash["PictureDetelecine"] == 2 then commandString << " --detelecine" end
+      if hash["PictureDeblock"] != 0 then commandString << " --deblock=" << hash["PictureDeblock"].to_s end
+      if hash["PictureDecomb"] == 2 then commandString << " --decomb" end
       
     end
     
     #Anamorphic
     if hash["PicturePAR"] == 1
-      commandString << " -p"
+      commandString << " --strict-anamorphic"
     elsif hash["PicturePAR"] == 2
-      commandString << " -P"
+      commandString << " --loose-anamorphic"
+    elsif hash["PicturePAR"] == 3
+      commandString << " --custom-anamorphic"
     end
 
     #Booleans
@@ -628,8 +534,8 @@ class Display
       case hash["VideoEncoder"]
       when /x264/
         commandString << "x264"
-      when /XviD/
-        commandString << "xvid"
+      when /Theora/
+        commandString << "theora"
       end
     end
 
@@ -654,180 +560,88 @@ class Display
       else
         commandString << " -r " << hash["VideoFramerate"]
       end
+      
+      if hash["VideoFrameratePFR"] == 1
+        commandString << " --pfr "
+      end
     end
     
     #Audio tracks
-    commandString << " -a "
-    commandString << hash["Audio1Track"].to_s
-    if hash["Audio2Track"]
-      commandString << "," << hash["Audio2Track"].to_s
-    end
-    if hash["Audio3Track"]
-      commandString << "," << hash["Audio3Track"].to_s
-    end
-    if hash["Audio4Track"]
-      commandString << "," << hash["Audio4Track"].to_s
-    end
-    
-    #Audio encoders
-    commandString << " -E "
-    case hash["Audio1Encoder"]
-    when /AC3/
-      commandString << "ac3"
-    when /AAC/
-      commandString << "faac"
-    when /Vorbis/
-      commandString << "vorbis"
-    when /MP3/
-      commandString << "lame"
-    end
-    case hash["Audio2Encoder"]
-    when /AC3 /
-      commandString << ",ac3"
-    when /AAC/
-      commandString << ",faac"
-    when /Vorbis/
-      commandString << ",vorbis"
-    when /MP3/
-      commandString << ",lame"
-    end
-    case hash["Audio3Encoder"]
-    when /AC3 /
-      commandString << ",ac3"
-    when /AAC/
-      commandString << ",faac"
-    when /Vorbis/
-      commandString << ",vorbis"
-    when /MP3/
-      commandString << ",lame"
-    end
-    case hash["Audio4Encoder"]
-    when /AC3 /
-      commandString << ",ac3"
-    when /AAC/
-      commandString << ",faac"
-    when /Vorbis/
-      commandString << ",vorbis"
-    when /MP3/
-      commandString << ",lame"
-    end
+    audioBitrates = ""
+    audioEncoders = ""
+    audioMixdowns = ""
+    audioSamplerates = ""
+    audioTracks = ""
+    audioTrackDRCs = ""
+    audioCount = hash["AudioList"].size
+    
+    hash["AudioList"].each do |audioTrack|
+      audioCount = audioCount - 1
 
-    #Audio bit rate
-    commandString << " -B "
-    commandString << hash["Audio1Bitrate"]
-    if hash["Audio2Bitrate"]
-      if hash["Audio2Encoder"] != "AC3 Passthru"
-        commandString << "," << hash["Audio2Bitrate"]
-      else
-        commandString << "," << "auto"
-      end
-    end
-    if hash["Audio3Bitrate"]
-      if hash["Audio3Encoder"] != "AC3 Passthru"
-        commandString << "," << hash["Audio3Bitrate"]
-      else
-        commandString << "," << "auto"
-      end
-    end
-    if hash["Audio4Bitrate"]
-      if hash["Audio4Encoder"] != "AC3 Passthru"
-        commandString << "," << hash["Audio4Bitrate"]
-      else
-        commandString << "," << "auto"
+      #Bitrates
+      audioBitrates << audioTrack["AudioBitrate"]
+      
+      #Encoders
+      case audioTrack["AudioEncoder"]
+        when /AC3 Pass/
+          audioEncoders << "copy:ac3"
+        when /AC3/
+          audioEncoders << "ac3"
+        when /AAC/
+          audioEncoders << "faac"
+        when /Vorbis/
+          audioEncoders << "vorbis"
+        when /MP3/
+          audioEncoders << "lame"
       end
-    end
-
-    #Audio sample rate
-    commandString << " -R "
-    commandString << hash["Audio1Samplerate"]
-    if hash["Audio2Samplerate"]
-      commandString << "," << hash["Audio2Samplerate"]
-    end
-    if hash["Audio3Samplerate"]
-      commandString << "," << hash["Audio3Samplerate"]
-    end
-    if hash["Audio4Samplerate"]
-      commandString << "," << hash["Audio4Samplerate"]
-    end
-    
-    #Audio Mixdown
-    commandString << " -6 "
-    case hash["Audio1Mixdown"]
-    when /Mono/
-      commandString << "mono"
-    when /Stereo/
-      commandString << "stereo"
-    when /Dolby Surround/
-      commandString << "dpl1"
-    when /Dolby Pro Logic II/
-      commandString << "dpl2"
-    when /discrete/
-      commandString << "6ch"
-    when /Passthru/
-      commandString << "auto"
-    end
-    
-    if hash["Audio2Mixdown"]
-      case hash["Audio2Mixdown"]
+      
+      #Mixdowns
+      case audioTrack["AudioMixdown"]
       when /Mono/
-        commandString << ",mono"
+        audioMixdowns << "mono"
       when /Stereo/
-        commandString << ",stereo"
+        audioMixdowns << "stereo"
       when /Dolby Surround/
-        commandString << ",dpl1"
+        audioMixdowns << "dpl1"
       when /Dolby Pro Logic II/
-        commandString << ",dpl2"
+        audioMixdowns << "dpl2"
       when /discrete/
-        commandString << ",6ch"
+        audioMixdowns << "6ch"
       when /Passthru/
-        commandString << ",auto"
+        audioMixdowns << "auto"
       end
-    end
-    
-    if hash["Audio3Mixdown"]
-      case hash["Audio3Mixdown"]
-      when /Mono/
-        commandString << ",mono"
-      when /Stereo/
-        commandString << ",stereo"
-      when /Dolby Surround/
-        commandString << ",dpl1"
-      when /Dolby Pro Logic II/
-        commandString << ",dpl2"
-      when /discrete/
-        commandString << ",6ch"
-      when /Passthru/
-        commandString << ",auto"
+      
+      #Samplerates
+      audioSamplerates << audioTrack["AudioSamplerate"]
+      
+      #Tracks
+      audioTracks << audioTrack["AudioTrack"].to_s
+      
+      #DRC
+      audioTrackDRCs << audioTrack["AudioTrackDRCSlider"].to_s
+      
+      if audioCount > 0
+        audioBitrates << ","
+        audioEncoders << ","
+        audioMixdowns << ","
+        audioSamplerates << ","
+        audioTracks << ","
+        audioTrackDRCs << ","
       end
+      
     end
-    
-    if hash["Audio4Mixdown"]
-      case hash["Audio4Mixdown"]
-      when /Mono/
-        commandString << ",mono"
-      when /Stereo/
-        commandString << ",stereo"
-      when /Dolby Surround/
-        commandString << ",dpl1"
-      when /Dolby Pro Logic II/
-        commandString << ",dpl2"
-      when /discrete/
-        commandString << ",6ch"
-      when /Passthru/
-        commandString << ",auto"
-      end
-    end
-
+    commandString << " -a " << audioTracks
+    commandString << " -E " << audioEncoders
+    commandString << " -B " << audioBitrates
+    commandString << " -6 " << audioMixdowns
+    commandString << " -R " << audioSamplerates
+    commandString << " -D " << audioTrackDRCs
     
     #Container
     commandString << " -f "
     case hash["FileFormat"]
     when /MP4/
       commandString << "mp4"
-    when /AVI/
-      commandString << "avi"
-    when /OGM/
-      commandString << "ogm"
     when /MKV/
       commandString << "mkv"
     end
@@ -865,7 +679,7 @@ class Display
     end
     
     #Subtitles
-    if hash["Subtitles"] != "None"
+    if hash["Subtitles"] && hash["Subtitles"] != "None"
       if hash["Subtitles"] == "Autoselect"
         commandString << " --subtitle-scan"
       else
@@ -878,36 +692,37 @@ class Display
     if hash["UsesPictureFilters"] == 1
       
       case hash["PictureDeinterlace"]
-      when 1
-        commandString << " --deinterlace=\"fast\""
       when 2
-        commandString << " --deinterlace=\slow\""
+        commandString << " --deinterlace=\"fast\""
       when 3
-        commandString << " --deinterlace=\"slower\""
+        commandString << " --deinterlace=\slow\""
       when 4
+        commandString << " --deinterlace=\"slower\""
+      when 5
         commandString << " --deinterlace=\"slowest\""
       end
       
       case hash["PictureDenoise"]
-      when 1
-        commandString << " --denoise=\"weak\""
       when 2
-        commandString << " --denoise=\"medium\""
+        commandString << " --denoise=\"weak\""
       when 3
+        commandString << " --denoise=\"medium\""
+      when 4
         commandString << " --denoise=\"strong\""
       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
+      if hash["PictureDetelecine"] == 2 then commandString << " --detelecine" end
+      if hash["PictureDeblock"] != 0 then commandString << " --deblock=" << hash["PictureDeblock"].to_s end
+      if hash["PictureDecomb"] == 2 then commandString << " --decomb" end
     end
 
     #Anamorphic
     if hash["PicturePAR"] == 1
-      commandString << " -p"
+      commandString << " --strict-anamorphic"
     elsif hash["PicturePAR"] == 2
-      commandString << " -P"
+      commandString << " --loose-anamorphic"
+    elsif hash["PicturePAR"] == 3
+      commandString << " --custom-anamorphic"
     end
     
     #Booleans
@@ -935,20 +750,20 @@ class Display
     commandString = "if (!strcmp(preset_name, \"" << hash["PresetName"] << "\"))\n{\n    "
     
     #Filename suffix
+    commandString << "if( !mux )\n    "
+    commandString << "{\n    "
+
     case hash["FileFormat"]
     when /MP4/
-      commandString << "mux = " << "HB_MUX_MP4;\n    "
-    when /AVI/
-      commandString << "mux = " << "HB_MUX_AVI;\n    "
-    when /OGM/
-      commandString << "mux = " << "HB_MUX_OGM;\n    "
+      commandString << "    mux = " << "HB_MUX_MP4;\n    "
     when /MKV/
-      commandString << "mux = " << "HB_MUX_MKV;\n    "
+      commandString << "    mux = " << "HB_MUX_MKV;\n    "
     end
+    commandString << "}\n    "
     
     #iPod MP4 atom
     if hash["Mp4iPodCompatible"].to_i == 1
-      commandString << "job->ipod_atom = 1;\n   "
+      commandString << "job->ipod_atom = 1;\n    "
     end
     
     # 64-bit files
@@ -962,8 +777,8 @@ class Display
       case hash["VideoEncoder"]
       when /x264/
         commandString << "HB_VCODEC_X264;\n    "
-      when /XviD/
-        commandString << "HB_VCODEC_XVID;\n    "        
+      when /Theora/
+        commandString << "HB_VCODEC_THEORA;\n    "        
       end
     end
 
@@ -975,7 +790,6 @@ class Display
       commandString << "job->vbitrate = " << hash["VideoAvgBitrate"] << ";\n    "
     when 2
       commandString << "job->vquality = " << hash["VideoQualitySlider"].to_s << ";\n    "
-      commandString << "job->crf = 1;\n    "
     end
 
     #FPS
@@ -988,183 +802,120 @@ class Display
         commandString << "job->vrate_base = " << "1080000\n    "
       # Gotta add the rest of the framerates for completion's sake.
       end
-      commandString << "job->cfr = 1;\n    "
-    end
-    
-    #Audio tracks
-    commandString << "atracks = strdup(\""
-    commandString << hash["Audio1Track"].to_s
-    if hash["Audio2Track"]
-      commandString << "," << hash["Audio2Track"].to_s
-    end
-    if hash["Audio3Track"]
-      commandString << "," << hash["Audio3Track"].to_s
-    end
-    if hash["Audio4Track"]
-      commandString << "," << hash["Audio4Track"].to_s
-    end
-    commandString << "\");\n    "
-    
-    # Audio bitrate
-    commandString << "abitrates = strdup(\""
-    if hash["Audio1Encoder"] != "AC3 Passthru"
-      commandString << hash["Audio1Bitrate"]
-    else
-      commandString << "auto"
-    end
-    if hash["Audio2Bitrate"]
-      if hash["Audio2Encoder"] != "AC3 Passthru"
-        commandString << "," << hash["Audio2Bitrate"]
-      else
-        commandString << "," << "auto"
-      end
-    end
-    if hash["Audio3Bitrate"]
-      if hash["Audio3Encoder"] != "AC3 Passthru"
-        commandString << "," << hash["Audio3Bitrate"]
-      else
-        commandString << "," << "auto"
-      end
-    end
-    if hash["Audio4Bitrate"]
-      if hash["Audio4Encoder"] != "AC3 Passthru"
-        commandString << "," << hash["Audio4Bitrate"]
+      
+      if hash["VideoFrameratePFR"] == 1
+        commandString << "job->cfr = 2;\n    "
       else
-        commandString << "," << "auto"
+        commandString << "job->cfr = 1;\n    "
       end
     end
-    commandString << "\");\n    "
-        
-    #Audio samplerate
-    commandString << "arates = strdup(\""
-    commandString << hash["Audio1Samplerate"]
-    if hash["Audio2Samplerate"]
-      commandString << "," << hash["Audio2Samplerate"]
-    end
-    if hash["Audio3Samplerate"]
-      commandString << "," << hash["Audio3Samplerate"]
-    end
-    if hash["Audio4Samplerate"]
-      commandString << "," << hash["Audio4Samplerate"]
-    end
-    commandString << "\");\n    "
-      
-    #Audio encoder
-    commandString << "acodecs = strdup(\""
-    case hash["Audio1Encoder"]
-    when /AC3/
-      commandString << "ac3"
-    when /AAC/
-      commandString << "faac"
-    when /Vorbis/
-      commandString << "vorbis"
-    when /MP3/
-      commandString << "lame"
-    end
-    case hash["Audio2Encoder"]
-    when /AC3 /
-      commandString << ",ac3"
-    when /AAC/
-      commandString << ",faac"
-    when /Vorbis/
-      commandString << ",vorbis"
-    when /MP3/
-      commandString << ",lame"
-    end
-    case hash["Audio3Encoder"]
-    when /AC3 /
-      commandString << ",ac3"
-    when /AAC/
-      commandString << ",faac"
-    when /Vorbis/
-      commandString << ",vorbis"
-    when /MP3/
-      commandString << ",lame"
-    end
-    case hash["Audio4Encoder"]
-    when /AC3 /
-      commandString << ",ac3"
-    when /AAC/
-      commandString << ",faac"
-    when /Vorbis/
-      commandString << ",vorbis"
-    when /MP3/
-      commandString << ",lame"
-    end
-    commandString << "\");\n    "
     
-    #Audio mixdowns
-    commandString << "mixdowns = strdup(\""
-    case hash["Audio1Mixdown"]
-    when /Mono/
-      commandString << "mono"
-    when /Stereo/
-      commandString << "stereo"
-    when /Dolby Surround/
-      commandString << "dpl1"
-    when /Dolby Pro Logic II/
-      commandString << "dpl2"
-    when /discrete/
-      commandString << "6ch"
-    when /Passthru/
-      commandString << "auto"
-    end
-    if hash["Audio2Mixdown"]
-      case hash["Audio2Mixdown"]
-      when /Mono/
-        commandString << ",mono"
-      when /Stereo/
-        commandString << ",stereo"
-      when /Dolby Surround/
-        commandString << ",dpl1"
-      when /Dolby Pro Logic II/
-        commandString << ",dpl2"
-      when /discrete/
-        commandString << ",6ch"
-      when /Passthru/
-        commandString << ",auto"
+    #Audio tracks
+    audioBitrates = ""
+    audioEncoders = ""
+    audioMixdowns = ""
+    audioSamplerates = ""
+    audioTracks = ""
+    audioTrackDRCs = ""
+    audioCount = hash["AudioList"].size
+
+    hash["AudioList"].each do |audioTrack|
+      audioCount = audioCount - 1
+
+      #Bitrates
+      audioBitrates << audioTrack["AudioBitrate"]
+
+      #Encoders
+      case audioTrack["AudioEncoder"]
+        when /AC3 Pass/
+          audioEncoders << "copy:ac3"
+        when /AC3/
+          audioEncoders << "ac3"
+        when /AAC/
+          audioEncoders << "faac"
+        when /Vorbis/
+          audioEncoders << "vorbis"
+        when /MP3/
+          audioEncoders << "lame"
       end
-    end
-    if hash["Audio3Mixdown"]
-      case hash["Audio3Mixdown"]
+
+      #Mixdowns
+      case audioTrack["AudioMixdown"]
       when /Mono/
-        commandString << ",mono"
+        audioMixdowns << "mono"
       when /Stereo/
-        commandString << ",stereo"
+        audioMixdowns << "stereo"
       when /Dolby Surround/
-        commandString << ",dpl1"
+        audioMixdowns << "dpl1"
       when /Dolby Pro Logic II/
-        commandString << ",dpl2"
+        audioMixdowns << "dpl2"
       when /discrete/
-        commandString << ",6ch"
+        audioMixdowns << "6ch"
       when /Passthru/
-        commandString << ",auto"
+        audioMixdowns << "auto"
       end
-    end
-    if hash["Audio4Mixdown"]
-      case hash["Audio4Mixdown"]
-      when /Mono/
-        commandString << ",mono"
-      when /Stereo/
-        commandString << ",stereo"
-      when /Dolby Surround/
-        commandString << ",dpl1"
-      when /Dolby Pro Logic II/
-        commandString << ",dpl2"
-      when /discrete/
-        commandString << ",6ch"
-      when /Passthru/
-        commandString << ",auto"
+
+      #Samplerates
+      audioSamplerates << audioTrack["AudioSamplerate"]
+
+      #Tracks
+      audioTracks << audioTrack["AudioTrack"].to_s
+
+      #DRC
+      audioTrackDRCs << audioTrack["AudioTrackDRCSlider"].to_s
+
+      if audioCount > 0
+        audioBitrates << ","
+        audioEncoders << ","
+        audioMixdowns << ","
+        audioSamplerates << ","
+        audioTracks << ","
+        audioTrackDRCs << ","
       end
+
     end
+    commandString << "if( !atracks )\n    "
+    commandString << "{\n    "
+    commandString << "    atracks = strdup(\"" << audioTracks
+    commandString << "\");\n    "
+    commandString << "}\n    "
+
+    commandString << "if( !acodecs )\n    "
+    commandString << "{\n    "
+    commandString << "    acodecs = strdup(\"" << audioEncoders
+    commandString << "\");\n    "
+    commandString << "}\n    "
+
+    commandString << "if( !abitrates )\n    "
+    commandString << "{\n    "
+    commandString << "    abitrates = strdup(\"" << audioBitrates
+    commandString << "\");\n    "
+    commandString << "}\n    "
+
+    commandString << "if( !mixdowns )\n    "
+    commandString << "{\n    "
+    commandString << "    mixdowns = strdup(\"" << audioMixdowns
     commandString << "\");\n    "
+    commandString << "}\n    "
+
+    commandString << "if( !arates )\n    "
+    commandString << "{\n    "
+    commandString << "    arates = strdup(\"" << audioSamplerates
+    commandString << "\");\n    "
+    commandString << "}\n    "
+
+    commandString << "if( !dynamic_range_compression )\n    "
+    commandString << "{\n    "
+    commandString << "    dynamic_range_compression = strdup(\"" << audioTrackDRCs
+    commandString << "\");\n    "
+    commandString << "}\n    "
     
     #Cropping
     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    "
+      commandString << "job->crop[4] = " << hash["PictureRightCrop"].to_s << ";\n    "
     end
     
     #Dimensions
@@ -1189,52 +940,65 @@ class Display
     
     #x264 Options
     if hash["x264Option"] != ""
-      commandString << "x264opts = strdup(\""
+      commandString << "if( !x264opts )\n    "
+      commandString << "{\n    "
+      commandString << "    x264opts = strdup(\""
       commandString << hash["x264Option"] << "\");\n    "
+      commandString << "}\n    "
     end
     
     #Video Filters
     if hash["UsesPictureFilters"] == 1
       
       case hash["PictureDeinterlace"]
-      when 1
+      when 2
         commandString << "deinterlace = 1;\n    "
         commandString << "deinterlace_opt = \"-1\";\n    "
-      when 2
+      when 3
         commandString << "deinterlace = 1;\n    "
         commandString << "deinterlace_opt = \"2\";\n    "
-      when 3
+      when 4
         commandString << "deinterlace = 1;\n    "
         commandString << "deinterlace_opt = \"0\";\n    "
-      when 4
+      when 5
         commandString << "deinterlace = 1;\n    "
         commandString << "deinterlace_opt = \"1:-1:1\";\n    "
       end
       
       case hash["PictureDenoise"]
-      when 1
+      when 2
         commandString << "denoise = 1;\n    "
         commandString << "denoise_opt = \"2:1:2:3\";\n    "
-      when 2
+      when 3
         commandString << "denoise = 1;\n    "
         commandString << "denoise_opt = \"3:2:2:3\";\n    "
-      when 3
+      when 4
         commandString << "denoise = 1;\n    "
         commandString << "denoise_opt = \"7:7:5:5\";\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
+      if hash["PictureDetelecine"] == 2 then commandString << "detelecine = 1;\n    " end
+      if hash["PictureDeblock"] != 0
+        then
+          commandString << "deblock = 1;\n    "
+          commandString << "deblock_opt = \"" << hash["PictureDeblock"].to_s << "\";\n    "
+        end
+      if hash["PictureDecomb"] == 2 then commandString << "decomb = 1;\n    " end
       
     end
     
     #Anamorphic
-    if hash["PicturePAR"] == 1
-      commandString << "pixelratio = 1;\n    "
-    elsif hash["PicturePAR"] == 2
-      commandString << "pixelratio = 2;\n    "
+    if hash["PicturePAR"] != 0
+      commandString << "if( !anamorphic_mode )\n    "
+      commandString << "{\n    "
+      if hash["PicturePAR"] == 1
+        commandString << "    anamorphic_mode = 1;\n    "
+      elsif hash["PicturePAR"] == 2
+        commandString << "    anamorphic_mode = 2;\n    "
+      elsif hash["PicturePAR"] == 3
+        commandString << "    anamorphic_mode = 3;\n    "
+      end
+      commandString << "}\n    "
     end
     
     #Booleans
@@ -1242,7 +1006,7 @@ class Display
     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 << "\n"
     commandString << "}"
     
     # That's it, print to screen now
@@ -1295,8 +1059,8 @@ class Display
       case hash["VideoEncoder"]
       when /x264/
         commandString << "x264 "
-      when /XviD/
-        commandString << "xvid "
+      when /Theora/
+        commandString << "theora "
       end
     end
 
@@ -1321,179 +1085,88 @@ class Display
       else
         commandString << " -r " << hash["VideoFramerate"]
       end
+      
+      if hash["VideoFrameratePFR"] == 1
+        commandString << " --pfr "
+      end
     end
     
     #Audio tracks
-    commandString << " -a "
-    commandString << hash["Audio1Track"].to_s
-    if hash["Audio2Track"]
-      commandString << "," << hash["Audio2Track"].to_s
-    end
-    if hash["Audio3Track"]
-      commandString << "," << hash["Audio3Track"].to_s
-    end
-    if hash["Audio4Track"]
-      commandString << "," << hash["Audio4Track"].to_s
-    end
-    
-    #Audio encoders
-    commandString << " -E "
-    case hash["Audio1Encoder"]
-    when /AC3/
-      commandString << "ac3"
-    when /AAC/
-      commandString << "faac"
-    when /Vorbis/
-      commandString << "vorbis"
-    when /MP3/
-      commandString << "lame"
-    end
-    case hash["Audio2Encoder"]
-    when /AC3 /
-      commandString << ",ac3"
-    when /AAC/
-      commandString << ",faac"
-    when /Vorbis/
-      commandString << ",vorbis"
-    when /MP3/
-      commandString << ",lame"
-    end
-    case hash["Audio3Encoder"]
-    when /AC3 /
-      commandString << ",ac3"
-    when /AAC/
-      commandString << ",faac"
-    when /Vorbis/
-      commandString << ",vorbis"
-    when /MP3/
-      commandString << ",lame"
-    end
-    case hash["Audio4Encoder"]
-    when /AC3 /
-      commandString << ",ac3"
-    when /AAC/
-      commandString << ",faac"
-    when /Vorbis/
-      commandString << ",vorbis"
-    when /MP3/
-      commandString << ",lame"
-    end
-
-    #Audio bit rate
-    commandString << " -B "
-    commandString << hash["Audio1Bitrate"]
-    if hash["Audio2Bitrate"]
-      if hash["Audio2Encoder"] != "AC3 Passthru"
-        commandString << "," << hash["Audio2Bitrate"]
-      else
-        commandString << "," << "auto"
-      end
-    end
-    if hash["Audio3Bitrate"]
-      if hash["Audio3Encoder"] != "AC3 Passthru"
-        commandString << "," << hash["Audio3Bitrate"]
-      else
-        commandString << "," << "auto"
-      end
-    end
-    if hash["Audio4Bitrate"]
-      if hash["Audio4Encoder"] != "AC3 Passthru"
-        commandString << "," << hash["Audio4Bitrate"]
-      else
-        commandString << "," << "auto"
-      end
-    end
+    audioBitrates = ""
+    audioEncoders = ""
+    audioMixdowns = ""
+    audioSamplerates = ""
+    audioTracks = ""
+    audioTrackDRCs = ""
+    audioCount = hash["AudioList"].size
+    
+    hash["AudioList"].each do |audioTrack|
+      audioCount = audioCount - 1
 
-    #Audio sample rate
-    commandString << " -R "
-    commandString << hash["Audio1Samplerate"]
-    if hash["Audio2Samplerate"]
-      commandString << "," << hash["Audio2Samplerate"]
-    end
-    if hash["Audio3Samplerate"]
-      commandString << "," << hash["Audio3Samplerate"]
-    end
-    if hash["Audio4Samplerate"]
-      commandString << "," << hash["Audio4Samplerate"]
-    end
-    
-    #Audio Mixdown
-    commandString << " -6 "
-    case hash["Audio1Mixdown"]
-    when /Mono/
-      commandString << "mono"
-    when /Stereo/
-      commandString << "stereo"
-    when /Dolby Surround/
-      commandString << "dpl1"
-    when /Dolby Pro Logic II/
-      commandString << "dpl2"
-    when /discrete/
-      commandString << "6ch"
-    when /Passthru/
-      commandString << "auto"
-    end
-    
-    if hash["Audio2Mixdown"]
-      case hash["Audio2Mixdown"]
-      when /Mono/
-        commandString << ",mono"
-      when /Stereo/
-        commandString << ",stereo"
-      when /Dolby Surround/
-        commandString << ",dpl1"
-      when /Dolby Pro Logic II/
-        commandString << ",dpl2"
-      when /discrete/
-        commandString << ",6ch"
-      when /Passthru/
-        commandString << ",auto"
+      #Bitrates
+      audioBitrates << audioTrack["AudioBitrate"]
+      
+      #Encoders
+      case audioTrack["AudioEncoder"]
+        when /AC3 Pass/
+          audioEncoders << "copy:ac3"
+        when /AC3/
+          audioEncoders << "ac3"
+        when /AAC/
+          audioEncoders << "faac"
+        when /Vorbis/
+          audioEncoders << "vorbis"
+        when /MP3/
+          audioEncoders << "lame"
       end
-    end
-    
-    if hash["Audio3Mixdown"]
-      case hash["Audio3Mixdown"]
+      
+      #Mixdowns
+      case audioTrack["AudioMixdown"]
       when /Mono/
-        commandString << ",mono"
+        audioMixdowns << "mono"
       when /Stereo/
-        commandString << ",stereo"
+        audioMixdowns << "stereo"
       when /Dolby Surround/
-        commandString << ",dpl1"
+        audioMixdowns << "dpl1"
       when /Dolby Pro Logic II/
-        commandString << ",dpl2"
+        audioMixdowns << "dpl2"
       when /discrete/
-        commandString << ",6ch"
+        audioMixdowns << "6ch"
       when /Passthru/
-        commandString << ",auto"
+        audioMixdowns << "auto"
       end
-    end
-    
-    if hash["Audio4Mixdown"]
-      case hash["Audio4Mixdown"]
-      when /Mono/
-        commandString << ",mono"
-      when /Stereo/
-        commandString << ",stereo"
-      when /Dolby Surround/
-        commandString << ",dpl1"
-      when /Dolby Pro Logic II/
-        commandString << ",dpl2"
-      when /discrete/
-        commandString << ",6ch"
-      when /Passthru/
-        commandString << ",auto"
+      
+      #Samplerates
+      audioSamplerates << audioTrack["AudioSamplerate"]
+      
+      #Tracks
+      audioTracks << audioTrack["AudioTrack"].to_s
+      
+      #DRC
+      audioTrackDRCs << audioTrack["AudioTrackDRCSlider"].to_s
+      
+      if audioCount > 0
+        audioBitrates << ","
+        audioEncoders << ","
+        audioMixdowns << ","
+        audioSamplerates << ","
+        audioTracks << ","
+        audioTrackDRCs << ","
       end
+      
     end
+    commandString << " -a " << audioTracks
+    commandString << " -E " << audioEncoders
+    commandString << " -B " << audioBitrates
+    commandString << " -6 " << audioMixdowns
+    commandString << " -R " << audioSamplerates
+    commandString << " -D " << audioTrackDRCs
     
     #Container
     commandString << " -f "
     case hash["FileFormat"]
     when /MP4/
       commandString << "mp4"
-    when /AVI/
-      commandString << "avi"
-    when /OGM/
-      commandString << "ogm"
     when /MKV/
       commandString << "mkv"
     end
@@ -1531,7 +1204,7 @@ class Display
     end
     
     #Subtitles
-    if hash["Subtitles"] != "None"
+    if hash["Subtitles"] && hash["Subtitles"] != "None"
       if hash["Subtitles"] == "Autoselect"
         commandString << " --subtitle-scan"
       else
@@ -1544,36 +1217,37 @@ class Display
     if hash["UsesPictureFilters"] == 1
       
       case hash["PictureDeinterlace"]
-      when 1
-        commandString << " --deinterlace=\\\"fast\\\""
       when 2
-        commandString << " --deinterlace=\\\slow\\\""
+        commandString << " --deinterlace=\\\"fast\\\""
       when 3
-        commandString << " --deinterlace=\\\"slower\\\""
+        commandString << " --deinterlace=\\\slow\\\""
       when 4
+        commandString << " --deinterlace=\\\"slower\\\""
+      when 5
         commandString << " --deinterlace=\\\"slowest\\\""
       end
       
       case hash["PictureDenoise"]
-      when 1
-        commandString << " --denoise=\\\"weak\\\""
       when 2
-        commandString << " --denoise=\\\"medium\\\""
+        commandString << " --denoise=\\\"weak\\\""
       when 3
+        commandString << " --denoise=\\\"medium\\\""
+      when 4
         commandString << " --denoise=\\\"strong\\\""
       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
+      if hash["PictureDetelecine"] == 2 then commandString << " --detelecine" end
+      if hash["PictureDeblock"] != 0 then commandString << " --deblock=" << hash["PictureDeblock"].to_s end
+      if hash["PictureDecomb"] == 2 then commandString << " --decomb" end
     end
     
     #Anamorphic
     if hash["PicturePAR"] == 1
-      commandString << " -p"
+      commandString << " --strict-anamorphic"
     elsif hash["PicturePAR"] == 2
-      commandString << " -P"
+      commandString << " --loose-anamorphic"
+    elsif hash["PicturePAR"] == 3
+      commandString << " --custom-anamorphic"
     end
     
     #Booleans
@@ -1610,4 +1284,4 @@ else
   # Direct the user to the help
   puts "\n\tUsage: manicure.rb [options]"
   puts "\tSee help with -h or --help"
-end
\ No newline at end of file
+end