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

FFmpeg通过filter_complex拼接不同起始时间音视频时输出过长问题

问题原因

你的问题出在 concat滤镜的使用逻辑和需求不匹配:concat滤镜的作用是将多个视频流按输入顺序首尾拼接,前一个流播放完毕后才会加载下一个流。你给每个视频添加PTS时间偏移后再执行拼接,相当于将所有视频的偏移量、自身时长全部累加,最终总时长自然会远超预期。

解决方案

你需要的是按各自设定的起始时间点播放视频,无视频时段默认显示黑底,该需求可以通过串联多个overlay滤镜实现:overlay支持多次嵌套串联,没有输入数量限制。

修改后的完整命令如下(可根据实际情况调整分辨率、帧率、最大时长参数):

ffmpeg -i audio_1.flv -i audio_2.flv -i audio_3.flv -i audio_4.flv -i audio_5.flv -i video_1.flv -i video_2.flv -i video_3.flv -i video_4.flv -filter_complex \
"[0]adelay=9761[audio0];[1]adelay=183387[audio1];[2]adelay=694634[audio2];[3]adelay=740306[audio3];[4]adelay=775587[audio4];[audio0][audio1][audio2][audio3][audio4]amix=5[audios];\
color=c=black:s=1920x1080:r=25:d=1000[bg];\
[5:v]setpts=PTS-STARTPTS+30.236/TB,tpad=stop_mode=add:stop_duration=1000[v0];\
[6:v]setpts=PTS-STARTPTS+201.314/TB,tpad=stop_mode=add:stop_duration=1000[v1];\
[7:v]setpts=PTS-STARTPTS+702.615/TB,tpad=stop_mode=add:stop_duration=1000[v2];\
[8:v]setpts=PTS-STARTPTS+921.682/TB,tpad=stop_mode=add:stop_duration=1000[v3];\
[bg][v0]overlay=eof_action=pass[bg1];\
[bg1][v1]overlay=eof_action=pass[bg2];\
[bg2][v2]overlay=eof_action=pass[bg3];\
[bg3][v3]overlay=eof_action=pass[videos]" \
-map [videos] -map [audios] -c:v h264 -c:a aac -shortest output.mp4
参数说明
  • color滤镜用于生成黑底背景画布:s参数修改为你需要的输出分辨率,r参数修改为和源视频一致的帧率,d参数修改为你预期的最大总时长即可
  • tpad滤镜用于给每个视频结束后补充透明帧,避免视频播放完毕后最后一帧一直停留在画布上
  • overlay的eof_action=pass参数表示当前叠加的视频流结束后,继续保留底层画布的内容
  • 末尾的-shortest参数会让最终输出时长自动对齐所有流中最长的那个的结束时间,避免背景多余的空白时长

该方案可以解决你遇到的时长异常、重复帧报错问题,不需要额外添加-vsync 2参数。

内容的提问来源于stack exchange,提问作者DummyBeginner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:36:10