OSDN Git Service

LinGui: don't remove srt subs when changing from mkv to mp4
[handbrake-jp/handbrake-jp-git.git] / scripts / manicure.rb
index 3e9467e..32ea30e 100755 (executable)
@@ -310,173 +310,82 @@ class Display
         commandString << " -r " << "23.976"
       elsif hash["VideoFramerate"] == "29.97 (NTSC Video)"
         commandString << " -r " << "29.97"
+      elsif hash["VideoFramerate"] == "25 (PAL Film/Video)"
+        commandString << " -r " << "25"
       else
         commandString << " -r " << hash["VideoFramerate"]
       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 /
+          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"]
@@ -524,8 +433,12 @@ class Display
     
     #Subtitles
     if hash["Subtitles"] != "None"
-      commandString << " -s "
-      commandString << hash["Subtitles"]
+      if hash["Subtitles"] == "Autoselect"
+        commandString << " --subtitle-scan"
+      else
+        commandString << " -s "
+        commandString << hash["Subtitles"]
+      end
     end
 
     #Video Filters
@@ -560,9 +473,9 @@ class Display
     
     #Anamorphic
     if hash["PicturePAR"] == 1
-      commandString << " -p"
+      commandString << " --strict-anamorphic"
     elsif hash["PicturePAR"] == 2
-      commandString << " -P"
+      commandString << " --loose-anamorphic"
     end
 
     #Booleans
@@ -643,173 +556,81 @@ class Display
         commandString << " -r " << "23.976"
       elsif hash["VideoFramerate"] == "29.97 (NTSC Video)"
         commandString << " -r " << "29.97"
+      elsif hash["VideoFramerate"] == "25 (PAL Film/Video)"
+        commandString << " -r " << "25"
       else
         commandString << " -r " << hash["VideoFramerate"]
       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"
-      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"]
-      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 /
+          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 "
@@ -858,8 +679,12 @@ class Display
     
     #Subtitles
     if hash["Subtitles"] != "None"
-      commandString << " -s "
-      commandString << hash["Subtitles"]
+      if hash["Subtitles"] == "Autoselect"
+        commandString << " --subtitle-scan"
+      else
+        commandString << " -s "
+        commandString << hash["Subtitles"]
+      end
     end
     
     #Video Filters
@@ -893,9 +718,9 @@ class Display
 
     #Anamorphic
     if hash["PicturePAR"] == 1
-      commandString << " -p"
+      commandString << " --strict-anamorphic"
     elsif hash["PicturePAR"] == 2
-      commandString << " -P"
+      commandString << " --loose-anamorphic"
     end
     
     #Booleans
@@ -923,16 +748,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    "
+      commandString << "    mux = " << "HB_MUX_MP4;\n    "
     when /AVI/
-      commandString << "mux = " << "HB_MUX_AVI;\n    "
+      commandString << "    mux = " << "HB_MUX_AVI;\n    "
     when /OGM/
-      commandString << "mux = " << "HB_MUX_OGM;\n    "
+      commandString << "    mux = " << "HB_MUX_OGM;\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
@@ -972,178 +801,110 @@ class Display
         commandString << "job->vrate_base = " << "1126125;\n    "
       elsif hash["VideoFramerate"] == "29.97 (NTSC Video)"
         commandString << "job->vrate_base = " << "900900;\n    "
+      elsif hash["VideoFramerate"] == "25 (PAL Film/Video)"
+        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"]
-      else
-        commandString << "," << "auto"
-      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"
+    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 /
+          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
@@ -1165,14 +926,21 @@ class Display
     
     #Subtitles
     if hash["Subtitles"] != "None"
-      commandString << "job->subtitle = "
-      commandString << ( hash["Subtitles"].to_i - 1).to_s << ";\n    "
+      if hash["Subtitles"] == "Autoselect"
+        commandString << "subtitle_scan = 1;\n    "
+      else
+        commandString << "job->subtitle = "
+        commandString << ( hash["Subtitles"].to_i - 1).to_s << ";\n    "
+      end
     end
     
     #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
@@ -1214,9 +982,9 @@ class Display
     
     #Anamorphic
     if hash["PicturePAR"] == 1
-      commandString << "pixelratio = 1;\n    "
+      commandString << "anamorphic_mode = 1;\n    "
     elsif hash["PicturePAR"] == 2
-      commandString << "pixelratio = 2;\n    "
+      commandString << "anamorphic_mode = 2;\n    "
     end
     
     #Booleans
@@ -1298,172 +1066,81 @@ class Display
         commandString << " -r " << "23.976"
       elsif hash["VideoFramerate"] == "29.97 (NTSC Video)"
         commandString << " -r " << "29.97"
+      elsif hash["VideoFramerate"] == "25 (PAL Film/Video)"
+        commandString << " -r " << "25"
       else
         commandString << " -r " << hash["VideoFramerate"]
       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"
-      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"]
-      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 /
+          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 "
@@ -1512,8 +1189,12 @@ class Display
     
     #Subtitles
     if hash["Subtitles"] != "None"
-      commandString << " -s "
-      commandString << hash["Subtitles"]
+      if hash["Subtitles"] == "Autoselect"
+        commandString << " --subtitle-scan"
+      else
+        commandString << " -s "
+        commandString << hash["Subtitles"]
+      end
     end
     
     #Video Filters
@@ -1547,9 +1228,9 @@ class Display
     
     #Anamorphic
     if hash["PicturePAR"] == 1
-      commandString << " -p"
+      commandString << " --strict-anamorphic"
     elsif hash["PicturePAR"] == 2
-      commandString << " -P"
+      commandString << " --loose-anamorphic"
     end
     
     #Booleans