2016-08-08 22 views
2

私は前の質問から私の質問に言い直しました。私はデスクトップレコーダーを作りました。それは1つのことを除いて完璧に動作します。ビデオをエンコードして、出力フォルダにメディアを配置しようとすると、C:\Videosは例外をスローします。出力ファイルをユーザーフォルダに保存する

出力.xescは、CドライブのVideosフォルダに保存されます。しかし、それを.wmv形式に変換しようとすると、次の例外がスローされます。

An unhandled exception of type Microsoft.Expression.Encoder.InvalidMediaFileException occured in Microsoft.Expression.Encoder.dll Aditional Information: Access Denied (Exception from HRESULT: 0x80070005(E_AccessDenied)) 

以下のエンコーダを掲載しました。ここで

****ソースコード******

は、エンコーディングを扱うソースコードです。私はそれについていくつかのことに取り組んでいました。何か間違いや何か改善が見られる場合は、私に知らせてください。それは完璧に動作し、それは私が手動で.xescを変換することができますので、これは問題で必要ではないが、それは時間がかかります.WMVに

void Encode(string jobPath) 
    { 
     using (Job j = new Job()) 
     { 

      MediaItem mediaItem = new MediaItem(Environment.GetFolderPath(Environment.SpecialFolder.MyVideos) + @"\IvanSoft Desktop Recorder"); 
      var size = mediaItem.OriginalVideoSize; 
      WindowsMediaOutputFormat WMV_Format = new WindowsMediaOutputFormat(); 
      WMV_Format.VideoProfile = new Microsoft.Expression.Encoder.Profiles.AdvancedVC1VideoProfile(); 
      WMV_Format.AudioProfile = new Microsoft.Expression.Encoder.Profiles.WmaAudioProfile(); 
      WMV_Format.VideoProfile.AspectRatio = new System.Windows.Size(16, 9); 
      WMV_Format.VideoProfile.AutoFit = true; 

      if (size.Width >= 1920 && size.Height >= 1080) 
      { 
       WMV_Format.VideoProfile.Size = new System.Drawing.Size(1920, 1080); 
       WMV_Format.VideoProfile.Bitrate = new Microsoft.Expression.Encoder.Profiles.VariableUnconstrainedBitrate(6000); 
      } 
      else if (size.Width >= 1280 && size.Height >= 720) 
      { 
       WMV_Format.VideoProfile.Size = new System.Drawing.Size(1280, 720); 
       WMV_Format.VideoProfile.Bitrate = new Microsoft.Expression.Encoder.Profiles.VariableUnconstrainedBitrate(4000); 
      } 
      else 
      { 
       WMV_Format.VideoProfile.Size = new System.Drawing.Size(size.Width, size.Height); 
       WMV_Format.VideoProfile.Bitrate = new Microsoft.Expression.Encoder.Profiles.VariableUnconstrainedBitrate(2000); 
      } 
      mediaItem.VideoResizeMode = VideoResizeMode.Letterbox; 
      mediaItem.OutputFormat = WMV_Format; 
      j.MediaItems.Add(mediaItem); 
      j.CreateSubfolder = false; 
      j.OutputDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyVideos) + @"\IvanSoft Desktop Recorder.xesc"; 
      j.EncodeProgress += new EventHandler<EncodeProgressEventArgs>(j_EncodeProgress); 
      j.Encode(); 
     } 
    } 

は保存されませんformatbut .xescを置きます。私はSave_btnClikを押すとうまくいきたいと思っています。これはwin8.1とwin10で発生します。

どのような種類のアクセス権が必要ですか?あなたは "SaveFileDiaLog" を使用していけないのはなぜ

enter image description here

+0

C:\のルートに書き込むには、管理者権限が必要です。これを確認するには、ファイルをそこにコピーします。パスワードを入力するように求められます。 – elyashiv

+0

http://stackoverflow.com/questions/2818179/how-do-iforce-my-net-application-to-run-as-administrator – nozzleman

+0

を参照して、現在行っているコードを含めることは可能ですか? –

答えて

0

Ok Microsoft Expression Encoder 4は、ファイルを.wmv形式で保存していないことがわかりました。 .xescを.wmvに変更するだけです。

これは私が考えたものに一度変換されました.wmv Movie Makerに読み込まれました.xscはサポートされていませんでした。

究極の結果は、MEE4エンコーダが.xescフォーマットを生成するということです。次に、ファイルを真に変換する第三者コンバーターに気付きました。ビデオとサウンドは同期されません。どこかのコードを見落とさない限り、第三者のコンバーターは行く方法ではありません。

本当に.xescを別の形式に変換し、フレームの速度と同期を保持する方法を考えなければなりません。

0

。私はそれが最善の方法だと思う。 Winform_applicationの "Toolbox"で見つけることができますVisual studio

+0

私はSaveFileDialogを使用することについて考えていると私はそれを使用して唯一のため、私はそれを使用したい場合は私は確信していません。これは個人的な使用のためであり、私はあらかじめ定義された場所を使用したいと思っています。しかし、私はそれを使用しなければならない場合、私は – campnerd

+0

を読むことができますし、あなたはそれが私が望む場所に保存することが表示されます。アクセス権のないエンコーディングファイルです。 – campnerd

+0

私ははっきりしています。 1行目: まず、あなたは2行を確認する必要がありMediaItem mediaItem =新しいMediaItem(Environment.GetFolderPath(Environment.SpecialFolder.MyVideos)+ @ "\ IvanSoftデスクトップレコーダー"); 行2:j.OutputDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyVideos)+ @ "\ IvanSoft Desktop Recorder.xesc"; –

関連する問題