/// ------------------------------------------------------------------------------------
        public static IEnumerable <FFmpegConversionInfo> GetConversions(string fileToConvert)
        {
            var iniFile           = FileLocator.GetFileDistributedWithApplication("FFmpegConversions.ini");
            var ffmpegConversions = new IniDocument(iniFile);
            var typeToShow        = string.Empty;

            if (FileUtils.AudioFileExtensions.Contains(Path.GetExtension(fileToConvert)))
            {
                typeToShow = "audio";
            }
            else if (FileUtils.VideoFileExtensions.Contains(Path.GetExtension(fileToConvert)))
            {
                typeToShow = "video";
            }

            for (int i = 0; i < ffmpegConversions.Sections.Count; i++)
            {
                var applicableFileType = ffmpegConversions.Sections[i].GetValue("applicableFileType");
                if (applicableFileType != null && applicableFileType.Contains(typeToShow))
                {
                    yield return(new FFmpegConversionInfo
                    {
                        Name = ffmpegConversions.Sections[i].Name,
                        OutputExtension = ffmpegConversions.Sections[i].GetValue("outputFileExtension"),
                        CommandLine = ffmpegConversions.Sections[i].GetValue("commandLine"),
                        Comments = ffmpegConversions.Sections[i].GetValue("comments"),
                        ApplicableFileType = ffmpegConversions.Sections[i].GetValue("applicableFileType")
                    });
                }
            }

            if (typeToShow == "video")
            {
                yield return(new FFmpegConversionInfo
                {
                    Name = ConvertMediaDlg.GetFactoryConvertToH263Mp4ConversionName(),
                    OutputExtension = "mp4",
                    CommandLine = "-vb {vb} -codec:v mpeg4 -ab {ab} -codec:a aac -strict -2",
                    ApplicableFileType = "video"
                });
            }

            yield return(new FFmpegConversionInfo
            {
                Name = ConvertMediaDlg.GetFactoryExtractToStandardPcmConversionName(),
                OutputExtension = "wav",
                CommandLine = "-vn -codec:a {pcm}",
                ApplicableFileType = "audio/video"
            });

            yield return(new FFmpegConversionInfo
            {
                Name = ConvertMediaDlg.GetFactoryExtractToMp3AudioConversionName(),
                OutputExtension = "mp3",
                CommandLine = "-vn -codec:a libmp3lame -ac 1",
                ApplicableFileType = "audio/video"
            });
        }
Beispiel #2
0
        /// ------------------------------------------------------------------------------------
        private static bool DoPcmConversion(string inputMediaFile, string outputAudioFile,
                                            WaveFormat preferredOutputFormat)
        {
            string output;
            var    result = MPlayerHelper.CreatePcmAudioFromMediaFile(inputMediaFile,
                                                                      outputAudioFile, preferredOutputFormat, out output);

            if ((result & MPlayerHelper.ConversionResult.FinishedConverting) != 0)
            {
                // Possibly succeeded
                if ((result & MPlayerHelper.ConversionResult.PossibleError) > 0)
                {
                    ReportPossibleConversionProblem(output);
                }
                return(true);
            }

            // If ffmpeg is available, then try it as a fallback, since Mplayer had problems.
            if (!FFmpegDownloadHelper.DoesFFmpegForSayMoreExist)
            {
                return(false);
            }

            var model = new ConvertMediaDlgViewModel(inputMediaFile,
                                                     ConvertMediaDlg.GetFactoryExtractToStandardPcmConversionName());

            model.BeginConversion(null, outputAudioFile, preferredOutputFormat);

            var finishedState = model.ConversionState & ConvertMediaUIState.AllFinishedStates;

            if (finishedState == ConvertMediaUIState.FinishedConverting)
            {
                if ((model.ConversionState & ConvertMediaUIState.PossibleError) > 0)
                {
                    ReportPossibleConversionProblem(model.ConversionOutput);
                }
                return(File.Exists(outputAudioFile));
            }

            if (finishedState == ConvertMediaUIState.ConversionFailed)
            {
                var e = model.ConversionException;
                if (e != null)
                {
                    throw e;
                }
            }

            return(false);
        }