从硬盘录像机或摄像头里导出的视频,经常是不带时间显示的。等到需要拿它当证据、做记录的时候,才发现画面上看不出这是哪天几点拍的。这篇说清楚怎么给监控录像批量补上时间水印。
这一步没想明白,后面全白干。给监控录像加时间,可能指三种完全不同的东西:
大部分人要的是录制时间,而这恰恰是最难自动获取的那个——因为它藏在文件元数据或文件名里,画面本身并不知道自己是什么时候被拍的。
导出的监控文件,录制时间通常在三个地方之一:
1. 文件名里——最常见。监控设备导出时一般会命名成这样:
ch01_20260810143022.mp4
CAM3_2026-08-10_14-30-22.avi
这种最好办,时间信息是现成的。
2. 文件元数据里——用 ffprobe 可以读出来:
ffprobe -v quiet -show_entries format_tags=creation_time -of csv=p=0 input.mp4
有输出就说明元数据里有录制时间。注意:如果视频被剪辑软件处理过、或者经过微信/QQ传输,这个字段经常会被覆盖成处理时间,不可靠。
3. 文件的修改时间——最后的退路。右键属性能看到,但只要文件被复制过、下载过,这个时间就可能变了。
如果一个视频对应一个已知的录制时间,可以直接把时间硬写进命令:
ffmpeg -i input.mp4 -vf "drawtext=fontfile='C:/Windows/Fonts/simhei.ttf':text='2026-08-10 14\:30\:22':x=20:y=20:fontsize=32:fontcolor=yellow:box=1:boxcolor=black@0.5" -c:a copy output.mp4
监控场景建议用黄色字 + 半透明黑底,这是监控行业的习惯配色,在灰暗的夜间画面和过曝的白天画面上都能看清。
如果要显示"从录像开始过了多久",用 pts:
ffmpeg -i input.mp4 -vf "drawtext=fontfile='C:/Windows/Fonts/simhei.ttf':text='%{pts:hms}':x=20:y=20:fontsize=32:fontcolor=yellow:box=1:boxcolor=black@0.5" -c:a copy output.mp4
监控录像往往一段就是几小时,画面上的时间应该随播放递增,而不是从头到尾定在一个数字上。这需要把起始时间戳和播放进度相加:
ffmpeg -i input.mp4 -vf "drawtext=fontfile='C:/Windows/Fonts/simhei.ttf':text='%{pts:localtime:1786451422}':x=20:y=20:fontsize=32:fontcolor=yellow:box=1:boxcolor=black@0.5" -c:a copy output.mp4
其中 1786451422 是录制起始时刻的 Unix 时间戳。问题来了:这个数字要你自己把"2026-08-10 14:30:22"换算出来,而且每个视频的起始时间都不一样,意味着每个文件都得单独算一次、单独跑一条命令。
如果文件名规范(比如都是 ch01_20260810143022.mp4 这种格式),可以写批处理自动提取:
@echo off
for %%f in (*.mp4) do (
set "name=%%~nf"
setlocal enabledelayedexpansion
set "ts=!name:~5!"
set "Y=!ts:~0,4!"
set "M=!ts:~4,2!"
set "D=!ts:~6,2!"
set "h=!ts:~8,2!"
set "m=!ts:~10,2!"
set "s=!ts:~12,2!"
ffmpeg -i "%%f" -vf "drawtext=fontfile='C:/Windows/Fonts/simhei.ttf':text='!Y!-!M!-!D! !h!\:!m!\:!s!':x=20:y=20:fontsize=32:fontcolor=yellow:box=1:boxcolor=black@0.5" -c:a copy "out_%%f"
endlocal
)
这个脚本能跑,但用之前要知道它的脆弱点:
!name:~5! 是写死从第 6 个字符开始截取。换个设备、换个命名规则,所有的截取位置都要重算监控录像的特点是文件多、单个体积大、时间要求准,这三条正好是命令行最吃力的地方。
用视频时间戳添加工具处理的话:
相比命令行方案,省掉的是:不用算 Unix 时间戳、不用为每种文件名格式改脚本、不用导出后才发现字太小看不清。
视频量大的话建议用批量版,支持整文件夹和多视频并发;偶尔处理几个用单文件版就够。都可以先下载演示。
位置怎么选。左上角是监控行业惯例,但要先看你的画面——如果左上角正好是入口或收银台这类关键区域,就往下挪。宁可放在画面底部,也不要挡住内容。
字号怎么定。1080P 画面用 32~40 号比较合适。判断标准是:缩放到手机屏幕大小还能看清,因为调取记录的人多半是在手机上看。
一定要加底框或描边。监控画面明暗变化极大,白天过曝、夜间红外发灰。纯白字在过曝画面上会完全消失。半透明黑底最稳妥。
保留原始文件。加了水印的是新文件,原始录像不要删。真要作为凭证使用时,原始文件加上未被修改的元数据,比水印本身更有说服力。
Q:监控视频几个小时一个文件,加水印要多久?
主要看是否重新编码。硬字幕烧录需要全片重编码,2 小时 1080P 视频在普通电脑上大约 20~40 分钟,开显卡加速能快数倍。如果只是需要能看,内封字幕模式几乎是秒完成。
Q:加了水印会影响它作为证据的效力吗?
加水印会修改文件,所以务必保留未经处理的原始录像。水印版本用于日常查看和说明,原始版本用于正式用途。
Q:能不能只在视频某一段显示时间?
FFmpeg 里加条件:enable='between(t,60,180)' 表示只在第 60~180 秒显示。
Q:文件名里没时间、元数据也被覆盖了,怎么办?
只能从录像机的检索界面查这段录像的时间,然后手动填。这也是为什么建议导出时就保留设备的原始命名规则。
86998867
微信同号
