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

ffmpeg导出的mp4视频最后3秒画面冻结是什么原因,如何解决?

问题原因
  • 核心逻辑错误:你当前的操作是将递减粒子序列叠加到包含递增粒子的test.mp4全时长上,而非将「递增粒子片段」和「递减粒子片段」前后拼接,两个粒子序列会同时显示,完全不符合预期的粒子增→减循环逻辑。
  • 画面冻结直接诱因:ffmpeg的overlay滤镜默认会保留已结束输入流的最后一帧持续叠加,你的递减粒子序列时长短于test.mp4的时长,序列播放完毕后就会一直停在最后一帧叠加在后续画面上,视觉上表现为画面冻结。
  • 额外损耗:两次转码会导致不必要的画质损失,且多步操作效率更低。
可用解决方案

你需要的可完美循环的视频逻辑应为:背景全程显示 → 先播放粒子递增序列 → 无缝衔接播放粒子递减序列 → 首尾帧均为无粒子状态,可无缝循环。直接用单条ffmpeg命令即可完成,无需多次转码:

ffmpeg \
    # 输入递增粒子序列
    -framerate 30 -pattern_type glob -i 'images/increase/*.png' \
    # 输入递减粒子序列
    -framerate 30 -pattern_type glob -i 'images/decrease/*.png' \
    # 输入背景图,开启循环匹配视频总时长,帧率统一为30
    -loop 1 -framerate 30 -i screens/Background.png \
    # 输入音频文件
    -i audio/50-White-Noise-10min.mp3 \
    -filter_complex \
    # 拼接两个粒子序列,无音频拼接需求
    "[0:v][1:v] concat=n=2:v=1:a=0 [particle_stream]; \
    # 将拼接完成的粒子流叠加到背景上
    [2:v][particle_stream] overlay [out_v]" \
    # 映射输出视频和音频流
    -map "[out_v]" -map 3:a \
    # 视频编码参数
    -c:v libx264 -pix_fmt yuv420p -preset slow \
    # 音频直接拷贝,取音视频中更短的流时长对齐
    -c:a copy -shortest \
    loop_output.mp4

如果确实有特殊需求需要分两次叠加操作,仅需将第二条命令的overlay滤镜添加shortest=1参数即可解决冻结问题,修改后的第二条命令如下:

ffmpeg -framerate 30 \
    -pattern_type glob -i 'images/decrease/*.png' \
    -i test.mp4 \
    -filter_complex "[1:v][0:v] overlay=shortest=1" \
    -preset slow -c:a copy -shortest -c:v libx264 -pix_fmt yuv420p test2.mp4 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:48:03