<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -28,199 +28,211 @@ namespace FixMpeg
 		/// &lt;/summary&gt;
 		private void InitializeComponent()
 		{
-			this.label1 = new System.Windows.Forms.Label();
-			this.linkLabel1 = new System.Windows.Forms.LinkLabel();
-			this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
-			this.label2 = new System.Windows.Forms.Label();
-			this.listBox1 = new System.Windows.Forms.ListBox();
-			this.label3 = new System.Windows.Forms.Label();
-			this.comboBox1 = new System.Windows.Forms.ComboBox();
-			this.label4 = new System.Windows.Forms.Label();
-			this.groupBox1 = new System.Windows.Forms.GroupBox();
-			this.label5 = new System.Windows.Forms.Label();
-			this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
-			this.progressBar1 = new System.Windows.Forms.ProgressBar();
-			this.label6 = new System.Windows.Forms.Label();
-			this.linkLabel2 = new System.Windows.Forms.LinkLabel();
-			this.groupBox1.SuspendLayout();
-			((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
-			this.SuspendLayout();
-			// 
-			// label1
-			// 
-			this.label1.AutoSize = true;
-			this.label1.Location = new System.Drawing.Point(30, 28);
-			this.label1.Name = &quot;label1&quot;;
-			this.label1.Size = new System.Drawing.Size(87, 13);
-			this.label1.TabIndex = 0;
-			this.label1.Text = &quot;Output Directory:&quot;;
-			// 
-			// linkLabel1
-			// 
-			this.linkLabel1.AutoSize = true;
-			this.linkLabel1.Location = new System.Drawing.Point(123, 28);
-			this.linkLabel1.Name = &quot;linkLabel1&quot;;
-			this.linkLabel1.Size = new System.Drawing.Size(55, 13);
-			this.linkLabel1.TabIndex = 1;
-			this.linkLabel1.TabStop = true;
-			this.linkLabel1.Text = &quot;linkLabel1&quot;;
-			this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
-			// 
-			// folderBrowserDialog1
-			// 
-			this.folderBrowserDialog1.Description = &quot;Select an output directory&quot;;
-			// 
-			// label2
-			// 
-			this.label2.AutoSize = true;
-			this.label2.Font = new System.Drawing.Font(&quot;Microsoft Sans Serif&quot;, 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-			this.label2.Location = new System.Drawing.Point(12, 9);
-			this.label2.Name = &quot;label2&quot;;
-			this.label2.Size = new System.Drawing.Size(153, 13);
-			this.label2.TabIndex = 3;
-			this.label2.Text = &quot;Drag a file onto the form to fix it&quot;;
-			// 
-			// listBox1
-			// 
-			this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-						| System.Windows.Forms.AnchorStyles.Left)
-						| System.Windows.Forms.AnchorStyles.Right)));
-			this.listBox1.FormattingEnabled = true;
-			this.listBox1.Location = new System.Drawing.Point(12, 92);
-			this.listBox1.Name = &quot;listBox1&quot;;
-			this.listBox1.Size = new System.Drawing.Size(586, 121);
-			this.listBox1.TabIndex = 4;
-			// 
-			// label3
-			// 
-			this.label3.AutoSize = true;
-			this.label3.Location = new System.Drawing.Point(7, 42);
-			this.label3.Name = &quot;label3&quot;;
-			this.label3.Size = new System.Drawing.Size(40, 13);
-			this.label3.TabIndex = 6;
-			this.label3.Text = &quot;Bitrate:&quot;;
-			// 
-			// comboBox1
-			// 
-			this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-			this.comboBox1.FormattingEnabled = true;
-			this.comboBox1.Items.AddRange(new object[] {
+            this.label1 = new System.Windows.Forms.Label();
+            this.linkLabel1 = new System.Windows.Forms.LinkLabel();
+            this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
+            this.label2 = new System.Windows.Forms.Label();
+            this.listBox1 = new System.Windows.Forms.ListBox();
+            this.label3 = new System.Windows.Forms.Label();
+            this.comboBox1 = new System.Windows.Forms.ComboBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
+            this.progressBar1 = new System.Windows.Forms.ProgressBar();
+            this.label6 = new System.Windows.Forms.Label();
+            this.linkLabel2 = new System.Windows.Forms.LinkLabel();
+            this.uxForceTranscode = new System.Windows.Forms.CheckBox();
+            this.groupBox1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(30, 28);
+            this.label1.Name = &quot;label1&quot;;
+            this.label1.Size = new System.Drawing.Size(87, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = &quot;Output Directory:&quot;;
+            // 
+            // linkLabel1
+            // 
+            this.linkLabel1.AutoSize = true;
+            this.linkLabel1.Location = new System.Drawing.Point(123, 28);
+            this.linkLabel1.Name = &quot;linkLabel1&quot;;
+            this.linkLabel1.Size = new System.Drawing.Size(55, 13);
+            this.linkLabel1.TabIndex = 1;
+            this.linkLabel1.TabStop = true;
+            this.linkLabel1.Text = &quot;linkLabel1&quot;;
+            this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
+            // 
+            // folderBrowserDialog1
+            // 
+            this.folderBrowserDialog1.Description = &quot;Select an output directory&quot;;
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Font = new System.Drawing.Font(&quot;Microsoft Sans Serif&quot;, 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.label2.Location = new System.Drawing.Point(12, 9);
+            this.label2.Name = &quot;label2&quot;;
+            this.label2.Size = new System.Drawing.Size(153, 13);
+            this.label2.TabIndex = 3;
+            this.label2.Text = &quot;Drag a file onto the form to fix it&quot;;
+            // 
+            // listBox1
+            // 
+            this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.listBox1.FormattingEnabled = true;
+            this.listBox1.Location = new System.Drawing.Point(12, 105);
+            this.listBox1.Name = &quot;listBox1&quot;;
+            this.listBox1.Size = new System.Drawing.Size(586, 160);
+            this.listBox1.TabIndex = 4;
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(7, 42);
+            this.label3.Name = &quot;label3&quot;;
+            this.label3.Size = new System.Drawing.Size(40, 13);
+            this.label3.TabIndex = 6;
+            this.label3.Text = &quot;Bitrate:&quot;;
+            // 
+            // comboBox1
+            // 
+            this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.comboBox1.FormattingEnabled = true;
+            this.comboBox1.Items.AddRange(new object[] {
             &quot;MPEG2&quot;});
-			this.comboBox1.Location = new System.Drawing.Point(53, 13);
-			this.comboBox1.Name = &quot;comboBox1&quot;;
-			this.comboBox1.Size = new System.Drawing.Size(94, 21);
-			this.comboBox1.TabIndex = 8;
-			// 
-			// label4
-			// 
-			this.label4.AutoSize = true;
-			this.label4.Location = new System.Drawing.Point(6, 16);
-			this.label4.Name = &quot;label4&quot;;
-			this.label4.Size = new System.Drawing.Size(41, 13);
-			this.label4.TabIndex = 9;
-			this.label4.Text = &quot;Codec:&quot;;
-			// 
-			// groupBox1
-			// 
-			this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-			this.groupBox1.Controls.Add(this.label5);
-			this.groupBox1.Controls.Add(this.numericUpDown1);
-			this.groupBox1.Controls.Add(this.label4);
-			this.groupBox1.Controls.Add(this.comboBox1);
-			this.groupBox1.Controls.Add(this.label3);
-			this.groupBox1.Location = new System.Drawing.Point(438, 12);
-			this.groupBox1.Name = &quot;groupBox1&quot;;
-			this.groupBox1.Size = new System.Drawing.Size(160, 71);
-			this.groupBox1.TabIndex = 10;
-			this.groupBox1.TabStop = false;
-			this.groupBox1.Text = &quot;Transcode Options&quot;;
-			// 
-			// label5
-			// 
-			this.label5.AutoSize = true;
-			this.label5.Location = new System.Drawing.Point(102, 42);
-			this.label5.Name = &quot;label5&quot;;
-			this.label5.Size = new System.Drawing.Size(33, 13);
-			this.label5.TabIndex = 11;
-			this.label5.Text = &quot;Mbps&quot;;
-			// 
-			// numericUpDown1
-			// 
-			this.numericUpDown1.Location = new System.Drawing.Point(53, 40);
-			this.numericUpDown1.Maximum = new decimal(new int[] {
+            this.comboBox1.Location = new System.Drawing.Point(53, 13);
+            this.comboBox1.Name = &quot;comboBox1&quot;;
+            this.comboBox1.Size = new System.Drawing.Size(94, 21);
+            this.comboBox1.TabIndex = 8;
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(6, 16);
+            this.label4.Name = &quot;label4&quot;;
+            this.label4.Size = new System.Drawing.Size(41, 13);
+            this.label4.TabIndex = 9;
+            this.label4.Text = &quot;Codec:&quot;;
+            // 
+            // groupBox1
+            // 
+            this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.groupBox1.Controls.Add(this.uxForceTranscode);
+            this.groupBox1.Controls.Add(this.label5);
+            this.groupBox1.Controls.Add(this.numericUpDown1);
+            this.groupBox1.Controls.Add(this.label4);
+            this.groupBox1.Controls.Add(this.comboBox1);
+            this.groupBox1.Controls.Add(this.label3);
+            this.groupBox1.Location = new System.Drawing.Point(438, 9);
+            this.groupBox1.Name = &quot;groupBox1&quot;;
+            this.groupBox1.Size = new System.Drawing.Size(160, 87);
+            this.groupBox1.TabIndex = 10;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = &quot;Transcode Options&quot;;
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(102, 42);
+            this.label5.Name = &quot;label5&quot;;
+            this.label5.Size = new System.Drawing.Size(33, 13);
+            this.label5.TabIndex = 11;
+            this.label5.Text = &quot;Mbps&quot;;
+            // 
+            // numericUpDown1
+            // 
+            this.numericUpDown1.Location = new System.Drawing.Point(53, 40);
+            this.numericUpDown1.Maximum = new decimal(new int[] {
             25,
             0,
             0,
             0});
-			this.numericUpDown1.Minimum = new decimal(new int[] {
+            this.numericUpDown1.Minimum = new decimal(new int[] {
             4,
             0,
             0,
             0});
-			this.numericUpDown1.Name = &quot;numericUpDown1&quot;;
-			this.numericUpDown1.Size = new System.Drawing.Size(43, 20);
-			this.numericUpDown1.TabIndex = 10;
-			this.numericUpDown1.Value = new decimal(new int[] {
+            this.numericUpDown1.Name = &quot;numericUpDown1&quot;;
+            this.numericUpDown1.Size = new System.Drawing.Size(43, 20);
+            this.numericUpDown1.TabIndex = 10;
+            this.numericUpDown1.Value = new decimal(new int[] {
             4,
             0,
             0,
             0});
-			this.numericUpDown1.ValueChanged += new System.EventHandler(this.numericUpDown1_ValueChanged);
-			// 
-			// progressBar1
-			// 
-			this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-						| System.Windows.Forms.AnchorStyles.Right)));
-			this.progressBar1.Location = new System.Drawing.Point(15, 71);
-			this.progressBar1.Name = &quot;progressBar1&quot;;
-			this.progressBar1.Size = new System.Drawing.Size(417, 11);
-			this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
-			this.progressBar1.TabIndex = 11;
-			// 
-			// label6
-			// 
-			this.label6.AutoSize = true;
-			this.label6.Location = new System.Drawing.Point(12, 52);
-			this.label6.Name = &quot;label6&quot;;
-			this.label6.Size = new System.Drawing.Size(105, 13);
-			this.label6.TabIndex = 12;
-			this.label6.Text = &quot;Temporary Directory:&quot;;
-			// 
-			// linkLabel2
-			// 
-			this.linkLabel2.AutoSize = true;
-			this.linkLabel2.Location = new System.Drawing.Point(123, 52);
-			this.linkLabel2.Name = &quot;linkLabel2&quot;;
-			this.linkLabel2.Size = new System.Drawing.Size(55, 13);
-			this.linkLabel2.TabIndex = 13;
-			this.linkLabel2.TabStop = true;
-			this.linkLabel2.Text = &quot;linkLabel2&quot;;
-			this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel2_LinkClicked);
-			// 
-			// Form1
-			// 
-			this.AllowDrop = true;
-			this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-			this.ClientSize = new System.Drawing.Size(610, 217);
-			this.Controls.Add(this.linkLabel2);
-			this.Controls.Add(this.label6);
-			this.Controls.Add(this.progressBar1);
-			this.Controls.Add(this.groupBox1);
-			this.Controls.Add(this.listBox1);
-			this.Controls.Add(this.label2);
-			this.Controls.Add(this.linkLabel1);
-			this.Controls.Add(this.label1);
-			this.Name = &quot;Form1&quot;;
-			this.Text = &quot;Form1&quot;;
-			this.Load += new System.EventHandler(this.Form1_Load);
-			this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);
-			this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);
-			this.groupBox1.ResumeLayout(false);
-			this.groupBox1.PerformLayout();
-			((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
-			this.ResumeLayout(false);
-			this.PerformLayout();
+            this.numericUpDown1.ValueChanged += new System.EventHandler(this.numericUpDown1_ValueChanged);
+            // 
+            // progressBar1
+            // 
+            this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.progressBar1.Location = new System.Drawing.Point(15, 85);
+            this.progressBar1.Name = &quot;progressBar1&quot;;
+            this.progressBar1.Size = new System.Drawing.Size(417, 11);
+            this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
+            this.progressBar1.TabIndex = 11;
+            // 
+            // label6
+            // 
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(12, 52);
+            this.label6.Name = &quot;label6&quot;;
+            this.label6.Size = new System.Drawing.Size(105, 13);
+            this.label6.TabIndex = 12;
+            this.label6.Text = &quot;Temporary Directory:&quot;;
+            // 
+            // linkLabel2
+            // 
+            this.linkLabel2.AutoSize = true;
+            this.linkLabel2.Location = new System.Drawing.Point(123, 52);
+            this.linkLabel2.Name = &quot;linkLabel2&quot;;
+            this.linkLabel2.Size = new System.Drawing.Size(55, 13);
+            this.linkLabel2.TabIndex = 13;
+            this.linkLabel2.TabStop = true;
+            this.linkLabel2.Text = &quot;linkLabel2&quot;;
+            this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel2_LinkClicked);
+            // 
+            // uxForceTranscode
+            // 
+            this.uxForceTranscode.AutoSize = true;
+            this.uxForceTranscode.Location = new System.Drawing.Point(10, 66);
+            this.uxForceTranscode.Name = &quot;uxForceTranscode&quot;;
+            this.uxForceTranscode.Size = new System.Drawing.Size(107, 17);
+            this.uxForceTranscode.TabIndex = 12;
+            this.uxForceTranscode.Text = &quot;Force Transcode&quot;;
+            this.uxForceTranscode.UseVisualStyleBackColor = true;
+            // 
+            // Form1
+            // 
+            this.AllowDrop = true;
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(610, 274);
+            this.Controls.Add(this.linkLabel2);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.progressBar1);
+            this.Controls.Add(this.groupBox1);
+            this.Controls.Add(this.listBox1);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.linkLabel1);
+            this.Controls.Add(this.label1);
+            this.Name = &quot;Form1&quot;;
+            this.Text = &quot;Form1&quot;;
+            this.Load += new System.EventHandler(this.Form1_Load);
+            this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);
+            this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
 
 		}
 
@@ -240,6 +252,7 @@ namespace FixMpeg
 		private System.Windows.Forms.ProgressBar progressBar1;
 		private System.Windows.Forms.Label label6;
 		private System.Windows.Forms.LinkLabel linkLabel2;
+        private System.Windows.Forms.CheckBox uxForceTranscode;
 	}
 }
 </diff>
      <filename>FixMpeg/Form1.Designer.cs</filename>
    </modified>
    <modified>
      <diff>@@ -1,261 +1,261 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.IO;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Windows.Forms;
