如何合并或连接两个或多个MP4文件以创建另一个MP4文件?[重复]


14

如何在最终输出的MP4文件中串联或合并2个或更多MP4文件?

我曾尝试在DOS窗口中使用COPY命令(我已在某处阅读过此命令),但它不能很好地运行。


另请参阅superuser.com/questions/43588/…了解更多信息。不知道我是否将该问题归类为重复问题。
突破

1
请添加您的操作系统作为标签。
tumchaaditya

Answers:


12

MP4Box可以做到这一点,尽管您可能希望使用它的GUI,例如YAMBMy MP4Box GUI。(注意:这不是个人的程序,这只是名称。)可从该站点获得Windows的MP4Box二进制文件。

例:

MP4Box -tmp $HOME -add vid.01.m4v \
    -cat vid.02.m4v -cat vid.03.m4v vid-out.mp4

4

我建议使用usind ffmpeg,它可用于Mac OS X,Linux和Windows

这是有关如何连接两部电影的很好的例子:http ://www.ffmpeg.org/faq.html#SEC27

在最后一步,您只需要确保为生成的文件制作一个MP4容器。


据我了解给出的ffmpeg常见问题解答,这不能用MP4(大概是H.264)视频来完成,因为它不是“特权格式”之一。
ttarchala

@ttarchala:我会尝试是否可以做到。我以前已经用FFmpeg转换为MP4,但从未串联两个电影。另外:我想指出,FFmpeg的发展非常迅速。不适用于一个版本的内容,可能仅适用于下一版本。
polemon

1
并非所有 FFMPEG版本都支持MP4。一方面,它是一项专利技术,并且可以说在美国免费分发MP4编码器是非法的。但是,许多构建都可以做到这一点。
CarlF 2011年

@CarlF:对于Linux和Mac OS X,这确实不是问题。该代码可以自由分发,因此,基本上,无论谁构建自己的FFmpeg都很好。至于专利,我想发表评论:我现在不会找到这个站点,但是AAC(在MPEG-4中部分定义)的第一个专利到期是在2022年。只是第一个,在完全合法之前还有很多需要终止……
polemon 2011年

4

您可以尝试使用ffmpeg进行此操作:

mkfifo temp0 temp1
ffmpeg -i input0.mp4 -c copy -bsf h264_mp4toannexb -f mpegts -y temp0 2> /dev/null & \
ffmpeg -i input1.mp4 -c copy -bsf h264_mp4toannexb -f mpegts -y temp1 2> /dev/null & \
ffmpeg -f mpegts -i "concat:temp0|temp1" -c copy -absf aac_adtstoasc output.mp4

这不会重新编码任何内容,而是将它们放置在新的传输流容器中,这使它们更易于串联,然后将它们串联回到MP4中。如果output.mp4已经存在,则该命令将失败。上面的版本使用命名管道,因为您使用的系统不支持那些必须使用中间文件的管道:

ffmpeg -i input0.mp4 -c copy -bsf h264_mp4toannexb temp0.ts
ffmpeg -i input1.mp4 -c copy -bsf h264_mp4toannexb temp1.ts
ffmpeg -i "concat:temp0.ts|temp1.ts" -c copy -absf aac_adtstoasc output.mp4

如果不是h264而是mpeg4怎么办?
爱迪生

2

更新:阅读其他答案后,只需检查一下我安装的avidemux。这就是您要寻找的(因为它的名字,它认为它不能做MP4…)。

我认为VirtualDubMod具有mp4功能,尽管我没有使用它,所以我肯定不知道。

您可能要签出MeGUI。这是一个相当复杂且功能丰富的应用程序和工具。

嵌入容器(在您的情况下为mp4)的工具称为多路复用器,虽然它可能无法将它们连接起来。

您可以将其与VirtualDub结合使用。Virtualdub连接视频流,复用器重新连接为mp4(无需重新编码)。


1

在用ffmpeg将它们转换为avi之后,我正在使用mencoder

这是一个简单的脚本,假设您有15个文件,名为01.mp4 ... 15.mp4

#!/bin/bash
for j in `seq -w 1 15`;
do
    echo converting file $j.avi
    ffmpeg -i $j.mp4 $j.avi        

    echo adding file $j.avi to list
    z="$z $j.avi"
done 

echo doing append
mencoder -oac copy -ovc copy $z -o all.avi

干杯


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.