2017-01-25 9 views
0

NReco.VideoConverterを使用して.flacファイルを.wavファイルに変換しようとしていますが、エラーが発生しており、わかりませんなぜ。 これは私が変換のために使用していたコードの一部です:エラー:NReco.VideoConverterを使用しているときにパスが正当な形式ではありません

 //Create the NReco.VideoConverter.FFMpegConverter object 
     var ffmpeg = new FFMpegConverter(); 

     //inputFile will be something like this: 
     //type: string, "C:\\some\\folder\\fullTrackName" + ".flac" 
     var inputFile = Path.Combine(downloadFolder + fullTrackNameNoExtension + ".flac"); 

     //outputFile will be something like this: 
     //type: string, "C:\\some\\folder\\musicfile" + ".wav" 
     var outputFile = Path.Combine(downloadFolder + fullTrackNameNoExtension + ".wav"); 

     //Convert the file using NReco.VideoConverter.FFMpegConverter 
     ffmpeg.ConvertMedia(inputFile, outputFile, null); 

で、inputFile/OUTPUTFILEは次のようになり、これは私がブレークポイントを挿入し、/ OUTPUTFILE内の値を確認したときに、私が見たものである。

文字列、で、inputFile/OUTPUTFILE: "Z:\\ダウンロード\\オーディオ - ファイル(オリジナル・ミックス).flac"(または.WAV)

そして、これは私がffmpeg.ConvertMediaを実行したとき、私は受信エラーです:

System.ArgumentException: The path is not of a legal form. 
    at System.IO.Path.LegacyNormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths) 
    at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths) 
    at System.IO.Path.GetFullPathInternal(String path) 
    at System.IO.File.InternalGetLastWriteTimeUtc(String path, Boolean checkHost) 
    at NReco.VideoConverter.FFMpegConverter.EnsureFFMpegLibs() 
    at NReco.VideoConverter.FFMpegConverter.ConvertMedia(Media input, Media output, ConvertSettings settings) 
    at NReco.VideoConverter.FFMpegConverter.ConvertMedia(String inputFile, String inputFormat, String outputFile, String outputFormat, ConvertSettings settings) 
    at NReco.VideoConverter.FFMpegConverter.ConvertMedia(String inputFile, String outputFile, String outputFormat) 
    at APPLICATION_Name.APPLICATION_Class.ConvertFile(String downloadFolder, String fullTrackName, String fullTrackNameNoExtension, String downloadQuality, String downloadType) in X:\APPLICATION_Name\DownloadTrack.cs:line 244 

答えて

1

最初に使用したときにffmpegバイナリを抽出する(デフォルトではapp binフォルダに) "FFMpegConverter.EnsureFFMpegLibs"メソッドから例外がスローされ、何らかの理由で誤って(ネットワークパスが使用されている)と判断されることがあります。

FFMpegConverter.FFMpegToolPathプロパティを指定すると、ffmpeg.exeの場所を変更することができます(.netアプリにはこのフォルダに書き込むための十分な権限が必要です)。

+0

ありがとうございました! ffmpeg.exeがbinフォルダに保存されました。 ffmpeg.exeを削除して、メディアを再度変換しようとすると、ffmpeg.exeがフォルダに再配置されますが、これは問題ありません。 最初の変換は正常ですが、2番目の変換は失敗します(ffmpeg.exeが既に存在する場合)。ですから、ConvertMediaを実行するとffmpeg.exeは存在しないはずです。 私はFile.Delete(ffmpegexePath);を行うことができますが、それは汚い解決策です。 これを解決できますか?それとも、NRecoの問題ですか? – Dyon

+1

@Dyon ffmpeg.exeが最初に使用されるときに展開されますが、これは正しい動作です。間違いなく毎回ffmpeg.exeを削除する必要はありません。問題はffmpeg.exeの場所自体ではなく、アセンブリの日付とffmpeg.exeの日付を比較するコードであるようです:File.GetLastWriteTime(thisAssembly.Location)。このコードが「パスは正当な形式ではありません」という理由は非常に奇妙です。次のバージョンでこのケースの修正プログラムを提供します。それまではLTバージョンを使用することができます(これについては、NRecoサポートにお問い合わせください)。 –

関連する問題