问题描述
我正在尝试将两个视频相互合并,下面是我尝试使其工作的示例代码
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,但我敢肯定还有一些免费的库可以找到。
,一些可能的解决方案:
- 选中使用FFmpeg-https://stackoverflow.com/a/41387530/4000335的答案 可以从C#流程中调用。这个答案https://stackoverflow.com/a/1733516/4000335
- NReco VideoConverter FFmpeg包装器NuGet库(具有免费许可证选项),请查看此答案以获取串联示例-https://stackoverflow.com/a/23054427/4000335