ffmpeg 视频拼接

来源:互联网 发布:优化排名工具 编辑:程序博客网 时间:2024/06/05 11:02

1. 视频拼接

ffmpeg视频拼接需要用concat参数。
此外ffmpeg拼接的视频和原视频的封装格式有关


2. ffmpeg视频拼接的几种方法

2.1 利用文件列表

# this is a commentfile '/path/to/file1'file '/path/to/file2'file '/path/to/file3'
ffmpeg -f concat -i mylist.txt -c copy output

2.2 不利用文件列表

ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg

这种方法不友好,有些情况下用不成功

2.3. 拼接不同编码格式的文件

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

如你所见,上面的命令合并了三种不同格式的文件,FFmpeg concat 过滤器会重新编码它们。注意这是有损压缩。
[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] 分别表示第一个输入文件的视频、音频、第二个输入文件的视频、音频、第三个输入文件的视频、音频。concat=n=3:v=1:a=1 表示有三个输入文件,输出一条视频流和一条音频流。[v] [a] 就是得到的视频流和音频流的名字,注意在 bash 等 shell 中需要用引号,防止通配符扩展。

2.4 注意事项

  1. 输入文件必须是有序的
  2. 输入文件格式最好相同
  3. 输入文件大小不同时后面的文件会被自动拉伸为和第一个文件同分辨率,当然也存在编码问题,自然会很慢
  4. 对于 Packed B-Frames 的视频,如果封装成 MKV 格式的时候提示 Can’t write packet with unknown timestamp,尝试在 FFmpeg 命令的 ffmpeg 后面加上 -fflags +genpts

3. 文件格式友好性

这里写图片描述

4. 非友好格式文件

遇到某些非友好格式文件或者拼接的视频无法正常播放时,最好将视频格式转换为ts或者mpg

5. 参考文献

[1] http://trac.ffmpeg.org/wiki/Concatenate

0 0
原创粉丝点击