用FFmpeg合并多段视频或多段音频
🔗 合并在创作中的应用

将多段素材拼接为一个完整文件在多种创作场景中广泛使用:

  • 剧集与课程合成:将分集录制的课程、连续拍摄的多段素材按顺序拼接为完整视频,便于统一发布和归档。
  • 录音与播客合成:将分段录制的采访、旁白、播客音频按顺序合并为一期完整节目,无需打开专业剪辑软件。
  • 素材快速拼接:对编码参数一致的同源素材,使用 -c copy 无损拼接,速度极快且不损失画质。
📖 FFmpeg合并详解

FFmpeg合并多段媒体有两大方法:concat demuxer(文件列表法)和concat filter(滤镜法)。文件列表法适合大量同格式文件的顺序拼接;滤镜法适合少量输入、或需要重编码的情况。核心区别如下:

  • concat demuxer(文件列表法):先写一个文本列表文件,每行格式为 file '文件名',然后用 -f concat -i 列表.txt 读取。配合 -c copy 可以直接拷贝流数据、不重新编码,速度快、零画质损失,但要求数段的编码格式、分辨率、采样率等参数一致。
  • -safe 0:当列表中出现绝对路径或特殊字符文件名时,必须加上此参数,否则FFmpeg会拒绝读取该行。
  • concat filter(滤镜法):使用 -filter_complex "concat=n=段数:v=视频流数:a=音频流数"。适合不同格式、不同参数的素材合并(会重新编码),也可以只合并音频(v=0:a=1)或只合并视频(v=1:a=0)。
  • 滤镜法的流标签:多输入时需按 [输入号:v][输入号:a]... 的顺序列出各段流,输出用 -map "[v]" -map "[a]" 显式映射。
  • 如何选择:同格式素材优先文件列表法(无损);格式或参数不一致、或需要转码时用滤镜法。
广告
{{v.name}}
第一步,创建文件列表list.txt(每行一段,按拼接顺序),内容如下
file 'part1.mp4'
file 'part2.mp4'
file 'part3.mp4'
用文件列表无损合并多段视频,代码如下
$ ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
用文件列表无损合并多段音频,代码如下
file 'part1.mp3'
file 'part2.mp3'
file 'part3.mp3'
$ ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp3
用滤镜法合并多段音频(无需列表文件),代码如下
$ ffmpeg -i 1.mp3 -i 2.mp3 -i 3.mp3 -filter_complex "concat=n=3:v=0:a=1" output.mp3
用滤镜法合并不同格式的多段视频(自动重编码),代码如下
$ ffmpeg -i 1.mp4 -i 2.avi -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output.mp4
合并时统一分辨率(对参数不一致的视频先缩放再拼接),代码如下
$ ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex "[0:v]scale=1280:720[v0];[1:v]scale=1280:720[v1];[v0][0:a][v1][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output.mp4
友链