C#通用平台音频合并或输入视频
Posted
技术标签:
【中文标题】C#通用平台音频合并或输入视频【英文标题】:C# universal platform audio merge or input in video 【发布时间】:2017-01-24 22:01:21 【问题描述】:我尝试在 .mp4 中输入 .aac
众所周知
ffmpeg cmd
ffmpeg -i audio.mp3 -i video.mp4 -c copy output
如何在 c# uwp 中进行操作,我在 google 中搜索过,我没有看到任何关于此问题的结果,每个人都发布了转换问题。
但是如何将它与 c# 合并任何示例项目或信息都会很棒
【问题讨论】:
【参考方案1】: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 渲染为文件生成的分辨率太低了有没有办法用音频克隆 mp4 文件 @AsifSariar,MediaComposition.RenderToFileAsync
有几种重载方法,使用this one,您可以将MediaEncodingProfile
分配给您想要保持质量的内容。如果您在使用这些参数时仍有问题,您可以打开一个新线程。感谢理解。
可以,但是文件太大了;假设我使用 create mp4 HD1080p ,我的默认文件分辨率也是 1080 p,但大小为 50 mb 和 .aac 2 mb,所以总共 52 mb,所以在通过渲染文件大小创建新的 mp4 HD1080p 对声音进行编码后,得到 400 mb ,关于它的任何解决方案【参考方案2】:
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;
【讨论】:
以上是关于C#通用平台音频合并或输入视频的主要内容,如果未能解决你的问题,请参考以下文章