Esempio n. 1
0
 public void Clear()
 {
     TargetVideoCodec = MediaConvertGUIConfiguration.GetVideoCodecByName("copy");
     TargetContainer  = MediaConvertGUIConfiguration.DefaultContainer;
     AutoRotate       = false;
     Tracks.Clear();
     FileSize = 0;
 }
Esempio n. 2
0
        protected void OnCodecEventBoxButtonPressEvent(object o, ButtonPressEventArgs args)
        {
            if (Editable && MovieInfo != null && comboCodec.Active > 0)
            {
                var codec = MediaConvertGUIConfiguration.GetVideoCodecByName(comboCodec.ActiveText);

                if (!string.IsNullOrEmpty(codec.Link))
                {
                    SupportMethods.ExecuteInShell(codec.Link);
                }
            }
        }
Esempio n. 3
0
        private void OnAnyValueChanged()
        {
            if (Editable && MovieInfo != null && MovieInfo.FirstVideoTrack != null)
            {
                if (_eventLock.Lock())
                {
                    var m = MovieInfo.FirstVideoTrack;

                    // reactivating disabled?
                    if (chBoxResolution.Active && !MovieInfo.EditResolution)
                    {
                        entryWidth.Text  = m.Width.ToString();
                        entryHeight.Text = m.Height.ToString();
                    }
                    if (chBoxBitRate.Active && !MovieInfo.EditBitRate)
                    {
                        comboBitRate.Entry.Text = (m.BitrateKbps).ToString();
                    }

                    if (chBoxAspect.Active && !MovieInfo.EditAspect)
                    {
                        comboAspect.Entry.Text = m.Aspect;
                    }

                    if (chBoxFrameRate.Active && !MovieInfo.EditFrameRate)
                    {
                        comboFrameRate.Entry.Text = m.FrameRate.ToString();
                    }


                    MovieInfo.EditResolution = chBoxResolution.Active;
                    MovieInfo.EditAspect     = chBoxAspect.Active;
                    MovieInfo.EditBitRate    = chBoxBitRate.Active;
                    MovieInfo.EditFrameRate  = chBoxFrameRate.Active;

                    if (chBoxBitRate.Active)
                    {
                        var bitRateTypedValue = SupportMethods.ParseDecimalValueFromValue(comboBitRate.ActiveText, MediaConvertGUIConfiguration.DefaultVideoBitRates);
                        m.Bitrate = bitRateTypedValue * 1000;
                    }

                    if (chBoxResolution.Active)
                    {
                        if (SupportMethods.IsNumeric(entryWidth.Text))
                        {
                            m.Width = Convert.ToInt32(entryWidth.Text);
                        }

                        if (SupportMethods.IsNumeric(entryHeight.Text))
                        {
                            m.Height = Convert.ToInt32(entryHeight.Text);
                        }
                    }

                    if (chBoxFrameRate.Active)
                    {
                        if (SupportMethods.IsNumeric(comboFrameRate.ActiveText))
                        {
                            m.FrameRate = SupportMethods.ToDecimal(comboFrameRate.ActiveText);
                        }
                    }

                    if (chBoxAspect.Active)
                    {
                        m.Aspect = comboAspect.ActiveText;
                    }

                    if (chBoxRotation.Active)
                    {
                        if (SupportMethods.IsNumeric(comboRotation.ActiveText))
                        {
                            m.RotatationAngle = SupportMethods.ToDecimal(comboRotation.ActiveText);
                        }
                    }
                    MovieInfo.EditRotation = chBoxRotation.Active;

                    MovieInfo.AutoRotate = checkAutorotate.Active;
                    if (checkAutorotate.Active)
                    {
                        // reseting Rotation angle to 0
                        m.RotatationAngle = 0;
                    }

                    MovieInfo.TargetVideoCodec = MediaConvertGUIConfiguration.GetVideoCodecByName(comboCodec.ActiveText);
                    comboCodec.TooltipText     = MovieInfo.TargetVideoCodec.Title;

                    _eventLock.Unlock();
                    Fill();
                }
            }
        }
Esempio n. 4
0
        public void SaveAsSchemeToXML(string fileName)
        {
            // Create a new XmlTextWriter instance
            XmlTextWriter writer = new
                                   XmlTextWriter(fileName, Encoding.UTF8);

            writer.Formatting  = Formatting.Indented;
            writer.Indentation = 4;

            // start writing!
            writer.WriteStartDocument();
            writer.WriteStartElement("MultimediaScheme");

            writer.WriteElementString("Container", TargetContainer.Name);

            // Video

            writer.WriteStartElement("Video");

            writer.WriteElementString("Codec", TargetVideoCodec.ToString());

            if (TargetVideoCodec != MediaConvertGUIConfiguration.GetVideoCodecByName("none"))
            {
                var firstVideoTrack = FirstVideoTrack;

                if (firstVideoTrack != null)
                {
                    if (EditResolution)
                    {
                        writer.WriteElementString("Width", firstVideoTrack.Width.ToString());
                        writer.WriteElementString("Height", firstVideoTrack.Height.ToString());
                    }

                    if (EditAspect)
                    {
                        writer.WriteElementString("Aspect", firstVideoTrack.Aspect);
                    }
                    if (EditBitRate)
                    {
                        writer.WriteElementString("Bitrate", firstVideoTrack.Bitrate.ToString());
                    }
                    if (EditFrameRate)
                    {
                        writer.WriteElementString("Framerate", firstVideoTrack.FrameRate.ToString(System.Globalization.CultureInfo.InvariantCulture));
                    }
                }
            }

            writer.WriteEndElement();

            // Audio

            writer.WriteStartElement("Audio");

            foreach (var track in Tracks)
            {
                if (track.TrackType == "Audio")
                {
                    writer.WriteStartElement("Track");

                    writer.WriteElementString("Codec", track.TargetAudioCodec.ToString());

                    if ((track.TargetAudioCodec.Name != "none") && (track.TargetAudioCodec.Name != "copy"))
                    {
                        writer.WriteElementString("Channels", track.Channels.ToString());
                        writer.WriteElementString("Bitrate", track.Bitrate.ToString());
                        writer.WriteElementString("SamplingRate", track.SamplingRateHz.ToString());
                    }

                    writer.WriteEndElement();
                }
            }


            writer.WriteEndElement();

            writer.WriteEndDocument();
            writer.Close();
        }
Esempio n. 5
0
        public void OpenSchemeFromXML(string fileName)
        {
            // http://stackoverflow.com/questions/243022/parsing-through-xml-elements-in-xmlreader

            var xmlDoc = new XmlDocument();

            xmlDoc.Load(fileName);
            var xmlRoot = xmlDoc.DocumentElement;

            foreach (XmlNode item in xmlRoot.SelectNodes(@"/MultimediaScheme"))
            {
                MediaContainer container;

                var node = item.SelectSingleNode("Container");
                if ((node != null) &&
                    (node.FirstChild != null))
                {
                    container = MediaConvertGUIConfiguration.GetContainerByName(node.FirstChild.Value);
                    if (container != null)
                    {
                        TargetContainer = container;
                    }
                }
            }

            var firstVideoTrack = FirstVideoTrack;

            if (firstVideoTrack != null)
            {
                foreach (XmlNode item in xmlRoot.SelectNodes(@"/MultimediaScheme/Video"))
                {
                    int width;
                    var widthNode = item.SelectSingleNode("Width");
                    if ((widthNode != null) && (widthNode.FirstChild != null))
                    {
                        if (int.TryParse(widthNode.FirstChild.Value, out width))
                        {
                            firstVideoTrack.Width = width;
                        }
                    }

                    int height;
                    var heightNode = item.SelectSingleNode("Height");
                    if ((heightNode != null) && (heightNode.FirstChild != null))
                    {
                        if (int.TryParse(heightNode.FirstChild.Value, out height))
                        {
                            firstVideoTrack.Height = height;
                        }
                    }

                    int bitrate;
                    var bitrateNode = item.SelectSingleNode("Bitrate");
                    if ((bitrateNode != null) && (bitrateNode.FirstChild != null))
                    {
                        if (int.TryParse(bitrateNode.FirstChild.Value, out bitrate))
                        {
                            firstVideoTrack.Bitrate = bitrate;
                        }
                    }

                    decimal framerate;
                    var     framerateNode = item.SelectSingleNode("Framerate");
                    if ((framerateNode != null) && (framerateNode.FirstChild != null))
                    {
                        if (decimal.TryParse(framerateNode.FirstChild.Value, out framerate))
                        {
                            firstVideoTrack.FrameRate = framerate;
                        }
                    }

                    var aspectNode = item.SelectSingleNode("Aspect");
                    if ((aspectNode != null) && (aspectNode.FirstChild != null))
                    {
                        if (Regex.IsMatch(aspectNode.FirstChild.Value, "^[0-9]+:[0-9]+$"))
                        {
                            firstVideoTrack.Aspect = aspectNode.FirstChild.Value;
                        }
                    }

                    var codecNode = item.SelectSingleNode("Codec");
                    if ((codecNode != null) && (codecNode.FirstChild != null))
                    {
                        var codec = MediaConvertGUIConfiguration.GetVideoCodecByName(codecNode.FirstChild.Value);

                        if (codec != null)
                        {
                            this.TargetVideoCodec = codec;
                        }
                    }
                }
            }

            var firstAudioTrack = FirstAudioTrack;

            if (this.AudioTracks.Count > 0)
            {
                var actualTrackIndex = 1;
                foreach (XmlNode trackNode in xmlRoot.SelectNodes(@"/MultimediaScheme/Audio/Track"))
                {
                    var codecNode = trackNode.SelectSingleNode("Codec");
                    if ((codecNode != null) && (codecNode.FirstChild != null))
                    {
                        var aCodec = MediaConvertGUIConfiguration.GetAudioCodecByName(codecNode.FirstChild.Value);
                        if (aCodec != null)
                        {
                            AudioTracks[actualTrackIndex].TargetAudioCodec = aCodec;
                        }
                    }

                    int channels;
                    var channelsNode = trackNode.SelectSingleNode("Channels");
                    if ((channelsNode != null) && (channelsNode.FirstChild != null))
                    {
                        if (int.TryParse(channelsNode.FirstChild.Value, out channels))
                        {
                            AudioTracks[actualTrackIndex].Channels = channels;
                        }
                    }

                    int bitrate;
                    var bitrateNode = trackNode.SelectSingleNode("Bitrate");
                    if ((bitrateNode != null) && (bitrateNode.FirstChild != null))
                    {
                        if (int.TryParse(bitrateNode.FirstChild.Value, out bitrate))
                        {
                            AudioTracks[actualTrackIndex].Bitrate = bitrate;
                        }
                    }

                    decimal sRate;
                    var     sRateNode = trackNode.SelectSingleNode("SamplingRate");
                    if ((sRateNode != null) && (sRateNode.FirstChild != null))
                    {
                        if (decimal.TryParse(sRateNode.FirstChild.Value, out sRate))
                        {
                            AudioTracks[actualTrackIndex].SamplingRateHz = sRate;
                        }
                    }

                    actualTrackIndex++;
                    if (actualTrackIndex > AudioTracks.Count)
                    {
                        break;
                    }
                }
            }
        }