-
-namespace FixMpeg
-{
-	public partial class Form1 : Form
-	{
-		public Form1()
-		{
-			InitializeComponent();
-		}
-
-		private string ApplicationName
-		{
-			get
-			{
-				FileInfo fi = new FileInfo(Application.ExecutablePath);
-				return (Path.GetFileNameWithoutExtension(fi.Name));
-			}
-		}
-
-		private void ShowMessage(string message)
-		{
-			listBox1.Items.Add(message);
-			listBox1.SelectedIndex = listBox1.Items.Count - 1;
-			listBox1.Refresh();
-			Application.DoEvents();
-		}
-
-		private void CheckFile(string path)
-		{
-			try
-			{
-				FileInfo fi = new FileInfo(path);
-				ShowMessage(String.Format(&quot;Analyzing {0}...&quot;, fi.Name));
-				string outputPath = Path.Combine(Properties.Settings.Default.OutputDirectory, Path.GetFileNameWithoutExtension(fi.Name)) + &quot;.mpg&quot;;
-				if (File.Exists(outputPath))
-				{
-					ShowMessage(String.Format(&quot;Error: {0} already exists in output directory, not processing this file.&quot;, fi.Name));
-					return;
-				}
-				VideoProcessor vp = new VideoProcessor(path);
-
-				if (vp.VideoFormat == String.Empty)
-				{
-					ShowMessage(String.Format(&quot;{0} is not a video file, skipping&quot;, path));
-					return;
-				}
-				else if (vp.AudioFormat == String.Empty)
-				{
-					ShowMessage(String.Format(&quot;{0} appears to be a video file with no audio, skipping&quot;, path));
-					return;
-				}
-				ShowMessage(String.Format(&quot;{0} is a {1} file at {2}fps and {3}x{4}; audio is {5}, {6} at {7}KHz&quot;, fi.Name, vp.VideoFormat, vp.FrameRate, vp.Width, vp.Height, vp.AudioFormat, vp.AudioChannels, vp.AudioRate));
-
-				bool audioOK = false;
-				bool videoOK = false;
-
-				if (vp.AudioFormat == &quot;mp2&quot; &amp;&amp; vp.AudioRate == 48000 &amp;&amp; (vp.AudioChannels == &quot;mono&quot; || vp.AudioChannels == &quot;stereo&quot;))
-					audioOK = true;
-				if (vp.Height &lt;= 486 &amp;&amp; vp.Width &lt;= 720 &amp;&amp; vp.FrameRate == 29.97 &amp;&amp; vp.VideoFormat == &quot;mpeg2video&quot;)
-					videoOK = true;
-
-				if (audioOK &amp;&amp; videoOK)
-				{
-					ShowMessage(String.Format(&quot;{0} looks like a valid file, copying it to output directory...&quot;, fi.Name));
-					File.Copy(path, outputPath);
-					return;
-				}
-
-				ShowMessage(String.Format(&quot;Transcoding {0}...&quot;, fi.Name));
-				vp.Progress += new VideoProcessor.ProgressCallback(ffmpeg_Progress);
-				vp.Transcode(videoOK ? VideoProcessor.OutputVideoFormat.copy : VideoProcessor.OutputVideoFormat.mpeg2,
-					Convert.ToInt32(numericUpDown1.Value) * 1000,
-					audioOK ? VideoProcessor.OutputAudioFormat.copy : VideoProcessor.OutputAudioFormat.mp2,
-					outputPath);
-				ShowMessage(String.Format(&quot;Finished processing {0}.&quot;, fi.Name));
-			}
-			catch (Exception ex)
-			{
-				ShowMessage(String.Format(&quot;Error: {0}: {1}&quot;, path, ex.Message));
-			}
-			progressBar1.Value = 0;
-		}
-
-		private void ScanDVD(string path)
-		{
-			int ifoIdx = 1;
-			List&lt;IFOParse&gt; ifos = new List&lt;IFOParse&gt;();
-			try
-			{
-				while (true)
-				{
-					FileInfo fi = new FileInfo(path + Path.DirectorySeparatorChar + &quot;VTS_&quot; + ifoIdx.ToString(&quot;00&quot;) + &quot;_0.IFO&quot;);
-					if (fi.Exists == false)
-						break;
-					ifoIdx++;
-					string name = fi.Name.ToUpper();
-					int title = Convert.ToInt32(name.Replace(&quot;VTS_&quot;, &quot;&quot;).Replace(&quot;_0.IFO&quot;, &quot;&quot;));
-					IFOParse ifo = new IFOParse(fi.FullName);
-					ifos.Add(ifo);
-				}
-				DVDSelection dvd = new DVDSelection(ifos);
-				if (dvd.ShowDialog() == DialogResult.OK)
-				{
-					for (int i = 0; i &lt; dvd.SelectedNames.Count; i++)
-					{
-						IFOParse.ProgramChain pgc = dvd.SelectedPGCs[i];
-						string outputName = dvd.SelectedNames[i];
-
-						VOBRead vobReader = new VOBRead();
-						ShowMessage(&quot;Reading from DVD...&quot;);
-						vobReader.Progress += new VideoProcessor.ProgressCallback(ffmpeg_Progress);
-						VOBRead.ElementaryStreams streams = vobReader.ProcessVOB(pgc, Properties.Settings.Default.TempDirectory);
-
-						progressBar1.Value = 0;
-						ShowMessage(&quot;Remultiplexing DVD files...&quot;);
-						VideoProcessor vp = new VideoProcessor(streams.AudioFile);
-						vp.Progress += new VideoProcessor.ProgressCallback(ffmpeg_Progress);
-						vp.RemuxDVD(streams, Path.Combine(Properties.Settings.Default.OutputDirectory, outputName + &quot;.mpg&quot;));
-
-						// clean up
-						progressBar1.Value = 0;
-						File.Delete(streams.VideoFile);
-						File.Delete(streams.AudioFile);
-						ShowMessage(&quot;Done.&quot;);
-					}
-				}
-			}
-			catch (Exception ex)
-			{
-				MessageBox.Show(ex.Message);
-			}
-		}
-
-		void ffmpeg_Progress(int current, int total)
-		{
-			Application.DoEvents();
-			if(current &gt; total)
-				return;
-			if (progressBar1.Maximum != total)
-				progressBar1.Maximum = total;
-			progressBar1.Value = current;
-		}
-
-		// recursively scan folders for files to process
-		private void ScanFolder(string path)
-		{
-			Application.DoEvents();
-			if (File.Exists(Path.Combine(path, &quot;VIDEO_TS.IFO&quot;)))
-			{
-				ScanDVD(path);
-				return;
-			}
-			if (Directory.Exists(path) == false)
-			{
-				if (File.Exists(path))
-					CheckFile(path);
-				return;
-			}
-			string[] dirs = Directory.GetDirectories(path);
-			foreach (string dir in dirs)
-			{
-				if (new DirectoryInfo(dir).Name.ToLower() == &quot;video_ts&quot; || File.Exists(Path.Combine(dir, &quot;VIDEO_TS.IFO&quot;)))
-					ScanDVD(dir);
-				else
-					ScanFolder(dir);
-			}
-			string[] files = Directory.GetFiles(path);
-			foreach (string file in files)
-			{
-				CheckFile(file);
-			}
-		}
-
-		private void Form1_DragEnter(object sender, DragEventArgs e)
-		{
-			if (e.Data.GetDataPresent(DataFormats.FileDrop))
-			{
-				e.Effect = DragDropEffects.Copy;
-			}
-			else
-				e.Effect = DragDropEffects.None;
-
-		}
-
-		private void Form1_DragDrop(object sender, DragEventArgs e)
-		{
-			Cursor = Cursors.WaitCursor;
-			foreach (string filename in (string[])e.Data.GetData(DataFormats.FileDrop))
-			{
-				ScanFolder(filename);
-			}
-			Cursor = Cursors.Default;
-		}
-
-		private void Form1_Load(object sender, EventArgs e)
-		{
-			this.Text = ApplicationName;
-			if (Properties.Settings.Default.OutputDirectory == null || Properties.Settings.Default.OutputDirectory.Length == 0)
-			{
-				Properties.Settings.Default.OutputDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
-				Properties.Settings.Default.Save();
-			}
-			if (Properties.Settings.Default.TempDirectory == null || Properties.Settings.Default.TempDirectory.Length == 0)
-			{
-				if (Utilities.IsRunningOnMono)
-					Properties.Settings.Default.TempDirectory = &quot;/tmp&quot;;
-				else
-					Properties.Settings.Default.TempDirectory = Environment.ExpandEnvironmentVariables(&quot;%TEMP%&quot;);
-				Properties.Settings.Default.Save();
-			}
-			if (Properties.Settings.Default[&quot;BitRate&quot;] == null || Properties.Settings.Default.BitRate == 0)
-			{
-				Properties.Settings.Default.BitRate = 4;
-				Properties.Settings.Default.Save();
-			}
-			linkLabel1.Text = Properties.Settings.Default.OutputDirectory;
-			linkLabel2.Text = Properties.Settings.Default.TempDirectory;
-			numericUpDown1.Value = Properties.Settings.Default.BitRate;
-			comboBox1.SelectedIndex = 0;
-		}
-
-		private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
-		{
-			folderBrowserDialog1.Description = &quot;Select an output directory&quot;;
-			folderBrowserDialog1.SelectedPath = Properties.Settings.Default.OutputDirectory;
-			if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
-			{
-				Properties.Settings.Default.OutputDirectory = folderBrowserDialog1.SelectedPath;
-				linkLabel1.Text = Properties.Settings.Default.OutputDirectory;
-				Properties.Settings.Default.Save();
-			}
-		}
-
-		private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
-		{
-			folderBrowserDialog1.Description = &quot;Select a temporary directory&quot;;
-			folderBrowserDialog1.SelectedPath = Properties.Settings.Default.TempDirectory;
-			if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
-			{
-				Properties.Settings.Default.TempDirectory = folderBrowserDialog1.SelectedPath;
-				linkLabel2.Text = Properties.Settings.Default.TempDirectory;
-				Properties.Settings.Default.Save();
-			}
-		}
-
-		private void numericUpDown1_ValueChanged(object sender, EventArgs e)
-		{
-			Properties.Settings.Default.BitRate = (int)numericUpDown1.Value;
-			Properties.Settings.Default.Save();
-		}
-	}
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Windows.Forms;
+
+namespace FixMpeg
+{
+	public partial class Form1 : Form
+	{
+		public Form1()
+		{
+			InitializeComponent();
+		}
+
+		private string ApplicationName
+		{
+			get
+			{
+				FileInfo fi = new FileInfo(Application.ExecutablePath);
+				return (Path.GetFileNameWithoutExtension(fi.Name));
+			}
+		}
+
+		private void ShowMessage(string message)
+		{
+			listBox1.Items.Add(message);
+			listBox1.SelectedIndex = listBox1.Items.Count - 1;
+			listBox1.Refresh();
+			Application.DoEvents();
+		}
+
+		private void CheckFile(string path)
+		{
+			try
+			{
+				FileInfo fi = new FileInfo(path);
+				ShowMessage(String.Format(&quot;Analyzing {0}...&quot;, fi.Name));
+				string outputPath = Path.Combine(Properties.Settings.Default.OutputDirectory, Path.GetFileNameWithoutExtension(fi.Name)) + &quot;.mpg&quot;;
+				if (File.Exists(outputPath))
+				{
+					ShowMessage(String.Format(&quot;Error: {0} already exists in output directory, not processing this file.&quot;, fi.Name));
+					return;
+				}
+				VideoProcessor vp = new VideoProcessor(path);
+
+				if (vp.VideoFormat == String.Empty)
+				{
+					ShowMessage(String.Format(&quot;{0} is not a video file, skipping&quot;, path));
+					return;
+				}
+				else if (vp.AudioFormat == String.Empty)
+				{
+					ShowMessage(String.Format(&quot;{0} appears to be a video file with no audio, skipping&quot;, path));
+					return;
+				}
+				ShowMessage(String.Format(&quot;{0} is a {1} file at {2}fps and {3}x{4}; audio is {5}, {6} at {7}KHz&quot;, fi.Name, vp.VideoFormat, vp.FrameRate, vp.Width, vp.Height, vp.AudioFormat, vp.AudioChannels, vp.AudioRate));
+
+				bool audioOK = false;
+				bool videoOK = false;
+
+				if (vp.AudioFormat == &quot;mp2&quot; &amp;&amp; vp.AudioRate == 48000 &amp;&amp; (vp.AudioChannels == &quot;mono&quot; || vp.AudioChannels == &quot;stereo&quot;))
+					audioOK = true;
+				if (vp.Height &lt;= 486 &amp;&amp; vp.Width &lt;= 720 &amp;&amp; vp.FrameRate == 29.97 &amp;&amp; vp.VideoFormat == &quot;mpeg2video&quot;)
+					videoOK = true;
+
+				if (audioOK &amp;&amp; videoOK)
+				{
+					ShowMessage(String.Format(&quot;{0} looks like a valid file, copying it to output directory...&quot;, fi.Name));
+					File.Copy(path, outputPath);
+					return;
+				}
+
+				ShowMessage(String.Format(&quot;Transcoding {0}...&quot;, fi.Name));
+				vp.Progress += new VideoProcessor.ProgressCallback(ffmpeg_Progress);
+				vp.Transcode((videoOK &amp;&amp; !uxForceTranscode.Checked) ? VideoProcessor.OutputVideoFormat.copy : VideoProcessor.OutputVideoFormat.mpeg2,
+					Convert.ToInt32(numericUpDown1.Value) * 1000,
+					(audioOK &amp;&amp; !uxForceTranscode.Checked) ? VideoProcessor.OutputAudioFormat.copy : VideoProcessor.OutputAudioFormat.mp2,
+					outputPath);
+				ShowMessage(String.Format(&quot;Finished processing {0}.&quot;, fi.Name));
+			}
+			catch (Exception ex)
+			{
+				ShowMessage(String.Format(&quot;Error: {0}: {1}&quot;, path, ex.Message));
+			}
+			progressBar1.Value = 0;
+		}
+
+		private void ScanDVD(string path)
+		{
+			int ifoIdx = 1;
+			List&lt;IFOParse&gt; ifos = new List&lt;IFOParse&gt;();
+			try
+			{
+				while (true)
+				{
+					FileInfo fi = new FileInfo(path + Path.DirectorySeparatorChar + &quot;VTS_&quot; + ifoIdx.ToString(&quot;00&quot;) + &quot;_0.IFO&quot;);
+					if (fi.Exists == false)
+						break;
+					ifoIdx++;
+					string name = fi.Name.ToUpper();
+					int title = Convert.ToInt32(name.Replace(&quot;VTS_&quot;, &quot;&quot;).Replace(&quot;_0.IFO&quot;, &quot;&quot;));
+					IFOParse ifo = new IFOParse(fi.FullName);
+					ifos.Add(ifo);
+				}
+				DVDSelection dvd = new DVDSelection(ifos);
+				if (dvd.ShowDialog() == DialogResult.OK)
+				{
+					for (int i = 0; i &lt; dvd.SelectedNames.Count; i++)
+					{
+						IFOParse.ProgramChain pgc = dvd.SelectedPGCs[i];
+						string outputName = dvd.SelectedNames[i];
+
+						VOBRead vobReader = new VOBRead();
+						ShowMessage(&quot;Reading from DVD...&quot;);
+						vobReader.Progress += new VideoProcessor.ProgressCallback(ffmpeg_Progress);
+						VOBRead.ElementaryStreams streams = vobReader.ProcessVOB(pgc, Properties.Settings.Default.TempDirectory);
+
+						progressBar1.Value = 0;
+						ShowMessage(&quot;Remultiplexing DVD files...&quot;);
+						VideoProcessor vp = new VideoProcessor(streams.AudioFile);
+						vp.Progress += new VideoProcessor.ProgressCallback(ffmpeg_Progress);
+						vp.RemuxDVD(streams, Path.Combine(Properties.Settings.Default.OutputDirectory, outputName + &quot;.mpg&quot;));
+
+						// clean up
+						progressBar1.Value = 0;
+						File.Delete(streams.VideoFile);
+						File.Delete(streams.AudioFile);
+						ShowMessage(&quot;Done.&quot;);
+					}
+				}
+			}
+			catch (Exception ex)
+			{
+				MessageBox.Show(ex.Message);
+			}
+		}
+
+		void ffmpeg_Progress(int current, int total)
+		{
+			Application.DoEvents();
+			if(current &gt; total)
+				return;
+			if (progressBar1.Maximum != total)
+				progressBar1.Maximum = total;
+			progressBar1.Value = current;
+		}
+
+		// recursively scan folders for files to process
+		private void ScanFolder(string path)
+		{
+			Application.DoEvents();
+			if (File.Exists(Path.Combine(path, &quot;VIDEO_TS.IFO&quot;)))
+			{
+				ScanDVD(path);
+				return;
+			}
+			if (Directory.Exists(path) == false)
+			{
+				if (File.Exists(path))
+					CheckFile(path);
+				return;
+			}
+			string[] dirs = Directory.GetDirectories(path);
+			foreach (string dir in dirs)
+			{
+				if (new DirectoryInfo(dir).Name.ToLower() == &quot;video_ts&quot; || File.Exists(Path.Combine(dir, &quot;VIDEO_TS.IFO&quot;)))
+					ScanDVD(dir);
+				else
+					ScanFolder(dir);
+			}
+			string[] files = Directory.GetFiles(path);
+			foreach (string file in files)
+			{
+				CheckFile(file);
+			}
+		}
+
+		private void Form1_DragEnter(object sender, DragEventArgs e)
+		{
+			if (e.Data.GetDataPresent(DataFormats.FileDrop))
+			{
+				e.Effect = DragDropEffects.Copy;
+			}
+			else
+				e.Effect = DragDropEffects.None;
+
+		}
+
+		private void Form1_DragDrop(object sender, DragEventArgs e)
+		{
+			Cursor = Cursors.WaitCursor;
+			foreach (string filename in (string[])e.Data.GetData(DataFormats.FileDrop))
+			{
+				ScanFolder(filename);
+			}
+			Cursor = Cursors.Default;
+		}
+
+		private void Form1_Load(object sender, EventArgs e)
+		{
+			this.Text = ApplicationName;
+			if (Properties.Settings.Default.OutputDirectory == null || Properties.Settings.Default.OutputDirectory.Length == 0)
+			{
+				Properties.Settings.Default.OutputDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
+				Properties.Settings.Default.Save();
+			}
+			if (Properties.Settings.Default.TempDirectory == null || Properties.Settings.Default.TempDirectory.Length == 0)
+			{
+				if (Utilities.IsRunningOnMono)
+					Properties.Settings.Default.TempDirectory = &quot;/tmp&quot;;
+				else
+					Properties.Settings.Default.TempDirectory = Environment.ExpandEnvironmentVariables(&quot;%TEMP%&quot;);
+				Properties.Settings.Default.Save();
+			}
+			if (Properties.Settings.Default[&quot;BitRate&quot;] == null || Properties.Settings.Default.BitRate == 0)
+			{
+				Properties.Settings.Default.BitRate = 4;
+				Properties.Settings.Default.Save();
+			}
+			linkLabel1.Text = Properties.Settings.Default.OutputDirectory;
+			linkLabel2.Text = Properties.Settings.Default.TempDirectory;
+			numericUpDown1.Value = Properties.Settings.Default.BitRate;
+			comboBox1.SelectedIndex = 0;
+		}
+
+		private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+		{
+			folderBrowserDialog1.Description = &quot;Select an output directory&quot;;
+			folderBrowserDialog1.SelectedPath = Properties.Settings.Default.OutputDirectory;
+			if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
+			{
+				Properties.Settings.Default.OutputDirectory = folderBrowserDialog1.SelectedPath;
+				linkLabel1.Text = Properties.Settings.Default.OutputDirectory;
+				Properties.Settings.Default.Save();
+			}
+		}
+
+		private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+		{
+			folderBrowserDialog1.Description = &quot;Select a temporary directory&quot;;
+			folderBrowserDialog1.SelectedPath = Properties.Settings.Default.TempDirectory;
+			if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
+			{
+				Properties.Settings.Default.TempDirectory = folderBrowserDialog1.SelectedPath;
+				linkLabel2.Text = Properties.Settings.Default.TempDirectory;
+				Properties.Settings.Default.Save();
+			}
+		}
+
+		private void numericUpDown1_ValueChanged(object sender, EventArgs e)
+		{
+			Properties.Settings.Default.BitRate = (int)numericUpDown1.Value;
+			Properties.Settings.Default.Save();
+		}
+	}
 }
\ No newline at end of file</diff>
      <filename>FixMpeg/Form1.cs</filename>
    </modified>
    <modified>
      <diff>@@ -1,123 +1,123 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;root&gt;
-  &lt;!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers &amp; schema ...
-    &lt;resheader name=&quot;resmimetype&quot;&gt;text/microsoft-resx&lt;/resheader&gt;
-    &lt;resheader name=&quot;version&quot;&gt;2.0&lt;/resheader&gt;
-    &lt;resheader name=&quot;reader&quot;&gt;System.Resources.ResXResourceReader, System.Windows.Forms, ...&lt;/resheader&gt;
-    &lt;resheader name=&quot;writer&quot;&gt;System.Resources.ResXResourceWriter, System.Windows.Forms, ...&lt;/resheader&gt;
-    &lt;data name=&quot;Name1&quot;&gt;&lt;value&gt;this is my long string&lt;/value&gt;&lt;comment&gt;this is a comment&lt;/comment&gt;&lt;/data&gt;
-    &lt;data name=&quot;Color1&quot; type=&quot;System.Drawing.Color, System.Drawing&quot;&gt;Blue&lt;/data&gt;
-    &lt;data name=&quot;Bitmap1&quot; mimetype=&quot;application/x-microsoft.net.object.binary.base64&quot;&gt;
-        &lt;value&gt;[base64 mime encoded serialized .NET Framework object]&lt;/value&gt;
-    &lt;/data&gt;
-    &lt;data name=&quot;Icon1&quot; type=&quot;System.Drawing.Icon, System.Drawing&quot; mimetype=&quot;application/x-microsoft.net.object.bytearray.base64&quot;&gt;
-        &lt;value&gt;[base64 mime encoded string representing a byte array form of the .NET Framework object]&lt;/value&gt;
-        &lt;comment&gt;This is a comment&lt;/comment&gt;
-    &lt;/data&gt;
-                
-    There are any number of &quot;resheader&quot; rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    --&gt;
-  &lt;xsd:schema id=&quot;root&quot; xmlns=&quot;&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:msdata=&quot;urn:schemas-microsoft-com:xml-msdata&quot;&gt;
-    &lt;xsd:import namespace=&quot;http://www.w3.org/XML/1998/namespace&quot; /&gt;
-    &lt;xsd:element name=&quot;root&quot; msdata:IsDataSet=&quot;true&quot;&gt;
-      &lt;xsd:complexType&gt;
-        &lt;xsd:choice maxOccurs=&quot;unbounded&quot;&gt;
-          &lt;xsd:element name=&quot;metadata&quot;&gt;
-            &lt;xsd:complexType&gt;
-              &lt;xsd:sequence&gt;
-                &lt;xsd:element name=&quot;value&quot; type=&quot;xsd:string&quot; minOccurs=&quot;0&quot; /&gt;
-              &lt;/xsd:sequence&gt;
-              &lt;xsd:attribute name=&quot;name&quot; use=&quot;required&quot; type=&quot;xsd:string&quot; /&gt;
-              &lt;xsd:attribute name=&quot;type&quot; type=&quot;xsd:string&quot; /&gt;
-              &lt;xsd:attribute name=&quot;mimetype&quot; type=&quot;xsd:string&quot; /&gt;
-              &lt;xsd:attribute ref=&quot;xml:space&quot; /&gt;
-            &lt;/xsd:complexType&gt;
-          &lt;/xsd:element&gt;
-          &lt;xsd:element name=&quot;assembly&quot;&gt;
-            &lt;xsd:complexType&gt;
-              &lt;xsd:attribute name=&quot;alias&quot; type=&quot;xsd:string&quot; /&gt;
-              &lt;xsd:attribute name=&quot;name&quot; type=&quot;xsd:string&quot; /&gt;
-            &lt;/xsd:complexType&gt;
-          &lt;/xsd:element&gt;
-          &lt;xsd:element name=&quot;data&quot;&gt;
-            &lt;xsd:complexType&gt;
-              &lt;xsd:sequence&gt;
-                &lt;xsd:element name=&quot;value&quot; type=&quot;xsd:string&quot; minOccurs=&quot;0&quot; msdata:Ordinal=&quot;1&quot; /&gt;
-                &lt;xsd:element name=&quot;comment&quot; type=&quot;xsd:string&quot; minOccurs=&quot;0&quot; msdata:Ordinal=&quot;2&quot; /&gt;
-              &lt;/xsd:sequence&gt;
-              &lt;xsd:attribute name=&quot;name&quot; type=&quot;xsd:string&quot; use=&quot;required&quot; msdata:Ordinal=&quot;1&quot; /&gt;
-              &lt;xsd:attribute name=&quot;type&quot; type=&quot;xsd:string&quot; msdata:Ordinal=&quot;3&quot; /&gt;
-              &lt;xsd:attribute name=&quot;mimetype&quot; type=&quot;xsd:string&quot; msdata:Ordinal=&quot;4&quot; /&gt;
-              &lt;xsd:attribute ref=&quot;xml:space&quot; /&gt;
-            &lt;/xsd:complexType&gt;
-          &lt;/xsd:element&gt;
-          &lt;xsd:element name=&quot;resheader&quot;&gt;
-            &lt;xsd:complexType&gt;
-              &lt;xsd:sequence&gt;
-                &lt;xsd:element name=&quot;value&quot; type=&quot;xsd:string&quot; minOccurs=&quot;0&quot; msdata:Ordinal=&quot;1&quot; /&gt;
-              &lt;/xsd:sequence&gt;
-              &lt;xsd:attribute name=&quot;name&quot; type=&quot;xsd:string&quot; use=&quot;required&quot; /&gt;
-            &lt;/xsd:complexType&gt;
-          &lt;/xsd:element&gt;
-        &lt;/xsd:choice&gt;
-      &lt;/xsd:complexType&gt;
-    &lt;/xsd:element&gt;
-  &lt;/xsd:schema&gt;
-  &lt;resheader name=&quot;resmimetype&quot;&gt;
-    &lt;value&gt;text/microsoft-resx&lt;/value&gt;
-  &lt;/resheader&gt;
-  &lt;resheader name=&quot;version&quot;&gt;
-    &lt;value&gt;2.0&lt;/value&gt;
-  &lt;/resheader&gt;
-  &lt;resheader name=&quot;reader&quot;&gt;
-    &lt;value&gt;System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/value&gt;
-  &lt;/resheader&gt;
-  &lt;resheader name=&quot;writer&quot;&gt;
-    &lt;value&gt;System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/value&gt;
-  &lt;/resheader&gt;
-  &lt;metadata name=&quot;folderBrowserDialog1.TrayLocation&quot; type=&quot;System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&quot;&gt;
-    &lt;value&gt;17, 17&lt;/value&gt;
-  &lt;/metadata&gt;
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;root&gt;
+  &lt;!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers &amp; schema ...
+    &lt;resheader name=&quot;resmimetype&quot;&gt;text/microsoft-resx&lt;/resheader&gt;
+    &lt;resheader name=&quot;version&quot;&gt;2.0&lt;/resheader&gt;
+    &lt;resheader name=&quot;reader&quot;&gt;System.Resources.ResXResourceReader, System.Windows.Forms, ...&lt;/resheader&gt;
+    &lt;resheader name=&quot;writer&quot;&gt;System.Resources.ResXResourceWriter, System.Windows.Forms, ...&lt;/resheader&gt;
+    &lt;data name=&quot;Name1&quot;&gt;&lt;value&gt;this is my long string&lt;/value&gt;&lt;comment&gt;this is a comment&lt;/comment&gt;&lt;/data&gt;
+    &lt;data name=&quot;Color1&quot; type=&quot;System.Drawing.Color, System.Drawing&quot;&gt;Blue&lt;/data&gt;
+    &lt;data name=&quot;Bitmap1&quot; mimetype=&quot;application/x-microsoft.net.object.binary.base64&quot;&gt;
+        &lt;value&gt;[base64 mime encoded serialized .NET Framework object]&lt;/value&gt;
+    &lt;/data&gt;
+    &lt;data name=&quot;Icon1&quot; type=&quot;System.Drawing.Icon, System.Drawing&quot; mimetype=&quot;application/x-microsoft.net.object.bytearray.base64&quot;&gt;
+        &lt;value&gt;[base64 mime encoded string representing a byte array form of the .NET Framework object]&lt;/value&gt;
+        &lt;comment&gt;This is a comment&lt;/comment&gt;
+    &lt;/data&gt;
+                
+    There are any number of &quot;resheader&quot; rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    --&gt;
+  &lt;xsd:schema id=&quot;root&quot; xmlns=&quot;&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:msdata=&quot;urn:schemas-microsoft-com:xml-msdata&quot;&gt;
+    &lt;xsd:import namespace=&quot;http://www.w3.org/XML/1998/namespace&quot; /&gt;
+    &lt;xsd:element name=&quot;root&quot; msdata:IsDataSet=&quot;true&quot;&gt;
+      &lt;xsd:complexType&gt;
+        &lt;xsd:choice maxOccurs=&quot;unbounded&quot;&gt;
+          &lt;xsd:element name=&quot;metadata&quot;&gt;
+            &lt;xsd:complexType&gt;
+              &lt;xsd:sequence&gt;
+                &lt;xsd:element name=&quot;value&quot; type=&quot;xsd:string&quot; minOccurs=&quot;0&quot; /&gt;
+              &lt;/xsd:sequence&gt;
+              &lt;xsd:attribute name=&quot;name&quot; use=&quot;required&quot; type=&quot;xsd:string&quot; /&gt;
+              &lt;xsd:attribute name=&quot;type&quot; type=&quot;xsd:string&quot; /&gt;
+              &lt;xsd:attribute name=&quot;mimetype&quot; type=&quot;xsd:string&quot; /&gt;
+              &lt;xsd:attribute ref=&quot;xml:space&quot; /&gt;
+            &lt;/xsd:complexType&gt;
+          &lt;/xsd:element&gt;
+          &lt;xsd:element name=&quot;assembly&quot;&gt;
+            &lt;xsd:complexType&gt;
+              &lt;xsd:attribute name=&quot;alias&quot; type=&quot;xsd:string&quot; /&gt;
+              &lt;xsd:attribute name=&quot;name&quot; type=&quot;xsd:string&quot; /&gt;
+            &lt;/xsd:complexType&gt;
+          &lt;/xsd:element&gt;
+          &lt;xsd:element name=&quot;data&quot;&gt;
+            &lt;xsd:complexType&gt;
+              &lt;xsd:sequence&gt;
+                &lt;xsd:element name=&quot;value&quot; type=&quot;xsd:string&quot; minOccurs=&quot;0&quot; msdata:Ordinal=&quot;1&quot; /&gt;
+                &lt;xsd:element name=&quot;comment&quot; type=&quot;xsd:string&quot; minOccurs=&quot;0&quot; msdata:Ordinal=&quot;2&quot; /&gt;
+              &lt;/xsd:sequence&gt;
+              &lt;xsd:attribute name=&quot;name&quot; type=&quot;xsd:string&quot; use=&quot;required&quot; msdata:Ordinal=&quot;1&quot; /&gt;
+              &lt;xsd:attribute name=&quot;type&quot; type=&quot;xsd:string&quot; msdata:Ordinal=&quot;3&quot; /&gt;
+              &lt;xsd:attribute name=&quot;mimetype&quot; type=&quot;xsd:string&quot; msdata:Ordinal=&quot;4&quot; /&gt;
+              &lt;xsd:attribute ref=&quot;xml:space&quot; /&gt;
+            &lt;/xsd:complexType&gt;
+          &lt;/xsd:element&gt;
+          &lt;xsd:element name=&quot;resheader&quot;&gt;
+            &lt;xsd:complexType&gt;
+              &lt;xsd:sequence&gt;
+                &lt;xsd:element name=&quot;value&quot; type=&quot;xsd:string&quot; minOccurs=&quot;0&quot; msdata:Ordinal=&quot;1&quot; /&gt;
+              &lt;/xsd:sequence&gt;
+              &lt;xsd:attribute name=&quot;name&quot; type=&quot;xsd:string&quot; use=&quot;required&quot; /&gt;
+            &lt;/xsd:complexType&gt;
+          &lt;/xsd:element&gt;
+        &lt;/xsd:choice&gt;
+      &lt;/xsd:complexType&gt;
+    &lt;/xsd:element&gt;
+  &lt;/xsd:schema&gt;
+  &lt;resheader name=&quot;resmimetype&quot;&gt;
+    &lt;value&gt;text/microsoft-resx&lt;/value&gt;
+  &lt;/resheader&gt;
+  &lt;resheader name=&quot;version&quot;&gt;
+    &lt;value&gt;2.0&lt;/value&gt;
+  &lt;/resheader&gt;
+  &lt;resheader name=&quot;reader&quot;&gt;
+    &lt;value&gt;System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/value&gt;
+  &lt;/resheader&gt;
+  &lt;resheader name=&quot;writer&quot;&gt;
+    &lt;value&gt;System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/value&gt;
+  &lt;/resheader&gt;
+  &lt;metadata name=&quot;folderBrowserDialog1.TrayLocation&quot; type=&quot;System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&quot;&gt;
+    &lt;value&gt;17, 17&lt;/value&gt;
+  &lt;/metadata&gt;
 &lt;/root&gt;
\ No newline at end of file</diff>
      <filename>FixMpeg/Form1.resx</filename>
    </modified>
    <modified>
      <diff>@@ -1,23 +1,25 @@
-FixMpeg
-===
-
-**Updated**: the second release now will process files other than MPEG files (i.e. .wmv, .avi) and will transcode unsupported media to MPEG2 to make them compatible! It will also read and allow you to convert media from a DVD. It does its best to transcode to MPEG2, some low-quality sources may have A/V sync issues, it is good to check the files for any problems after they're converted.
-
----
-
-FixMpeg is a simple front end to ffmpeg that will convert the audio format and sample rate in an mpeg2 file (.mpg). It is intended to aid the migration of files to the SX Video Servers from Tightrope Media Systems. It will not touch the video, but only convert the audio in a file if it is not correct to stereo MPEG1 layer 2 audio (typical uses are to convert from the wrong sample rate -- 44.1kHz to 48kHz or to convert AC3 audio).
-
-Simply extract the zip file, double click the FixMpeg.exe (not ffmpeg.exe) and then drag a batch of mpeg2 files onto the window. Files that are already correct will be copied, files that can be converted will be converted and you will get a message about any incompatible files.
-
-You can click the path to point it at your desired content directory (it will create a file there with the same name when processing). There's no installer, just place the extracted folder somewhere convenient, and perhaps make a shortcut to FixMpeg.exe someplace even more convenient.
-
----
-
-FixMpeg will run on MacOSX!  Download mono
-(http://www.go-mono.com/mono-downloads/download.html) and install it.  Then,
-in in the FixMpeg directory there will be a FixMpeg.zip, double click
-it in the Finder to extract it.  Once that finishes, you'll see an
-AppleScript called &quot;FixMpeg&quot; (with an icon if a script standing on a square).
-Double click the script, it will configure and run FixMpeg for you.
-Status isn't perfect yet, but it works.
-
+FixMpeg
+===
+
+**Updated**: Added a checkbox that will allow the user to force files that look ok to be transcoded.
+
+**Updated**: the second release now will process files other than MPEG files (i.e. .wmv, .avi) and will transcode unsupported media to MPEG2 to make them compatible! It will also read and allow you to convert media from a DVD. It does its best to transcode to MPEG2, some low-quality sources may have A/V sync issues, it is good to check the files for any problems after they're converted.
+
+---
+
+FixMpeg is a simple front end to ffmpeg that will convert the audio format and sample rate in an mpeg2 file (.mpg). It is intended to aid the migration of files to the SX Video Servers from Tightrope Media Systems. It will not touch the video, but only convert the audio in a file if it is not correct to stereo MPEG1 layer 2 audio (typical uses are to convert from the wrong sample rate -- 44.1kHz to 48kHz or to convert AC3 audio).
+
+Simply extract the zip file, double click the FixMpeg.exe (not ffmpeg.exe) and then drag a batch of mpeg2 files onto the window. Files that are already correct will be copied, files that can be converted will be converted and you will get a message about any incompatible files.
+
+You can click the path to point it at your desired content directory (it will create a file there with the same name when processing). There's no installer, just place the extracted folder somewhere convenient, and perhaps make a shortcut to FixMpeg.exe someplace even more convenient.
+
+---
+
+FixMpeg will run on MacOSX!  Download mono
+(http://www.go-mono.com/mono-downloads/download.html) and install it.  Then,
+in in the FixMpeg directory there will be a FixMpeg.zip, double click
+it in the Finder to extract it.  Once that finishes, you'll see an
+AppleScript called &quot;FixMpeg&quot; (with an icon of a script standing on a square).
+Double click the script, it will configure and run FixMpeg for you.
+Status isn't perfect yet, but it works.
+</diff>
      <filename>README.markdown</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>65ef152754e23631da24a2cf58da2f030beafc4d</id>
    </parent>
  </parents>
  <author>
    <name>Brandon McKenzie</name>
    <email>brandon.mckenzie@trms.com</email>
  </author>
  <url>http://github.com/trms/fixmpeg/commit/c0291f6a6f708e79723e2a15987238a22920284d</url>
  <id>c0291f6a6f708e79723e2a15987238a22920284d</id>
  <committed-date>2009-05-29T13:39:26-07:00</committed-date>
  <authored-date>2009-05-29T13:39:26-07:00</authored-date>
  <message>Added a checkbox that allows the user to force a transcode</message>
  <tree>33a529e4e98ffea44654edd2ca49df8b4cf7d2e4</tree>
  <committer>
    <name>Brandon McKenzie</name>
    <email>brandon.mckenzie@trms.com</email>
  </committer>
</commit>
