如何用FFmpeg等工具从带元数据图片生成带时间戳视频及补加视频日期水印
嘿,这两个问题都能用FFmpeg轻松解决,我给你一步步讲清楚:
问题1:从带拍摄时间元数据的图片生成带时间戳的视频
完全没问题!FFmpeg直接支持读取图片的EXIF元数据,然后把时间戳作为水印叠加到视频里,同时完成图片到视频的合成。
用这条命令就行(记得替换字体路径为你系统里的真实路径):
ffmpeg -framerate 1 -pattern_type glob -i "*.jpg" -vf "drawtext=fontfile=/path/to/your/font.ttf:text='%{exif:DateTimeOriginal}':fontsize=24:fontcolor=white:x=10:y=10:box=1:boxcolor=black@0.5" -c:v libx264 -crf 23 -pix_fmt yuv420p timestamped_video.mp4
关键参数拆解:
-framerate 1:因为你的图片是每分钟拍一张,所以帧率设为1fps(如果想要更快的延时效果,比如每秒播放3张,就改成-framerate 3)-pattern_type glob -i "*.jpg":批量匹配当前文件夹下所有JPG图片(如果是PNG或其他格式,改后缀就行)-vf drawtext=...:核心的水印滤镜,%{exif:DateTimeOriginal}会直接读取图片EXIF里的拍摄日期时间;box=1和boxcolor=black@0.5是给文字加半透明黑底,避免在亮背景上看不清文字-c:v libx264 -crf 23 -pix_fmt yuv420p:用H.264编码生成兼容性好的MP4视频,CRF23是平衡画质和文件大小的默认值
问题2:已处理图片(重命名+写入EXIF)的后续步骤
你已经完成了解码、重命名和EXIF写入的工作,接下来直接用上面的命令就可以生成带时间戳的视频!
如果你的文件名本身就包含了规范的时间格式(比如20240520_143000.jpg),也可以直接从文件名提取时间,不用读EXIF,命令可以改成这样(同样替换字体路径):
ffmpeg -framerate 1 -pattern_type glob -i "*.jpg" -vf "drawtext=fontfile=/path/to/your/font.ttf:text='%{substr(filename,0,4)}-%{substr(filename,4,2)}-%{substr(filename,6,2)} %{substr(filename,9,2)}:%{substr(filename,11,2)}:%{substr(filename,13,2)}':fontsize=24:fontcolor=white:x=10:y=10:box=1:boxcolor=black@0.5" -c:v libx264 -crf 23 -pix_fmt yuv420p final_video.mp4
这个命令里的substr会把文件名里的数字提取出来,转换成YYYY-MM-DD HH:MM:SS的友好格式。
另外提醒下字体路径的通用参考:
- Windows系统可以用
C:/Windows/Fonts/arial.ttf - Linux系统常用
/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf - Mac系统可以用
/Library/Fonts/Arial.ttf
如果找不到这些字体,换成你系统里已有的字体路径就行。
内容的提问来源于stack exchange,提问作者m4D_guY
相关产品推荐
相关产品推荐

