如何在不损失质量的情况下合并两个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仅供参考,您可以在上面的命令中代替avconvffmpeg它将起作用。
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

YAMBMP4BOX是一个不错的选择。
两者都下载并解压缩(无需安装,总共约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.