将输出文件保存到用户文件夹

时间:2016-08-08 05:56:03

标签: c# winforms expression

我重写了前一个问题。我创建了一台桌面录音机,除了一件事以外它完美无缺。当我尝试对视频进行编码并将媒体放入我的输出文件夹.xesc时,它会抛出异常。

请记住,输出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)) 将保存到C盘上的Videos文件夹中。但是,当我尝试将其转换为.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();
        }
    }

我在下面发布了编码器。

****源代码******

以下是处理编码的源代码。我正在处理一些事情,如果你发现任何错误或任何更好的事情,请告诉我。它完美地工作并放置.xesc格式但它不会保存.wmv

.xesc

这不是一个问题,因为我可以手动转换Save_btnClik,但这需要时间。当我按下{{1}}时,我希望它能够正常工作。这发生在win8.1和win10中。

我需要获得哪种许可才能获得访问权限?

enter image description here

2 个答案:

答案 0 :(得分:0)

为什么你不使用&#34; SaveFileDiaLog&#34;。我认为这是最好的方法。你可以在&#34;工具箱&#34;中找到它。在Winform_application Visual studio中

答案 1 :(得分:0)

好的我发现Microsoft Expression Encoder 4并没有真正将文件保存为.wmv格式。它只将.xesc更改为.wmv。

我发现这一点后,我把它转换为我认为的.wmv我把它加载到Movie Maker,它说.xesc不支持。

因此,最终结果是MEE4编码器将生成.xesc格式。然后我也注意到真正转换文件的第三方转换器。视频和声音未同步。因此,除非我在某处错过了一段代码,否则第三方转换器就不行了。

所以我必须想办法真正将.xesc转换为另一种格式并保持帧速和同步。