以下内容为转载,原谅地址:http://blog.youkuaiyun.com/doublefi123/article/details/47276739
方法一:FFmpeg concat 协议
ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg
ffmpeg -i input1.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input1.tsffmpeg -i input2.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input2.tsffmpeg -i input3.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input3.tsffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4
方法二:FFmpeg concat 分离器
file 'input1.mkv'file 'input2.mkv'file 'input3.mkv'
ffmpeg -f concat -i filelist.txt -c copy output.mkv
方法三:Mencoder 连接文件并重建索引
mencoder -forceidx -of lavf -oac copy -ovc copy -o output.flv input1.flv input2.flv input3.flv
方法四:使用 FFmpeg concat 过滤器重新编码(有损)
ffmpeg -i input1.mp4 -i input2.webm -i input3.avi -filter_complex '[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1 [v] [a]' -map '[v]' -map '[a]' <编码器选项> output.mkv
提示
- 以上三种方法,在可能的情况下,最好使用第二种。第一种次之,第三种更次。第四种是后备方案,尽量避免。
- 规格不同的视频合并后可能会有无法预测的结果。
- 有些媒体需要先分离视频和音频,合并完成后再封装回去。
- 对于 Packed B-Frames 的视频,如果封装成 MKV 格式的时候提示 Can't write packet with unknown timestamp,尝试在 FFmpeg 命令的 ffmpeg 后面加上 -fflags +genpts
下面说说我的情况
正好现在一个项目需要用到ffmpeg结合视频
巧的是看到这篇文章的时候已经试过第一种和第四种了
但是由于种种原因不得不再找到一种更好的命令用于vlc内核的播放
试了第三种也不能结合程序的视频
于是开始研究第二种最找推荐的方法
遇到唯一的一个问题就是在filelist.txt里面的文件路径
不能使用绝对路径只能是相对路径
查了各种资料和ffmpeg的官网都说绝对路径可以
但各种尝试就是不可以
于是改变方法,使用../../来用相对路径的方法定位视频
在filelist.txt里面加入/的话会报一个不安全文件路径的错误
Unsafe file path
只要加上 -safe 0就可以解决啦
ffmpeg -safe 0 -f concat -i filelist.txt -c copy output.avi
命令变成了这样
这种合成命令有一个好的地方就是速度非常快
之前用的是第四种再加上电脑配置不高
合成起来特别特别的慢无法忍受
推荐同样遇到使用ffmpeg合成文件的同学研究下第二种吧!
本文介绍四种使用FFmpeg合并视频片段的方法,包括concat协议、concat分离器、Mencoder连接文件及concat过滤器重新编码。每种方法针对不同格式的视频文件,提供详细的FFmpeg命令实例。
474

被折叠的 条评论
为什么被折叠?



