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

FFmpeg分割视频段时长不符且drawtext不生效问题求助

问题分析与解决方案

我来帮你拆解这三个核心问题:片段时长波动、Past duration警告,以及drawtext滤镜不生效,逐个给你针对性的解决办法:

1. 片段时长不准与Past duration警告

你用-f segment分割视频时,FFmpeg默认会对齐关键帧完成切割——它不会在非关键帧的位置硬切,而是等下一个关键帧出现才结束当前片段,这就直接导致了时长偏离设置的segment_time 10,同时触发时间戳不匹配的Past duration警告。

解决办法:强制按时间间隔生成关键帧

在命令里添加-force_key_frames "expr:gte(t,n_forced*10)",强制FFmpeg每10秒生成一个关键帧,这样segment就能精准地在10秒左右的位置切割,误差会完全控制在你能接受的范围内。

2. drawtext滤镜未生效

你的drawtext参数存在几个明显问题:

  • start_number=0是segment格式的专属参数,不是drawtext的配置项,你把它放错位置会导致drawtext解析出错;
  • 没有指定字体路径,FFmpeg可能找不到可用的字体来渲染文本;
  • 默认白色文本如果遇到浅色视频背景,会完全融合看不到效果。

修正后的drawtext参数示例

把start_number移到segment相关参数区,同时给drawtext指定字体、颜色,还能让它显示对应片段的序号:

-vf "drawtext=fontfile=/path/to/your/font.ttf:text='teste %{segment_index}':x=10:y=10:fontsize=24:fontcolor=black"
  • fontfile:替换成你系统里实际的字体路径,比如Windows下可以用C:/Windows/Fonts/arial.ttf;
  • %{segment_index}:会自动显示当前片段的序号(从0开始,和start_number=0对应);
  • fontcolor=black:确保文本和背景有足够对比度,避免被遮挡。

完整修正后的命令

把所有调整整合起来,最终命令如下:

ffmpeg -y -i teste.mp4 -map 0 -segment_time 10 -f segment -start_number 0 -force_key_frames "expr:gte(t,n_forced*10)" -c:v libx264 -preset veryfast -crf 24 -tune film -vf "drawtext=fontfile=C:/Windows/Fonts/arial.ttf:text='teste %{segment_index}':x=10:y=10:fontsize=24:fontcolor=black" -an teste\out%d.mp4

说明:

  • -start_number 0:指定输出文件的序号从0开始,和drawtext里的%{segment_index}对应;
  • -force_key_frames确保每10秒生成关键帧,分割时长更稳定;
  • 修正后的drawtext参数能正常渲染带有序号的文本。

额外注意事项

如果还是存在1-2秒的微小时长误差,这是视频编码的时间戳特性导致的正常现象,完全符合你能接受的误差范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:30:10