You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

FFmpeg合成音频与多段视频时黑屏过渡及视频时序异常问题求助

FFmpeg合成音频与多段视频时黑屏过渡及视频时序异常问题求助

你好!我看了你遇到的FFmpeg合成问题,核心是时序控制和滤镜链语法的问题导致黑屏过渡不符合预期,第二个视频也没按时出现。咱们一步步来解决:

首先先明确你的需求时序(总时长48s,和音频匹配):

  • 0:00-0:06:黑屏
  • 0:06-0:24:第一个视频(时长18s)
  • 0:24-0:40:黑屏(时长16s)
  • 0:40-0:48:第二个视频(时长8s)

现有命令的问题分析

你的当前命令存在几个关键错误:

  1. 滤镜链语法错误filter_complex里的滤镜分隔和concat调用格式不对,第二个tpad后直接接concat,没有正确的流分隔符和concat参数,导致FFmpeg无法正确解析第二个视频的处理逻辑;同时tpad里重复写了color=black,属于冗余参数。
  2. 时序计算错误:第二个视频的start_duration设置完全错误,你需要的是让第一个视频结束后接16s黑屏,再启动第二个视频,而不是给第二个视频加44秒多的前置黑屏。
  3. tpad参数误用:你设置了stop_mode=add但因为语法问题可能没生效,导致默认用clone模式(即重复最后一帧当填充),这就是你看到第一个视频最后一帧被当作黑屏的原因。

修正后的命令

下面是符合你需求的完整FFmpeg命令,我会逐段解释:

ffmpeg -i video_0.mp4 -i video_1.mp4 -i audio.mp4 -filter_complex \
"[0:v]tpad=start_duration=6:start_mode=add:stop_duration=16:stop_mode=add:color=black[v0]; \
 [1:v]tpad=start_duration=0:start_mode=add:color=black[v1]; \
 [v0][v1]concat=n=2:v=1:a=0[v]" \
-map "[v]" -map 2:a -f mp4 -movflags +faststart composite_recording.mp4

命令解释:

  1. 处理第一个视频[0:v]tpad=start_duration=6:start_mode=add:stop_duration=16:stop_mode=add:color=black[v0]

    • start_duration=6:给第一个视频添加6秒前置黑屏,对应0:00-0:06的时段
    • stop_duration=16:给第一个视频添加16秒后置黑屏,对应0:24-0:40的时段
    • start_mode=addstop_mode=add:明确要求添加纯黑屏(而不是重复帧),color=black指定黑屏颜色
    • 处理后的流命名为[v0],总时长=6+18+16=40s
  2. 处理第二个视频[1:v]tpad=start_duration=0:start_mode=add:color=black[v1]

    • 这里不需要前置黑屏,因为[v0]已经占满了前40秒,直接把第二个视频原封不动保留,命名为[v1](时长8s)
  3. 拼接视频流[v0][v1]concat=n=2:v=1:a=0[v]

    • n=2表示要拼接2个视频流
    • v=1:a=0表示只处理视频流,忽略音频流(我们单独映射输入的音频)
    • 拼接后的最终视频流命名为[v]
  4. 输出设置-map "[v]" -map 2:a 指定用拼接后的视频流和第三个输入的音频流合成最终文件,-movflags +faststart优化MP4的网络播放体验

额外注意事项

  • 如果你的两个原视频时长和我假设的(video_0=18s,video_1=8s)不一致,需要调整tpadstop_duration数值:比如video_0实际时长是X秒,那么后置黑屏时长应该是40 - 6 - X秒,保证[v0]总时长为40s
  • 如果音频时长不是48s,需要同步调整视频片段的总时长,避免音画不同步

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

火山引擎 最新活动