【问题标题】:Merge/Concatenate two videos with c#使用 c# 合并/连接两个视频
【发布时间】:2021-01-13 03:40:04
【问题描述】:

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

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

现在发生的情况是,新视频的大小与两个视频的总和相同,但只显示第一个视频,并且只有第一个视频的持续时间。我该如何解决?

【问题讨论】:

标签: c# file video filestream video-processing


【解决方案1】:

MP4 格式应该被视为类似于 zip 文件:一个文件作为一个包含多个其他文件(如音频流和视频流)的包。

打开文件时,会读取标题或索引以了解预期的内容。如果您在第一个 MP4 内容之后连接第二个 MP4,那么将永远找不到该内容,因为它不在第一个标头中。这是根本不同的,然后让我们说一个文本文件,因为那时只有内容。

所以你想要的是一个库,它可以打开 MP4 并读取它的索引,然后能够将内容添加到该包并更新索引。

在 google 上的快速浏览将我带到了 VisioForge,但我确信也有一些免费的库可以找到。

【讨论】:

    【解决方案2】:

    一些可能的解决方案:

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

    【讨论】:

    • 非常感谢您提供的解决方案,它们使用 .net 框架,但它们不适用于 .net 标准和 xamarin。是否有关于将 FFmpeg 与 xamarin forms/ios 一起使用的解决方案
    • xamarin/ios 要求在问题和标签中都不清楚,可能可以使用本教程 - raywenderlich.com/… 特别是“合并视频”部分。 Swift 代码需要翻译成 C# 才能工作。也许这也是 - stackoverflow.com/questions/51671353/…
    猜你喜欢
    • 2017-02-11
    • 2020-07-28
    • 2013-06-15
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2019-03-01
    相关资源
    最近更新 更多