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#通用平台音频合并或输入视频的主要内容,如果未能解决你的问题,请参考以下文章

C# windows phone - 合并音频和视频文件

在 Uno 平台上合并音频和视频

在 C# 中合并两个音频文件

访问 PC 音频输入流

在 C# 中使用 FFMPEG 合并音频和视频文件

C语言音频输入/输出[关闭]