使用C#合并/串联两个视频

问题描述

我正在尝试将两个视频相互合并,下面是我尝试使其工作的示例代码

    FileStream fs = new FileStream(@"C:\Users\test\Downloads\m.mp4",FileMode.Append);
    
    //m1,m2,m3 are video mp4 files on my disk
    var bytes = System.IO.File.ReadAllBytes(@"C:\Users\test\Downloads\m1.mp4");
    fs.Write(bytes,bytes.Length);
                    
    fs.Close();
    
    FileStream fs1 = new FileStream(@"C:\Users\test\Downloads\m.mp4",m2 are video mp4 files on my disk
    var bytes1 = System.IO.File.ReadAllBytes(@"C:\Users\test\Downloads\m2.mp4");
    fs1.Write(bytes1,bytes1.Length);
            
    fs1.Close();

现在发生的事情是,新视频具有两个视频的总大小,但仅显示一个视频,而时长仅为第一个视频。我该如何解决

解决方法

MP4格式应被视为类似于zip文件:一个文件袋可以容纳多个其他文件(例如音频流和视频流)。

打开文件时,将读取标题或索引,以便了解所需的内容。如果在第一个MP4内容之后合并第二个MP4,则该内容将不会被找到,因为它不在第一个标头中。从根本上来说是不同的,因此可以说一个文本文件,因为只有内容。

因此,您想要的是一个可以打开MP4并读取其索引,然后能够向该包中添加内容并更新索引的库。

在Google上快速浏览一下,就把我带到了VisioForge,但我敢肯定还有一些免费的库可以找到。

,

一些可能的解决方案:

  1. 选中使用FFmpeg-https://stackoverflow.com/a/41387530/4000335的答案 可以从C#流程中调用。这个答案https://stackoverflow.com/a/1733516/4000335
  2. NReco VideoConverter FFmpeg包装器NuGet库(具有免费许可证选项),请查看此答案以获取串联示例-https://stackoverflow.com/a/23054427/4000335