C#如何串联2个MP4文件

时间:2018-07-14 19:19:16

标签: c# ffmpeg concatenation mp4 avconv

我有2个MP4文件,它们具有相同的帧大小和相同的帧速率。

我想使用C#将它们连接起来

任何合理的解决方案都可以...我不仅限于使用ffmpeg。

我也不介意对一个或两个文件进行转码。

是的,我尝试过使用ffmpeg,并使用了本贴子和其他所有创意 How to concatenate two MP4 files using FFmpeg?

也尝试过AVConv和MP4Box。我认为如果可以找到命令行选项,那么我的C#代码可以简单地执行该命令。

在一个输入文件上执行转码后,我能够使它们连接起来,然后使用传输流中间文件方法。但是,生成的文件偏移了1帧。这是文件的最后一帧,对我的应用程序来说非常重要。

我找到了一个名为Avdshare Video Converter的程序,该程序的确将文件合并为零。我现在只想在我的应用程序中执行此操作。

1 个答案:

答案 0 :(得分:1)

使用FFMPEG的解决方案!

以前发布的某些命令行示例需要一些关键更改。

请注意,我的问题不是说转码不是一种选择。

我最终将两个片段都转换为H.264。

ffmpeg -i clip1.mp4 -vcodec libx264 -acodec aac clip1h264.mp4
ffmpeg -i clip2.mp4 -vcodec libx264 -acodec aac clip2h264.mp4

然后我将它们转换为2个传输流。

ffmpeg -i clip1h264.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1.ts
ffmpeg -i clip2h264.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2.ts

然后将2个传输流连接在一起。最终串联成功的关键更改是删除了-copy选项,使命令变为:

ffmpeg -i "concat:temp1.ts|temp2.ts" -bsf:a aac_adtstoasc -y full.mp4

一旦所有这些命令都起作用,那就是使用Process.Start在我的C#代码中逐一执行它们。

祝那些尝试进行类似手术的人好运。希望这也对您有用!

特别感谢下降投票者的所有帮助和鼓励。继续努力,使编程世界变得更美好。