Windows Phone 8.1 MediaComposition – 拼接video时音频太快

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

以下是代码。 我错过了什么吗?

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

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

public static IAsyncOperation ConcatenateVideoRT([ReadOnlyArray]IStorageFile[] videoFiles, IStorageFolder outputFolder, string outputfileName) { return Task.Run(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(); } 

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

 MediaEncodingProfile _MediaEncodingProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Vga); 

并更改以下行:

 TranscodeFailureReason _TranscodeFailureReason = await _MediaComposition.RenderToFileAsync(_OutputFile); 

至:

 TranscodeFailureReason _TranscodeFailureReason = await _MediaComposition.RenderToFileAsync(_OutputFile, MediaTrimmingPreference.Fast, _MediaEncodingProfile); 

问题似乎是当使用VideoEncodingQuality.HD720p或VideoEncodingQuality.HD1080p时,RenderToFileAsync似乎无法正常工作,这两个设置都会重新创建快速音频问题。 此外,使用VideoEncodingQuality.Auto似乎导致编码失败(虽然我认为这意味着使用相机的默认设置)。

此外,我在微软合作伙伴社区论坛上发布了这个问题,他们的回答是编码可能在特定设备上失败,例如在他们的测试中,记录在Lumia 638上的video即使在其他设备上也无法编码/连接,但来自HTC的video8x,Lumia 920和Lumia 930可以在所有设备上编码,甚至是638。

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