修改视频的拍摄时间,和图片修改 EXIF 元数据类似,但视频的元数据格式更复杂(常见的有 MP4 的moov原子、MOV 的QuickTime元数据、AVI 的INFO块等)。
下面提供三种实用方法:Python 代码精准修改(适合编程 / 批量场景)和工具手动修改(适合非编程用户),以及界面话的工具修改。
方法一:Python 代码修改(MP4/MOV 格式)视频拍摄时间
安装处理视频元数据的专业库:
pip install hachoir3 ffmpeg-python # hachoir解析元数据,ffmpeg处理视频写入
完整代码(修改拍摄时间 + 批量处理)
import os
import datetime
from hachoir.parser import createParser
from hachoir.metadata import extractMetadata
import ffmpeg
def modify_video_creation_time(input_path, output_path, new_datetime):
"""
修改视频的拍摄/创建时间元数据
:param input_path: 原始视频路径(MP4/MOV)
:param output_path: 修改后保存路径(避免覆盖原文件)
:param new_datetime: 新的拍摄时间(格式:YYYY-MM-DD HH:MM:SS,如"2026-03-06 15:30:00")
"""
try:
# 1. 验证时间格式并转换为FFmpeg支持的格式
try:
dt = datetime.datetime.strptime(new_datetime, "%Y-%m-%d %H:%M:%S")
# FFmpeg要求的时间格式:YYYY-MM-DDTHH:MM:SS(T分隔日期和时间)
ffmpeg_time = dt.strftime("%Y-%m-%dT%H:%M:%S")
except ValueError:
raise ValueError("时间格式错误,请使用:YYYY-MM-DD HH:MM:SS")
# 2. 用FFmpeg修改元数据(核心逻辑)
# -metadata参数指定要修改的时间字段(覆盖多个时间维度确保兼容性)
(
ffmpeg
.input(input_path)
.output(
output_path,
# 修改核心拍摄时间字段(QuickTime/MP4标准)
metadata=f"creation_time={ffmpeg_time}",
# 兼容不同播放器的时间字段
metadata=f"datetime={ffmpeg_time}",
metadata=f"date={dt.strftime('%Y-%m-%d')}",
# 复制视频/音频流,不重新编码(速度快,无画质损失)
codec="copy"
)
.overwrite_output() # 覆盖已存在的输出文件(可选)
.run(quiet=True) # 静默运行,不输出冗余日志
)
print(f"✅ 视频拍摄时间已修改!")
print(f"原文件:{input_path}")
print(f"新文件:{output_path}")
print(f"新拍摄时间:{new_datetime}")
# 验证修改结果
verify_video_time(output_path)
except Exception as e:
print(f"❌ 修改失败:{str(e)}")
def verify_video_time(video_path):
"""验证视频的拍摄时间是否修改成功"""
try:
parser = createParser(video_path)
if not parser:
print("无法解析视频元数据")
return
metadata = extractMetadata(parser)
if metadata:
creation_time = metadata.get("creation_date")
if creation_time:
print(f"✅ 验证:当前视频拍摄时间 = {creation_time}")
else:
print("⚠️ 未检测到拍摄时间字段(部分视频无原始元数据)")
parser.close()
except Exception as e:
print(f"验证失败:{str(e)}")
def batch_modify_video_time(input_folder, output_folder, new_datetime):
"""
批量修改文件夹内所有MP4/MOV视频的拍摄时间
:param input_folder: 原始视频文件夹
:param output_folder: 输出文件夹
:param new_datetime: 新拍摄时间
"""
# 创建输出文件夹(不存在则创建)
os.makedirs(output_folder, exist_ok=True)
# 遍历文件夹内的视频文件
supported_formats = (".mp4", ".mov", ".m4v")
for filename in os.listdir(input_folder):
if filename.lower().endswith(supported_formats):
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
print(f"\n处理文件:{filename}")
modify_video_creation_time(input_path, output_path, new_datetime)
# ------------------- 调用示例 -------------------
if __name__ == "__main__":
# 示例1:修改单个视频
modify_video_creation_time(
input_path="test.mp4", # 你的原始视频路径
output_path="test_new_time.mp4",# 修改后保存路径
new_datetime="2026-03-06 10:00:00" # 新的拍摄时间
)
# 示例2:批量修改文件夹内所有视频
# batch_modify_video_time(
# input_folder="./videos", # 原始视频文件夹
# output_folder="./videos_new_time", # 输出文件夹
# new_datetime="2026-03-06 10:00:00"
# )
代码关键说明
- 核心原理 :通过
FFmpeg的-metadata参数修改视频的creation_time(核心拍摄时间字段),同时补充datetime/date字段,确保所有播放器 / 系统都能识别。 - 无损处理 :代码中指定
codec="copy",仅修改元数据,不重新编码视频,速度快且无画质损失。 - 验证逻辑 :内置
verify_video_time函数,修改后自动验证时间是否生效。 - 批量处理 :
batch_modify_video_time函数支持批量修改文件夹内所有 MP4/MOV 视频,适合大量文件场景。
方法 二:用 FFmpeg 改视频时间属性
适合批量改、不改画质:
plaintext
ffmpeg -i 原视频.mp4 -c copy -metadata creation_time="2026-03-06 15:30:00" 新视频.mp4
方法三:如果我们不会编程技术怎么办?别着急,我们可以使用界面话的工具帮我们修改,还能使用"汇帮元数据编辑器"界面话的工具来修改,还能批量修改


除此之外我们还可以修改视频的媒体修改时间,标题,版权和评论等信息。