如何在不损失质量的情况下合并两个mp4文件?


Answers:


41

我通常使用VirtualDub合并我的文件,但它似乎不支持mp4。那有什么选择呢?

Avidemux。就像VirtualDub一样,只支持更多格式以及内置编解码器和过滤器。我总是优先使用它。它加入AVC + AAC.MP4文件(无需重新编码)对我来说很好。

要将他们加入AviDemux:

  1. 文件->打开->选择文件
  2. 文件->附加->选择文件
  3. 全部设置为复制
  4. 文件->保存->文件名
  5. 等待..

根据AViDemux论坛,此加入过程是无损的(http://www.avidemux.org/smf/index.php?topic=9467.0)


是的,将音频与视频保持同步似乎非常好,而其他人对此问题的回答在恕我直言中令人怀疑。
— djangofan

1
我尝试使用Avidemux将两个文件连接在一起,但是音频不同步。
— GiddyUpHorsey

当可用音频材料的数量与视频帧的长度不匹配,或者存在任何流损坏时,您可能会遇到同步问题。您可能可以使用VideoRedo或ProjectX的“流修复”功能来解决此问题。
— bobince

1
但是这种方法有效:superuser.com/a/255566/1780哇!
— Christopher Galpin 2013年

4
如果您使用AviDemux连接两个Mp4文件,请不要忘记选择左下角的Mp4 Demux选项。否则,它可能会尝试将其转换为avi!

28

您可以使用ffmpeg做到这一点:

mkfifo temp0 temp1
ffmpeg -i input0.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y temp0 2> /dev/null & \
ffmpeg -i input1.mp4 -c copy -bsf:v 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已经存在,则该命令将失败。上面的版本使用命名管道,如果您使用的系统不支持命名管道,则必须使用中间文件(例如Windows):

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

有人可以avconv代替它解释如何完成ffmpeg吗?我能够完成前两个步骤,但最后一个步骤却无法识别-absf
— becko 2014年

@becko查看我的编辑。现在,您应该使用流说明符(请参见libav.org/avconv.html#Advanced-options)。
— slhck 2014年

2
+1仅供参考,您可以在上面的命令中代替avconv,ffmpeg它将起作用。
— becko 2014年

15

Concat多路分配器

concat多路分解器已添加到ffmpeg 1.1。如果您的ffmpeg版本过旧,请从此处获取最新的静态二进制文件: http : //www.ffmpeg.org/download.html

使用说明

mylist.txt使用以下形式创建一个要包含所有文件的文件(以短划线开头的行将被忽略):

# this is a comment
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

请注意,这些路径可以是相对路径,也可以是绝对路径。然后,您可以使用以下代码对文件进行编码:

ffmpeg -f concat -i mylist.txt -c copy output

可以使用bash for loop或使用printf生成此列表文件。以下任何一种都会生成一个包含工作目录中每个* .wav的列表文件:

for f in ./*.wav; do echo "file '$f'" >> mylist.txt; done
printf "file '%s'\n" ./*.wav > mylist.txt

来源:ffmpeg Wiki


8

YAMB和MP4BOX是一个不错的选择。
两者都下载并解压缩(无需安装,总共约5MB),在YAMB中选择“设置”并设置MP4box的文件夹路径。
要加入mp4文件,请选择“编辑”>“单击加入受支持的...”。


1
似乎是最好的解决方案,保持.mp4容器格式对作者来说似乎是更有吸引力的选择^^
— Oskar Duveborn

1
遇到困难之后,我使用了以下配置:MP4Box_path = E:\ Software \ Video Editing \ Yamb-2.1.0.0_beta2 \ MP4Box \ MP4Box.exe尝试合并从AVIDemux生成的4个500MB MP4文件。没用 该程序在那儿坐了45分钟,直到我最终放弃之前什么也不做。
— djangofan

1
由于音频同步问题,我在使用此方法时遇到了麻烦。那是一场噩梦...再也不尝试了。
— djangofan

6

SUPER©(简化的通用播放器编码器和渲染器)提供以下附加输出过程:

可以处理任何受支持的输入多媒体文件:

      o Join Format-Identical Files.
      o Mux Video & Audio Streams.
      o DeMux Extract Streams. 

当然,MP4是受支持的格式。

SUPER©是免费软件。


5
它的用户界面是我一生中见过的最恐怖的。我不是在开玩笑,这太可怕了。我再次强调它:我无法命名一个更糟糕的界面,我对此很认真,我从未见过任何低于“超级阈值”的东西。
— 卡米洛·马丁

5

尝试使用Matroska视频容器。

首先,您需要mkvtoolnix。下载并安装它,那么你需要火起来了mkvmerge GUI(除非你喜欢命令行工具,这是罚款,由我-尽管你可能想看看在链接部分的文件中的文件了mkvmerge)。

通过单击“添加”添加您的第一个文件。然后,单击“追加”,然后打开第二个文件。设置输出文件,点击底部的“开始混合”,然后离开!

如果该容器不适合您的需求,则可以对其重新编码,或尝试将其转换为其他格式...尽管MKV是一个非常可爱的容器!


它必须被混合吗?我不能混在一起加入吗?
— djangofan

好吧,如果您使用的是MKV容器,则从技术上讲,您正在对其进行重新混合。尝试一下,没有实时的惩罚...
— 突破

1

如果您可以在系统上播放它们,或者已安装编解码器,则Windows Movie Maker可能是最快(免费)的方式来连接两个文件。然后,您可以使用Virtualdub转换为其他格式。


Audacity似乎适用于音频文件。这是一个视频文件。
— Paolo Bergantino,

很抱歉,我读错了,尽管看到了MP部分和我的大脑,但还是很勇敢。
— William Hilsum

编辑答案...
— William Hilsum

AFAIK,Movie Maker不支持mp4,将其转换为其他格式意味着质量下降,问题被指定为不需要。
— Eran

我在Windows7上尝试了MovieMaker,将MP4文件加入WMV时音频变得不同步。此选项无效。
— djangofan

1

另一个解决方案是 Open Video Joiner。它还具有过渡效果。

在此处输入图片说明


它是一个共享软件。只需30美元,仅合并视频文件就不便宜
— Eran

据说是免费软件。对不起,如果我被误导了。
— harrymc
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.