我想用UWP media composition编辑视频文件,然后将其保存回现有文件。但是,当我选择相同的文件时,渲染将不起作用,因为数据流已损坏。
作为一种解决方法,我将视频渲染到一个临时文件,然后将其移动到现有位置:
// Create temp file
var tempFolder = ApplicationData.Current.TemporaryFolder;
StorageFile tempFile = await tempFolder.CreateFileAsync(Guid.NewGuid().ToString(), CreationCollisionOption.ReplaceExisting);
// Render video to temp file so stream get not corrupted
mediaComposition.RenderToFileAsync(tempFile, MediaTrimmingPreference.Precise);
// If rendering completed move temp file to existing video
await tempFile.MoveAndReplaceAsync(existingFile);
我的解决方法工作正常,除了临时文件夹位于我的本地磁盘上,并且当我编辑外部磁盘上的大视频文件时,我的本地磁盘上的存储空间可能用完了。
还有另一种可能性可以用RenderToFileAsync()
覆盖现有文件吗?
更新:
如注释中所建议,我使用以下代码将文件大小设置为零,但随后得到了FileNotFoundException
:
var stream = await file.OpenAsync(FileAccessMode.ReadWrite);
stream.Size = 0;
stream.Dispose();