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

Debian服务器使用FFmpeg裁剪拼接视频后音画不同步问题求助

问题根因定位

你遇到的Non-monotonous DTS报错就是音画不同步的直接诱因,问题出在裁剪、预处理流程和拼接逻辑的组合缺陷,和你使用的FFmpeg 3.2老旧版本也有相关性:

  • 裁剪时使用-c copy流复制,如果裁剪起始点-ss不是原视频关键帧,流复制出来的片段起始音视频时间戳会出现偏移,后续添加-force_key_frames参数时使用了原视频的起始时间$ss而非裁剪后片段的0点时间,再加上-copyts保留原时间戳,导致不同片段的DTS时间基准完全不统一,拼接时就会出现时间戳回退的报错。
  • 生成图片转的视频片段时,音频是anullsrc生成的静默流,没有强制对齐音视频的帧率、时间基和其他实采视频片段的参数,拼接时两类片段的时间基准不一致也会触发DTS异常。
  • 用concat demuxer拼接时,要求所有输入文件的音视频编码参数、时间基、帧率、采样率完全一致,目前你只做了分辨率对齐,没有统一其他参数,3.2版本的FFmpeg对参数不一致的兼容处理很差,很容易出现时间戳错误。

修复方案

1. 裁剪逻辑修改

不要拆成两次FFmpeg操作,把裁剪和关键帧设置合并,去掉-copyts,强制裁剪后的片段时间戳从0开始:

// 合并裁剪+关键帧设置,删除中间tempfile步骤
$cmd = 'ffmpeg -y -ss ' . $ss . ' -i ' . $i . ' -t ' . $t . ' -r 5 -force_key_frames 0 -c:v libx264 -c:a aac -ar 44100 -ac 2 ' . $o . ' 2>&1';
echo nl2br(shell_exec($cmd));
// 直接读最终输出文件的时长即可
$duration = floatval(shell_exec('ffprobe -i ' . $o . ' -show_entries format=duration -v quiet -of csv="p=0" 2>&1'));

注意:不要用-c copy流复制裁剪,流复制必须要求-ss落在关键帧上才能保证时间戳正确,转码裁剪虽然速度稍慢但稳定性更高,适合后续拼接场景。

2. 图片转视频逻辑修改

统一和实采片段完全一致的编码、时间基参数:

$cmd = self::getNiceOption() . 'ffmpeg -y -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -loop 1 -i ' . $imagePath . ' -c:v libx264 -r 5 -t ' . $duration . ' -pix_fmt yuv420p -vf scale=' . $res_x . ':' . $res_y . ' -c:a aac -ar 44100 -ac 2 -video_track_timescale 16000 -af aresample=async=1 ' . $o . ' 2>&1';

3. 拼接逻辑优化

分辨率统一步骤里同步统一编码、时间基参数,避免不同片段参数不一致,拼接时加上自动时间戳修复参数:

// 分辨率对齐步骤统一参数
$cmd = self::getNiceOption() . 'ffmpeg -y -i ' . $path . ' -vf "scale=' . $res_x . ':' . $res_y . ':force_original_aspect_ratio=decrease,pad=' . $res_x . ':' . $res_y . ':(ow-iw)/2:(oh-ih)/2" -c:v libx264 -r 5 -c:a aac -ar 44100 -ac 2 -video_track_timescale 16000 -af aresample=async=1 ' . $scaledVideoPath . ' 2>&1';

// 拼接步骤添加时间戳修复参数
$cmd = self::getNiceOption() . 'ffmpeg -y -safe 0 -f concat -i ' . $text_file_path . ' -c:v libx264 -c:a aac -af aresample=async=1 -fflags +genpts ' . $o . ' 2>&1';

4. 版本升级建议

如果条件允许,把FFmpeg升级到4.x以上版本,老旧的3.2版本存在大量时间戳处理相关的已知bug,升级后可以避免很多偶发的拼接异常。

内容的提问来源于stack exchange,提问作者dev-ul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:39:04