You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用FFmpeg vstack滤镜保留两个视频的音轨?

FFmpeg vstack垂直拼接视频并保留双音轨解决方案

问题背景

需要用FFmpeg的vstack滤镜将两个视频垂直拼接,同时保留两个视频的音轨。

最初使用的命令:

ffmpeg -i e:\tt140_H.mp4 -i e:\tt140_m.mp4 -vsync 2 -filter_complex vstack e:\tt140+.mp4

仅保留了第一个视频的音轨,第二个视频的音轨丢失。

后续尝试的命令:

ffmpeg -i e:\tt140_H.mp4 -i e:\tt140_m.mp4 -vsync 2 -filter_complex "[0:v][1:v]vstack,amerge[a]" -c:a aac e:\tt140+.mp4

出现错误:

媒体类型不匹配:'Parsed_vstack_0'滤镜输出端口0是视频,而'Parsed_amerge_1'滤镜输入端口0是音频

错误原因

vstack是视频滤镜,输出的是视频流;而amerge是音频滤镜,仅能接收音频流。直接将视频滤镜的输出接入音频滤镜输入,必然导致媒体类型不匹配。

正确命令

需要在滤镜链中分别处理视频和音频流,再将处理后的流映射到输出文件:

ffmpeg -i e:\tt140_H.mp4 -i e:\tt140_m.mp4 -vsync 2 -filter_complex "[0:v][1:v]vstack[v];[0:a][1:a]amerge[a]" -map "[v]" -map "[a]" -c:a aac -ac 2 e:\tt140+.mp4

参数说明

  • [0:v][1:v]vstack[v]:将第一个输入的视频流(0:v)和第二个输入的视频流(1:v)垂直拼接,输出标记为[v]
  • [0:a][1:a]amerge[a]:将第一个输入的音频流(0:a)和第二个输入的音频流(1:a)合并,输出标记为[a]
  • -map "[v]" -map "[a]":明确指定输出文件使用处理后的视频流和音频流
  • -ac 2:强制将合并后的音频转为双声道,避免部分播放器不支持多声道音频

特殊场景处理

如果两个视频时长不一致,想要以较短的视频时长为准结束输出,可添加-shortest参数:

ffmpeg -i e:\tt140_H.mp4 -i e:\tt140_m.mp4 -vsync 2 -filter_complex "[0:v][1:v]vstack[v];[0:a][1:a]amerge[a]" -map "[v]" -map "[a]" -c:a aac -ac 2 -shortest e:\tt140+.mp4

内容的提问来源于stack exchange,提问作者Peter.k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:05:17