1 mp4格式:
裁剪从一个视频中的1分钟、2分钟、3分钟开始截取10秒
ffmpeg -i test_1280x720.mp4 -ss 00:01:00 -t 10 -codec copy copy1.mp4
ffmpeg -i test_1280x720.mp4 -ss 00:02:00 -t 10 -codec copy copy2.mp4
ffmpeg -i test_1280x720.mp4 -ss 00:03:00 -t 10 -codec copy copy3.mp4
合并:
方法1:
ffmpeg -i “concat:copy1.mp4|copy2.mp4|copy3.mp4” -codec copy out_mp41.mp4
(这个方法播放完第一个视频后,没继续播放后面的)
方法2:
ffmpeg -f concat -i mp4list.txt -codec copy out_mp42.mp4
mp4list.txt:
2 ts格式:
转成ts格式
ffmpeg -i copy1.mp4 -codec copy -vbsf h264_mp4toannexb copy_1.ts
ffmpeg -i copy2.mp4 -codec copy -vbsf h264_mp4toannexb copy_2.ts
ffmpeg -i copy3.mp4 -codec copy -vbsf h264_mp4toannexb copy_3.ts
合并:
方法1:
ffmpeg -i “concat:copy_1.ts|copy_2.ts|copy_3.ts” -codec copy out_ts1.mp4
方法2:
ffmpeg -f concat -i tslist.txt -codec copy out_ts2.mp4
tslist.txt:
(方法一和方法二在输出文件上时间有点不同,方法一中输出文件 时间38秒,但播放在20秒时就直接变成30秒,但画面是正常的。实际播放时间也是30秒)
3 flv格式:
转成flv格式
ffmpeg -i copy1.mp4 -codec copy copy1.flv
ffmpeg -i copy2.mp4 -codec copy copy2.flv
ffmpeg -i copy3.mp4 -codec copy copy3.flv
合并:
方法1:
ffmpeg -i “concat:copy1.flv|copy2.flv|copy3.flv” -codec copy out_flv1.mp4
(这个方法播放完第一个视频后,没继续播放后面的)
方法2:
ffmpeg -f concat -i flvlist.txt -codec copy out_flv2.mp4
flvlist.txt:
建议:1、使用方法二进行拼接
2、转成ts文件进行拼接
(分离某些封装格式(例如mp4/flv/mkv等)中的h264的时候,需要首先写入SPS和PPS,否则会导致分离出来 的数据没有SPS、PPS而 无法播放,h264码流的SPS和PPS信息存储在AVCodecContext结构体的extradata中,需要使用ffmpeg中名称为"h264_mp4toannexb"的bitstream filter处理)
不同编码格式的拼接情况
1:
修改音频编码
ffmpeg -i copy2.mp4 -vcodec copy -acodec ac3 -vbsf h264_mp4toannexb copy2_ac3.ts
此时是还可以播放的:ffplay copy2_ac3.ts
(播放时是有10秒,但知道文件显示只有4秒多)
mpeg -i “concat:copy_1.ts|copy2_ac3.ts|copy_3.ts” -codec copy out_ts1.mp4
ffplay out_ts1.mp4,播放完第一段就到第三段了,第二段没有了
1:
修改音频采样率
ffmpeg -i copy2.mp4 -vcodec copy -acodec aac -ar 96000 -vbsf h264_mp4toannexb copy2_aac.ts
ffmpeg -i “concat:copy_1.ts|copy2_aac.ts|copy_3.ts” -codec copy out_ts1.mp4
ffplay out_ts1.mp4,播放完第一段就到第三段了,第二段没有了
2:
修改视频编码格式
ffmpeg -i copy2.mp4 -vcodec libx265 -acodec copy copy2_265.ts
ffmpeg -i “concat:copy_1.ts|copy2_265.ts|copy_3.ts” -coc copy out_ts1.mp4
(播放到第二段时只声音正常,没画面,到第三段又恢复正常)
3:
修改视频分辨率
ffmpeg -i copy2.mp4 -vcodec libx264 -s 800x472 -acodec copy -vbsf h264_mp4toannexb copy2_264.ts
ffmpeg -i “concat:copy_1.ts|copy2_264.ts|copy_3.ts” -coc copy out_ts1.mp4
(可以播放)
最后:
1:视频分辨率可以不同,但是编码格式需要一样
2:音频编码格式需要一样,音频参数采样率、声道等也要一样的
3:把每个视频封装格式统一为ts流,在拼接输出时现设置需要的封装格式(MP4等)