【发布时间】:2017-01-24 22:01:21
【问题描述】:
我尝试在 .mp4 中输入 .aac
众所周知
ffmpeg cmd
ffmpeg -i audio.mp3 -i video.mp4 -c copy output
如何在 c# uwp 中进行操作,我在 google 中搜索过,我没有看到任何关于此问题的结果,每个人都发布了转换问题。
但是如何将它与 c# 合并任何示例项目或信息都会很棒
【问题讨论】:
我尝试在 .mp4 中输入 .aac
众所周知
ffmpeg cmd
ffmpeg -i audio.mp3 -i video.mp4 -c copy output
如何在 c# uwp 中进行操作,我在 google 中搜索过,我没有看到任何关于此问题的结果,每个人都发布了转换问题。
但是如何将它与 c# 合并任何示例项目或信息都会很棒
【问题讨论】:
C#通用平台音频合并或输入视频
UWP 提供有关此要求的 API。这个特性可以通过MediaComposition类的BackgroundAudioTracks方法在uwp中实现。具体操作方法请参考Add a background audio track to a composition。您可以从MediaEditing official sample 的场景 3 中找到示例。
例如:
// Create the original MediaComposition
var clip = await MediaClip.CreateFromFileAsync(pickedFile);
composition = new MediaComposition();
composition.Clips.Add(clip);
// Add background audio
var picker = new Windows.Storage.Pickers.FileOpenPicker();
picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.MusicLibrary;
picker.FileTypeFilter.Add(".mp3");
picker.FileTypeFilter.Add(".wav");
picker.FileTypeFilter.Add(".flac");
var audioFile = await picker.PickSingleFileAsync();
if (audioFile == null)
{
rootPage.NotifyUser("File picking cancelled", NotifyType.ErrorMessage);
return;
}
var backgroundTrack = await BackgroundAudioTrack.CreateFromFileAsync(audioFile);
composition.BackgroundAudioTracks.Add(backgroundTrack);
// Render to MediaElement
mediaElement.Position = TimeSpan.Zero;
mediaStreamSource = composition.GeneratePreviewMediaStreamSource((int)mediaElement.ActualWidth, (int)mediaElement.ActualHeight);
mediaElement.SetMediaStreamSource(mediaStreamSource);
MediaComposition 是根据视频文件创建的。 BackgroundAudioTrack 是从您想要合并到视频的 Mp3 或其他音频文件创建的。最后,我们需要render the MediaComposition to file(样本渲染到MediaElement播放)。
【讨论】:
MediaComposition.RenderToFileAsync 有几种重载方法,使用this one,您可以将MediaEncodingProfile 分配给您想要保持质量的内容。如果您在使用这些参数时仍有问题,您可以打开一个新线程。感谢理解。
public async Task<StorageFile> MergeVideoAudioAsync(StorageFile videoFile, StorageFile audioFile, string finalFileName, StorageFolder destinationFolder)
{
MediaComposition composition = new MediaComposition();
var file = await destinationFolder.CreateFileAsync(finalFileName, CreationCollisionOption.GenerateUniqueName);
var clip = await MediaClip.CreateFromFileAsync(videoFile);
composition.Clips.Add(clip);
var backgroundTrack = await BackgroundAudioTrack.CreateFromFileAsync(audioFile);
composition.BackgroundAudioTracks.Add(backgroundTrack);
await composition.RenderToFileAsync(file);
return file;
}
【讨论】: