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

Exiftool修改MP4 CreateDate后无法在文件资源管理器显示的问题

问题描述

我用Python调用Exiftool修改MP4元数据的CreateDate,核心代码如下:

cmd = [exiftool_path, "-overwrite_original","-CreateDate={}".format(new_date), directory_file_name]

修改后,通过Exiftool可验证CreateDate已成功修改,上传至亚马逊Photos也能识别该修改后的日期,但有时在Windows文件管理器的属性>详细信息标签页中无法看到更新后的日期。

请问为何会出现这种情况?如何让该日期在文件管理器中显示,或是否有其他可写入的标签能实现同步显示?


附相关代码

MP4日期修改函数

def modify_mp4_date(formatted_date_input,file_list_number):
    directory_file_name = file_directory + "/" + file_list[file_list_number]
    print("directory_file_name")
    print(directory_file_name)
    print("this is pic number")
    print(file_list_number+1)

    # 指定exiftool可执行文件路径
    exiftool_path = r"C:\Windows\exiftool.exe"

    # 设置时间为05:00:00(对应原12am时区转换后)
    time = "05:00:00"

    new_date = formatted_date_input + " " + time

    print("MP4 Date")
    print(new_date)

    # 构造修改日期的命令
    cmd = [exiftool_path, "-overwrite_original","-CreateDate={}".format(new_date), directory_file_name]
    # cmd = [exiftool_path, "-overwrite_original","-Quicktime:CreateDate={}".format(new_date), directory_file_name]

    # 调用exiftool执行修改
    subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        
    print("Modified mp4 media create date YEEHAW!")

    # 验证修改结果
    output = subprocess.check_output([exiftool_path, "-CreateDate", "-b", directory_file_name])
    creation_date = output.decode().strip()

    print("Creation date from file")
    print(creation_date)

    # 检查修改是否成功
    if new_date == creation_date:
        print("Successful Write")
        # 修改完成后可移动文件到其他文件夹
        # shutil.move(src, dst)
    else:
        print("Write Failed")
        sys.exit("MP4 write failed")

用户输入处理函数

def take_user_input():
    user_input = input("Enter Date Taken: ")
    input_string = str(user_input)
    print(input_string)

    # 用户输入格式:MM DD YYYY,转换为YYYY:MM:DD
    formatted_date = input_string[4:8] + ":" + input_string[:2] + ":" + input_string[2:4]

    # 如果用户输入格式为YYYY MM DD,启用下面的代码
    # formatted_date = input_string[:4] + ":" + input_string[4:6] + ":" + input_string[6:8]
    print(formatted_date)

    return formatted_date

修改前后状态

  • 修改前:文件管理器详细信息中的创建日期为原始未修改值
  • 修改后:文件管理器详细信息中的创建日期未更新,仍显示旧值(但Exiftool和亚马逊Photos已识别新日期)

问题分析与解决办法

原因

  1. Windows文件管理器的字段映射逻辑:Windows读取MP4文件的日期时,并非直接读取Exiftool默认修改的CreateDate,而是优先读取QuickTime/MP4格式规范中的MediaCreateDate、TrackCreateDate等字段,这些字段和CreateDate在元数据结构中属于不同的标签,仅修改CreateDate无法覆盖Windows读取的字段。
  2. Windows Shell缓存:即使修改了正确的字段,Windows资源管理器可能会缓存旧的元数据,导致显示未更新。

解决办法

1. 同时修改多个关联日期标签

修改Exiftool命令,同时写入多个Windows会读取的日期字段,确保覆盖所有可能的读取路径:

cmd = [
    exiftool_path,
    "-overwrite_original",
    f"-CreateDate={new_date}",
    f"-MediaCreateDate={new_date}",
    f"-TrackCreateDate={new_date}",
    f"-DateTimeOriginal={new_date}",
    # 明确指定QuickTime命名空间的标签,避免歧义
    f"-QuickTime:CreateDate={new_date}",
    f"-QuickTime:MediaCreateDate={new_date}",
    directory_file_name
]

2. 刷新Windows Shell缓存

修改完成后,可通过以下方式刷新资源管理器缓存:

  • 重启Windows资源管理器:任务管理器中找到「Windows资源管理器」,右键选择「重新启动」
  • 执行命令行:打开命令提示符,运行 ie4uinit.exe -show

3. 验证修改结果

修改后除了用Exiftool验证,还可以直接查看文件管理器的详细信息,或者用以下Exiftool命令查看所有日期相关字段,确认是否都已更新:

exiftool -time:all -s [你的MP4文件路径]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:45:01