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

FFmpeg分割、修剪、图片转视频及拼接操作问题排查

FFmpeg分割、修剪、图片转视频及拼接操作问题排查

我刚仔细看了你的FFmpeg脚本和遇到的问题,帮你梳理下问题根源和修正方案~

你的原始PowerShell脚本

ffmpeg -hide_banner `
-loop 1 -t 3 -i image.jpg `
-i input.mp4 `
-filter_complex "`
[1:v] split=2 [v1][v2];
[1:a] asplit=2 [a1][a2]; `
[v1] trim=start=10:duration=10, setpts=PTS-STARTPTS [ov1];`
[a1] atrim=start=10:duration=10, asetpts=PTS-STARTPTS [oa1];`
[v2] trim=start=40:duration=10, setpts=PTS-STARTPTS [ov2];`
[a2] atrim=start=40:duration=10, asetpts=PTS-STARTPTS [oa2];`
[0][ov1][ov2] concat=n=3:v=1:a=0 [v]; `
[oa1][oa2] concat=n=2:v=0:a=1 [ca]; `
[ca] adelay=3s|3s|3s|3s|3s|3s, asetpts=PTS-STARTPTS [a]; `
"`
-map "[v]" -map "[a]" `
-c:v libx264 -preset slow -crf 20 `
-c:a aac -b:a 128k `
output.mp4

你遇到的错误提示

Non-monotonic DTS; previous: 1024, current: 0; changing to 1025. This may result in incorrect timestamps in the output file.

核心问题分析

你的需求逻辑是完全对的:3秒图片视频 + 两段10秒的修剪视频拼接成23秒总时长,音频延迟3秒同步视频。但问题出在两个关键点:

  1. 图片流缺少帧率指定:你转图片为视频时没指定帧率,FFmpeg会用默认值,和原视频的25fps不匹配,直接导致时间戳混乱,出现DTS警告,甚至拼接时后续视频流被忽略,只输出图片。
  2. 流参数不统一:concat滤镜对输入流的像素格式、帧率等参数一致性要求极高,图片流和原视频流的隐性参数差异,会导致拼接失效。

修正后的PowerShell脚本

ffmpeg -hide_banner `
# 给图片指定和原视频一致的25fps,从根源对齐时间戳
-framerate 25 -loop 1 -t 3 -i image.jpg `
-i input.mp4 `
-filter_complex "`
[1:v] split=2 [v1][v2];`
[1:a] asplit=2 [a1][a2];`
# 修剪视频并重置时间戳
[v1] trim=start=10:duration=10, setpts=PTS-STARTPTS [ov1];`
[a1] atrim=start=10:duration=10, asetpts=PTS-STARTPTS [oa1];`
[v2] trim=start=40:duration=10, setpts=PTS-STARTPTS [ov2];`
[a2] atrim=start=40:duration=10, asetpts=PTS-STARTPTS [oa2];`
# 统一图片流的像素格式,和原视频的yuv420p完全匹配
[0] format=yuv420p [imgv];`
# 拼接3段视频流:图片+两段修剪后的视频
[imgv][ov1][ov2] concat=n=3:v=1:a=0, setpts=PTS-STARTPTS [v];`
# 拼接音频流并延迟3秒(5.1声道需要6个延迟值,用毫秒更稳定)
[oa1][oa2] concat=n=2:v=0:a=1, adelay=3000|3000|3000|3000|3000|3000, asetpts=PTS-STARTPTS [a];`
"`
-map "[v]" -map "[a]" `
-c:v libx264 -preset slow -crf 20 `
-c:a aac -b:a 128k `
output.mp4

修正点说明

  1. 强制对齐帧率:添加-framerate 25让图片转视频的帧率和原视频完全一致,彻底解决时间戳不连续的DTS警告。
  2. 统一像素格式:用format=yuv420p确保图片流和原视频流的像素格式匹配,满足concat滤镜的严格要求。
  3. 简化音频处理:把音频拼接和延迟合并到一个滤镜链,减少中间节点,避免额外的时间戳问题。
  4. 明确时间单位:把3s改成3000(毫秒),FFmpeg对毫秒单位的解析更稳定,避免跨环境兼容问题。

预期效果

修正后运行脚本,你会看到:

  • 输出视频时长正确为23秒(3秒图片+10秒+10秒)
  • 音频会在第3秒开始播放,和后续视频片段完美同步
  • 不再出现DTS时间戳警告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 06:29:36