保存时间:2026/3/29 20:26:27
-i 输入两个 MP4 文件无法拼接,核心原因是 MP4 封装格式不支持简单串联,需先将文件转成 MPEG-TS 格式(传输流) 再合并,具体步骤如下:1.mp4 和 2.mp4 分别转为无压缩损失的 TS 文件:ffmpeg -i 1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1.ts
ffmpeg -i 2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2.ts
-c copy:直接复制音视频流,无重新编码,速度快且无质量损失。-bsf:v h264_mp4toannexb:修复 H.264 视频流的格式,使其兼容 TS 封装。output.mp4:ffmpeg -i "concat:temp1.ts|temp2.ts" -c copy -bsf:a aac_adtstoasc output.mp4
concat:temp1.ts|temp2.ts:通过 concat 协议串联两个 TS 文件(用 | 分隔)。-bsf:a aac_adtstoasc:修复 AAC 音频流的格式,确保 MP4 封装正常。temp1.ts 和 temp2.ts),避免占用空间。-filter_complex参数来重新编码并拼接。命令如下:ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "(0:v:0)(0:a:0)(1:v:0)(1:a:0) concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mp4。这个命令会重新编码使两个视频的格式匹配,不过处理时间会更长。concat 解复用器就能拼,命令比转 TS 更简单:ffmpeg -f concat -i list.txt -c copy output.mp4
list.txt 是你提前创建的文本文件,内容只需要两行(指定要拼接的文件路径):file '第一个视频.mp4'
file '第二个视频.mp4'
concat 直接拼接(-c copy 模式)要求视频流的 **“基础编码参数” 完全一致 **,码率是其中关键参数之一。ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex "concat=n=2:v=1:a=1[outv][outa]" -c:v libx264 -b:v 2000k -c:a aac -b:a 128k -map "[outv]" -map "[outa]" output.mp4
-b:v 2000k 和 -b:a 128k 分别指定了统一的视频和音频码率,可根据需求调整。这种方式虽然耗时更长,但能确保拼接后的视频播放流畅。