Windows Phone 8.1 MediaComposition - 拼接视频时音频太快

J_D*_*J_D 5 c# windows-phone windows-phone-8 windows-phone-8.1

尝试将多个视频连接在一起时遇到问题.每当我合并2个或更多视频时,音频以双倍速度播放,而视频正常播放.

下面是代码.我错过了什么吗?

我在测试时会得到相同的结果,但是克隆单个视频或选择多个视频.

我已经比较了这里的代码示例(我没有修剪).

public static IAsyncOperation<IStorageFile> ConcatenateVideoRT([ReadOnlyArray]IStorageFile[] videoFiles, IStorageFolder outputFolder, string outputfileName)
    {
        return Task.Run<IStorageFile>(async () =>
        {
            IStorageFile _OutputFile = await outputFolder.CreateFileAsync(outputfileName, CreationCollisionOption.GenerateUniqueName);

            MediaComposition _MediaComposition = new MediaComposition();
            foreach (IStorageFile _VideoFile in videoFiles)
            {
                MediaClip _MediaClip = await MediaClip.CreateFromFileAsync(_VideoFile);
                _MediaComposition.Clips.Add(_MediaClip);
                _MediaComposition.Clips.Add(_MediaClip.Clone());
            }

            TranscodeFailureReason _TranscodeFailureReason = await _MediaComposition.RenderToFileAsync(_OutputFile);
            if (_TranscodeFailureReason != TranscodeFailureReason.None)
            {
                throw new Exception("Video Concatenation Failed: " + _TranscodeFailureReason.ToString());
            }

            return _OutputFile;
        }).AsAsyncOperation();
    }
Run Code Online (Sandbox Code Playgroud)

J_D*_*J_D 3

看起来有两个问题。我通过添加以下行来实现此功能:

MediaEncodingProfile _MediaEncodingProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Vga);
Run Code Online (Sandbox Code Playgroud)

并更改以下行:

TranscodeFailureReason _TranscodeFailureReason = await _MediaComposition.RenderToFileAsync(_OutputFile);
Run Code Online (Sandbox Code Playgroud)

到:

TranscodeFailureReason _TranscodeFailureReason = await _MediaComposition.RenderToFileAsync(_OutputFile, MediaTrimmingPreference.Fast, _MediaEncodingProfile);
Run Code Online (Sandbox Code Playgroud)

问题似乎是使用 VideoEncodingQuality.HD720p 或 VideoEncodingQuality.HD1080p 时 RenderToFileAsync 似乎无法正常工作,这两种设置都会重新产生快速音频问题。另外,使用 VideoEncodingQuality.Auto 似乎会导致编码失败(尽管我认为它意味着使用相机的默认设置)。

此外,我在微软合作伙伴社区论坛上发布了这个问题,他们的回应是编码在特定设备上可能会失败,例如在他们的测试中,在 Lumia 638 上录制的视频甚至在其他设备上也无法编码/连接,但来自 HTC 的视频8x、Lumia 920 和 Lumia 930 可以在所有设备(甚至 638)上进行编码。

他们认为这是设备问题(固件)而不是 Windows.Media.Editing API 问题。