【问题标题】:C# universal platform audio merge or input in videoC#通用平台音频合并或输入视频
【发布时间】:2017-01-24 22:01:21
【问题描述】:

我尝试在 .mp4 中输入 .aac

众所周知

ffmpeg cmd
ffmpeg -i audio.mp3 -i video.mp4 -c copy output

如何在 c# uwp 中进行操作,我在 google 中搜索过,我没有看到任何关于此问题的结果,每个人都发布了转换问题。

但是如何将它与 c# 合并任何示例项目或信息都会很棒

【问题讨论】:

    标签: c# audio video merge uwp


    【解决方案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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-02
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 2016-06-13
      相关资源
      最近更新 更多