Esempio n. 6
0
        /// <summary>
        /// Makes the FF MPEG command.
        /// </summary>
        /// <returns>The FF MPEG command.</returns>
        /// <param name="sourceMovie">Source movie.</param>
        /// <param name="targetMovie">Target movie.</param>
        /// <param name="currentPass">Current pass.</param>
        public static string MakeFFMpegCommand(MediaInfo sourceMovie, MediaInfo targetMovie, int currentPass)
        {
            var res = String.Empty;

            // single audio convert?
            if ((targetMovie.AudioTracks.Count > 0) &&
                (targetMovie.FirstAudioTrack.TargetAudioCodec.Name != "none") &&
                ((targetMovie.FirstVideoTrack == null) ||
                 (targetMovie.TargetVideoCodec == MediaConvertGUIConfiguration.GetVideoCodecByName("none")) ||
                 (targetMovie.TargetContainer == null) ||
                 (targetMovie.TargetContainer.Name == "none")
                ) &&
                (currentPass > 1))
            {
                return(res);
            }

            // codec copy  - single pass
            if ((targetMovie.FirstVideoTrack != null) && (targetMovie.TargetVideoCodec == MediaConvertGUIConfiguration.GetVideoCodecByName("copy")) &&
                (currentPass > 1))
            {
                return(res);
            }

            var sourceFile = " -i \"" + sourceMovie.FileName + "\"";
            var ext        = System.IO.Path.GetExtension(sourceMovie.FileName);
            var targetFile = sourceMovie.FileName + ".converted" + ext;
            var video      = " -vn";         // disable video

            var hwaccel = String.Empty;

            var audio = " -an ";             // disable audio

            var map = String.Empty;

            if (targetMovie.FirstVideoTrack != null && targetMovie.TargetVideoCodec != MediaConvertGUIConfiguration.GetVideoCodecByName("none") &&
                targetMovie.TargetContainer != null && targetMovie.TargetContainer.Name != "none")
            {
                var videoSettings = String.Empty;
                var container     = String.Empty;

                container = " -f " + targetMovie.TargetContainer.Name;
                ext       = targetMovie.TargetContainer.Extension;

                targetFile = sourceMovie.FileName + ".converted" + ext;

                videoSettings += container;

                var aspect    = " -aspect " + targetMovie.FirstVideoTrack.Aspect;
                var scale     = " -s " + targetMovie.FirstVideoTrack.Width.ToString() + "x" + targetMovie.FirstVideoTrack.Height.ToString();
                var bitrate   = " -b:v " + targetMovie.FirstVideoTrack.Bitrate;
                var frameRate = " -r " + targetMovie.FirstVideoTrack.FrameRate.ToString().Replace(",", ".");                // TODO: invariant culture

                // auto rotation
                var rotation90AnglesCount = Convert.ToInt32(sourceMovie.FirstVideoTrack.RotatationAngle);
                var autoRotate            = " -vf ";

                if (rotation90AnglesCount == 90)
                {
                    autoRotate += " transpose=2";                                              // 90CounterClockwise
                }
                else
                if (rotation90AnglesCount == 180)
                {
                    autoRotate += " transpose=1,transpose=1";                                               // 2*90Clockwise
                }
                else
                if (rotation90AnglesCount == 270)
                {
                    autoRotate += " transpose=1";                                               // 90Clockwise
                }
                else
                {
                    autoRotate = "";              // unsupported transposition
                }
                var rotationAngle = " -metadata:s:v:0 rotate=" + Convert.ToInt32(targetMovie.FirstVideoTrack.RotatationAngle).ToString();

                if (targetMovie.EditAspect)
                {
                    videoSettings += aspect;
                }
                if (targetMovie.EditResolution)
                {
                    videoSettings += scale;
                }
                if (targetMovie.EditBitRate)
                {
                    videoSettings += bitrate;
                }
                if (targetMovie.EditFrameRate)
                {
                    videoSettings += frameRate;
                }
                if (targetMovie.EditRotation)
                {
                    videoSettings += rotationAngle;
                }
                if (targetMovie.AutoRotate)
                {
                    videoSettings += autoRotate;
                }

                if (targetMovie.TargetVideoCodec != MediaConvertGUIConfiguration.GetVideoCodecByName("copy"))
                {
                    var pass = String.Format(" -pass {0} -passlogfile \"{1}\"", currentPass, targetFile + ".passlog");
                    videoSettings += pass;
                }

                video   = targetMovie.TargetVideoCodec.Command + videoSettings;
                hwaccel = String.IsNullOrEmpty(targetMovie.TargetVideoCodec.HWAcceleration) ? "" : " -hwaccel " + targetMovie.TargetVideoCodec.HWAcceleration;
            }

            // only first Audio Track!
            if (targetMovie.AudioTracks.Count > 0)
            {
                var targetAudioTrack = targetMovie.FirstAudioTrack;

                var audioQuality = String.Format(" -ac {0} -ar {1} -ab {2}",
                                                 targetAudioTrack.Channels,
                                                 targetAudioTrack.SamplingRateHz,
                                                 targetAudioTrack.Bitrate);

                audio = " " + targetAudioTrack.TargetAudioCodec.Command + " ";
                if (targetAudioTrack.TargetAudioCodec.Name != "copy")
                {
                    audio += " " + audioQuality;
                }


                if ((targetMovie.FirstVideoTrack == null) ||
                    (targetMovie.TargetVideoCodec == MediaConvertGUIConfiguration.GetVideoCodecByName("none")) ||
                    (targetMovie.TargetContainer.Name == "none")
                    )
                {
                    // converting single audio
                    targetFile = sourceMovie.FileName + ".converted" + ext;
                }
            }

            // more audio tracks? supporting only the first one
            if (sourceMovie.AudioTracks.Count > 1 && sourceMovie.FirstVideoTrack != null)
            {
                map = " -map 0:0 -map 0:1";
            }

            targetMovie.FFMPEGOutputFileName  = targetFile + ".log";
            targetMovie.FFMPEGPassLogFileName = targetFile + ".passlog";
            targetMovie.FileName = targetFile;

            /*
             * if (File.Exists(targetMovie.FFMPEGOutputFileName))
             *              File.Delete(targetMovie.FFMPEGOutputFileName);
             * if (File.Exists(targetMovie.FFMPEGPassLogFileName))
             *              File.Delete(targetMovie.FFMPEGPassLogFileName);
             */

            targetFile = String.Format(" \"{0}\"", targetFile);


            res = MediaConvertGUIConfiguration.FFMpegPath + " " + hwaccel + " -y -dump " + sourceFile + map + " " + video + audio + targetFile;

            return(res);
        }