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

如何让FFmpeg提取视频的时间水印从指定偏移量开始?

解决方案

方法1:保留快速截取(-ss在-i前),修正水印时间计算

当使用-ss "$startSecond" -i "$inputFile"时,FFmpeg会将截取片段的起始时间重置为0,因此需要在滤镜中把相对时间加上原视频的起始偏移量,才能显示原视频的真实时间戳。修改后的命令如下:

ffmpeg -ss "$startSecond" -i "$inputFile" -to "$endSecond" -vf "drawtext=text='%{expr\:pts + $startSecond\:hms}':fontfile=FreeSerif.ttf:fontsize=20:x=40:y=60:box=1:boxcolor=white@0.5:boxborderw=5" -c:v libx264 -crf 23 -preset medium -c:a libmp3lame -q:a 2 "$outputFile"

核心修改:将原%{pts\:hms}替换为%{expr\:pts + $startSecond\:hms},通过FFmpeg的表达式计算,把截取片段的相对时间(pts)加上起始偏移量$startSecond,得到原视频的绝对时间戳,再用hms格式化为时分秒格式。

方法2:慢截取但无需额外计算(-ss在-i后)

如果不追求截取速度,可以将-ss放在-i之后,此时FFmpeg会保留原视频的时间戳,滤镜中的pts直接对应原视频的时间,无需额外计算:

ffmpeg -i "$inputFile" -ss "$startSecond" -to "$endSecond" -vf "drawtext=text='%{pts\:hms}':fontfile=FreeSerif.ttf:fontsize=20:x=40:y=60:box=1:boxcolor=white@0.5:boxborderw=5" -c:v libx264 -crf 23 -preset medium -c:a libmp3lame -q:a 2 "$outputFile"

注意:这种方式需要FFmpeg从头读取视频到起始位置,大文件下截取速度会明显变慢。

关键滤镜规则说明

FFmpeg的drawtext滤镜支持通过变量和表达式生成动态文本,核心规则包括:

  • %{pts:fmt}:获取当前帧的显示时间戳(Presentation Timestamp),fmt指定输出格式,hms对应时分秒格式(如00:01:23)。
  • %{expr:expression:fmt}:执行数学表达式计算结果后按指定格式输出,支持加减乘除等基本运算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:05:30