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

FFmpeg在Ubuntu Desktop i386 16.04.4系统下拼接多段短视频时遭遇循环及缓冲区溢出问题求助

FFmpeg在Ubuntu Desktop i386 16.04.4系统下拼接多段短视频时遭遇循环及缓冲区溢出问题求助

问题描述

我从2016年开始用FFmpeg处理视频,现在需要拼接一批时长在4-180秒之间的短视频,操作设备是装了Windows 7和Ubuntu Desktop i386 16.04.4的笔记本。

之前我给视频文件创建了符号链接(比如把first.mp4链接成1,second.mp4链接成2),用下面的命令拼接8个视频,效果一直很好:

ffmpeg -i 1 -i 2 -i 3 -i 4 -i 5 -i 6 -i 7 -i 8 -sn -filter_complex [0][1][2][3][4][5][6][7]concat=n=8:v=1:a=1 -r 25 Begin25d.mp4

我用的FFmpeg版本是:

ffmpeg version 2.8.17-0ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609

但当我尝试拼接13个视频时,FFmpeg开始弹出**“overflow buffer”**的警告,计算时间变得特别长,后续还出现了片段被循环重复拼接的问题。另外我还发现,如果让工具从文件读取滤镜脚本,它又没法同时从文件读取输入文件名,结果还是会导致片段被多次重复拼接。

解决方案建议

针对你在32位i386系统下拼接多文件遇到的问题,推荐用FFmpeg的concat demuxer替代之前的concat滤镜,这种方式对内存占用更低,能有效避免缓冲区溢出和循环拼接的问题:

  1. 先创建一个文本文件(比如命名为filelist.txt),按拼接顺序写入所有视频文件的路径,每一行格式如下:
file '/home/yourname/videos/first.mp4'
file '/home/yourname/videos/second.mp4'
file '/home/yourname/videos/third.mp4'
...

如果视频和文本文件在同一目录,直接写文件名即可;路径有空格的话一定要用单引号括起来,避免识别错误。

  1. 执行下面的命令完成拼接:
ffmpeg -f concat -safe 0 -i filelist.txt -sn -r 25 Begin25d.mp4
  • -f concat:指定使用concat demuxer模式
  • -safe 0:允许FFmpeg读取任意路径的文件(如果文件都在同一目录,这个参数可以省略)
  • -sn和-r 25:和你之前的命令保持一致,分别用来禁用字幕流、设置输出帧率

这种方式是直接按文件顺序拼接视频流,不需要像concat滤镜那样把所有输入文件加载到内存里,非常适合32位系统和多文件拼接的场景。

另外你的FFmpeg版本比较旧,要是后续还有问题,可以考虑通过Ubuntu的ppa源升级到16.04支持的最新版本,新版本修复了不少旧bug,对多文件拼接的兼容性会更好。

备注:内容来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:24:32