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等)