Windows Phone 8.1 MediaComposition - 拼接视频时音频速度过快
Windows Phone 8.1 MediaComposition - Audio Too Fast When Stitching Videos
我在尝试将多个视频连接在一起时遇到问题。每当我合并 2 个或更多视频时,音频以双倍速度播放,而视频正常播放。
下面是代码。我错过了什么吗?
我在测试但克隆单个视频或选择多个视频时得到相同的结果。
我已经与代码示例进行了比较here(我没有修整)。
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();
}
看起来有两个问题。我通过添加以下行来完成此工作:
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 似乎会导致编码失败(尽管我认为这是为了使用相机的默认设置)。
此外,我在 Microsoft 合作伙伴社区论坛上发布了这个问题,他们的回应是编码在特定设备上可能会失败,例如在他们的测试中,在 Lumia 638 上录制的视频即使在其他设备上也无法 encoded/concatenated,但是来自 HTC 8x、Lumia 920 和 Lumia 930 的视频可以在所有设备上编码,即使是 638。
他们认为这是设备问题(固件)而不是 Windows.Media.Editing API 问题。
我在尝试将多个视频连接在一起时遇到问题。每当我合并 2 个或更多视频时,音频以双倍速度播放,而视频正常播放。
下面是代码。我错过了什么吗?
我在测试但克隆单个视频或选择多个视频时得到相同的结果。
我已经与代码示例进行了比较here(我没有修整)。
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();
}
看起来有两个问题。我通过添加以下行来完成此工作:
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 似乎会导致编码失败(尽管我认为这是为了使用相机的默认设置)。
此外,我在 Microsoft 合作伙伴社区论坛上发布了这个问题,他们的回应是编码在特定设备上可能会失败,例如在他们的测试中,在 Lumia 638 上录制的视频即使在其他设备上也无法 encoded/concatenated,但是来自 HTC 8x、Lumia 920 和 Lumia 930 的视频可以在所有设备上编码,即使是 638。
他们认为这是设备问题(固件)而不是 Windows.Media.Editing API 问题。