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

使用ffmpeg创建马赛克视频时如何指定各输入流起始时间

FFmpeg 对齐多源流时间轴生成同步马赛克拼接视频

核心问题原因

你之前使用的命令存在两个核心缺陷:

  • 没有给不同起始时间的输入配置时间偏移,所有流默认从输出文件的0秒位置开始播放,完全忽略了各录制端启动时间的差值
  • 没有统一输入视频的规格、没有对多路音频做混合处理,不仅时间轴不对,还容易触发堆叠滤镜报错,最终输出也只会保留单路音轨。

操作步骤

1. 计算每路流的时间偏移

  • 提取所有录制文件的起始Unix时间戳,找出最小的时间戳作为全局时间轴的0点基准
  • 对每一路的视频、音频文件,单独计算偏移值:
    单路偏移值(单位:秒) = (当前文件的起始时间戳 - 全局基准时间戳) / 1000
    

以你给出的时间戳为例:
全局基准为第一路的1657135694178,第二路的偏移值为(1657135711762 - 1657135694178)/1000 = 17.584秒,即第二路的音视频需要在全局时间轴走到17.584秒时才开始呈现,前序时段自动补黑帧、静音。

2. 使用调整后的FFmpeg命令

核心调整点:

  • 每个输入文件前增加-itsoffset参数指定对应偏移,同一路的视频、音频必须配置相同偏移值,避免音画不同步
  • 视频流先统一分辨率、帧率,再做堆叠,避免滤镜报错
  • 所有音频流统一采样率后做混音,输出时长对齐最长的输入流

对应示例命令(以你给出的2路流、第二路偏移17.584秒为例):

ffmpeg \
  -fflags +genpts \
  # 第一路(基准流),偏移0秒
  -itsoffset 0 -i video-1.mkv \
  -itsoffset 0 -i audio-1.mka \
  # 第二路,偏移17.584秒
  -itsoffset 17.584 -i video-2.mkv \
  -itsoffset 17.584 -i audio-2.mka \
  -filter_complex "
    [0:v]scale=1280:720,fps=30,setpts=PTS-STARTPTS[v0];
    [2:v]scale=1280:720,fps=30,setpts=PTS-STARTPTS[v1];
    [v0][v1]vstack=inputs=2[outv];
    [1:a]aresample=48000,asetpts=PTS-STARTPTS[a0];
    [3:a]aresample=48000,asetpts=PTS-STARTPTS[a1];
    [a0][a1]amix=inputs=2:duration=longest[outa]
  " \
  -map "[outv]" -map "[outa]" \
  -c:v libx264 -crf 23 -preset medium \
  -c:a aac -b:a 192k \
  output-1.mkv

注意事项

  • -itsoffset参数必须放在对应-i输入参数的前面,放在输入后不会对该文件生效
  • 超过2路流时按照相同逻辑计算每路偏移、增加输入配置,在滤镜中把所有视频流加入堆叠、所有音频流加入amix即可
  • 可根据实际需求修改scale后的分辨率、fps后的帧率参数,只要保证所有输入视频的输出规格一致即可
  • duration=longest参数会让最终文件时长等于最长的一路流的时长,晚加入、晚退出的参会者内容不会被截断
  • 若某路流中途断开或提前结束,对应画面位置会自动填充黑帧、音轨填充静音,直到全局时间轴结束,符合通话录制的常规预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:57:14