这个问题小白么?的确是,但是问的人还很多很多。
这里把我知道的所有的常见不常见问题和使用场景都罗列一下,以及我感觉的优缺点,一并列出。
我们只讨论无损合并。
有损合并永远可以先转换成MPG然后合并,最终转码。这就失去意义了。
1.Win下怎么无脑合并H.264视频?
我不知道为什么大量的所谓合并软件还在使用有损合并,虽然无损合并其实特别简单。
当然不能忘记这货:

下载地址自寻。这俩东西都好找。
更新:
硕鼠的技术人员友好的告诉了我硕鼠合并的核心。
核心是flvbind+MP4Box,而不是ffmpeg。因为ffmpeg太大。(Linux下一个ffmpeg的binary就26M左右)
用法:
flvbind all.flv 1.flv 2.flv to bind 1.flv and 2.flv
2.Linux呢?
1)FFmpeg。
我估计http://www.ffmpeg.org/faq.html#How-can-I-concatenate-video-files_003f 已经吓尿了大部分人,http://trac.ffmpeg.org/wiki/How%20to%20concatenate%20(join,%20merge)%20media%20files 又有些误导,让大家以为FFmpeg只能合并avi。甚至有提出先mux成ts流然后再concat的Hentai存在。。
非也。
对于MPG文件:
ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg
清晰简单。
官方没直接写怎么处理H.264,只给了这个不明不白的例子:
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4
估计这就是TS说的来历。
其实这事根本不用那么复杂:
看Biligrab的代码:
f = open('ff.txt', 'w')
ff = ''
os.getcwd()
for i in range(vid_num):
ff = ff + 'file \'' + str(os.getcwd()) + '/'+ str(i) + '.flv\'\n'
ff = ff.encode("utf8")
f.write(ff)
f.close()
print('Concating videos...')
os.system('ffmpeg -f concat -i ff.txt -c copy "'+filename+'".mp4')
os.system('rm -r ff.txt')
for i in range(vid_num):
os.system('rm -r ‘+str(i)+'.flv')
换成人话:
例如,你有这几个flv文件要连在一起:
1.flv 2.flv 3.flv
你要做的是:
建立一个文本文件,例如ff.txt:
在里面写:
file ‘路径,同目录可以省略/1.flv’
file ‘路径,同目录可以省略/2.flv’
file ‘路径,同目录可以省略/3.flv’
然后去shell里面运行:
ffmpeg -f concat -i 路径/ff.txt -c copy out.mp4
(-i:设定输入文件 -f:设定编码器,这里使用concat,无损合并方法 -c 流选择器,这里选择所有流 最后可以选择任何可以封装的格式,不一定是MP4)
[notice]参数顺序不能错,否则会拉肚子![/notice]
速度几乎是你硬盘的IO速度。
优点:几乎不拉肚子
缺点:需要建立一个文件
2)MP4Box法:
MP4Box -cat file1.mp4 -cat file2.mp4 output.mp4
m4v文件也可以。
优点:简单明了可靠
缺点:不支持flv,呵呵呵呵。。。
3.歪门邪道有没有?
有啊。
4)Mencoder法
mencoder -oac copy -ovc copy -idx -o output.avi video1.avi video2.avi video3.avi
不保证不拉肚子啊。
MPEG1,MPEG2用这个会很不错。
5)FLVCopyCat
https://github.com/shinohane/FLVCopyCat
本来想用,但是这个东西的timestamp貌似会拉肚子。
风险自担。
参考资料:
http://forum.doom9.org/archive/index.php/t-93240.html
http://www.flvcd.com/teacher2.htm
http://www.onlinedown.net/soft/65496.htm
http://trac.ffmpeg.org/wiki/How%20to%20concatenate%20(join,%20merge)%20media%20files
http://www.ffmpeg.org/faq.html#How-can-I-concatenate-video-files_003f