Windows PC上为视频和图片添加时间戳水印的技术问询(含metadata提取特定格式要求)
Windows PC上为视频和图片添加时间戳水印的技术问询(含metadata提取特定格式要求)
作为经常处理媒体批量水印需求的开发者,我来分享几个在Windows上完全满足你要求的方案——不管是图形界面新手还是命令行玩家,都能轻松实现从元数据提取指定格式时间戳、保留原文件名、零失误处理的目标👇
一、图片批量处理方案(两种选择)
1. 图形界面友好型:IrfanView + 批量模式
IrfanView是Windows上老牌轻量图片工具,自带批量处理和EXIF元数据读取功能,操作零门槛:
- 先下载安装IrfanView(必须勾选安装插件包,否则无法读取EXIF元数据)
- 打开软件后按
B键进入「批量转换/重命名」模式 - 点击「添加文件/添加文件夹」选中要处理的图片,切换到「高级选项」标签
- 勾选「添加文本水印」,点击「文本来自EXIF/IPTC」,选择
DateTimeOriginal(拍摄时间,也可按需选其他时间字段) - 关键设置:在「自定义EXIF格式」输入字符串:
dddd, dd MMMM yyyy, hh:mm tt(tt对应Windows的AM/PM,和你要的a效果完全一致) - 输出设置:选择「覆盖现有文件」(强烈建议先备份原图片!)或「保存到同一文件夹,使用原文件名」
- 最后点击「开始批量处理」即可完成
2. 命令行灵活型:ExifTool + ImageMagick
如果需要更精细的控制,这个专业组合能实现复杂批量逻辑,完全免费:
- 下载ExifTool和ImageMagick,解压到同一文件夹(或添加到系统PATH,方便全局调用)
- 在图片文件夹新建
.bat批处理文件,粘贴以下代码(可按需调整参数):
@echo off setlocal enabledelayedexpansion :: 自定义配置参数 set "FONT=C:\Windows\Fonts\arial.ttf" # 确保字体路径真实存在 set "FONTSIZE=24" set "TEXTCOLOR=white" set "POSITION=+10+10" # 水印位置:+x+y为左上角,+10-10为左下角(y轴负数代表从底部算起) :: 遍历当前文件夹下的常见图片格式 for %%f in (*.jpg *.jpeg *.png *.bmp) do ( :: 用ExifTool提取拍摄时间并转换为指定格式 for /f "delims=" %%d in ('exiftool -s3 -d "EEEE, dd MMMM yyyy, hh:mm a" -DateTimeOriginal "%%f"') do ( set "timestamp=%%d" :: 用ImageMagick添加水印到图片 magick convert "%%f" -font "%FONT%" -pointsize %FONTSIZE% -fill %TEXTCOLOR% -draw "text %POSITION% '!timestamp!'" "%%f_temp" :: 替换原文件(务必先备份!) move /y "%%f_temp" "%%f" ) ) echo 图片批量水印处理完成! pause
- 注意:无
DateTimeOriginal元数据的图片会自动跳过;处理前一定要备份原文件,避免失误
二、视频批量处理方案:FFmpeg(行业标准工具)
视频元数据读取和水印添加需要专业工具,FFmpeg是Windows上最可靠的选择,功能强大且免费:
- 下载FFmpeg压缩包,解压后将
bin文件夹路径添加到系统环境变量PATH(或把ffmpeg.exe放到视频文件夹中) - 在视频文件夹新建
.bat批处理文件,粘贴以下代码:
@echo off setlocal enabledelayedexpansion :: 自定义配置参数 set "FONT=C:\Windows\Fonts\arial.ttf" set "FONTSIZE=28" set "TEXTCOLOR=white" set "POSITION=10:10" # 水印位置:x:y,左下角可设为10:ih-30(ih代表视频高度) :: 遍历常见视频格式 for %%f in (*.mp4 *.mov *.avi *.mkv) do ( :: 从视频元数据提取创建时间(部分视频需改用format_tags:creation_time,可先查元数据确认) for /f "delims=" %%d in ('ffprobe -v error -select_streams v:0 -show_entries stream_tags=creation_time -of default=noprint_wrappers=1:nokey=1 "%%f"') do ( :: 用FFmpeg添加指定格式时间戳水印,音频直接复制避免重编码 ffmpeg -i "%%f" -vf "drawtext=fontfile='%FONT%':text='%{localtime:%A, %d %B %Y, %I:%M %p}':x=%POSITION%:fontsize=%FONTSIZE%:fontcolor=%TEXTCOLOR%" -c:a copy -c:v libx264 -crf 18 "%%f_temp.mp4" :: 替换原文件(备份优先!) move /y "%%f_temp.mp4" "%%f" ) ) echo 视频批量水印处理完成! pause
- 关键提示:
- 若视频元数据无
stream_tags:creation_time,可运行ffprobe -show_format_tags "你的视频文件名.mp4"查看全局元数据,将代码中对应字段改为format_tags=creation_time -c:a copy直接复制原音频流,大幅节省处理时间;-crf 18是高质量视频编码参数,画质几乎与原文件一致- 格式字符串中
%A对应星期全名,%B对应月份全名,%I是12小时制小时,%p是AM/PM,完全匹配你要求的格式
- 若视频元数据无
必看注意事项
- 备份优先:无论用哪种方案,处理前一定要将原文件复制到备份文件夹,避免操作失误导致文件丢失
- 元数据字段验证:部分图片/视频的时间字段可能不是
DateTimeOriginal或creation_time,可提前用ExifTool、FFprobe工具查看确认 - 字体路径检查:确保代码中的字体路径正确,可通过
dir C:\Windows\Fonts\*.ttf命令查看Windows字体文件夹内的具体文件名
备注:内容来源于stack exchange,提问作者Mr. Indian UNBOXER




