如何用Python获取Windows上iPhone .m4a语音备忘录的Media created元数据
提取iPhone语音备忘录(.m4a)的原始录制时间(Media created)
针对你遇到的问题,这里有两种可行的Python实现方法:
方法1:读取M4A文件本身的元数据(跨平台)
iPhone语音备忘录的原始录制时间存储在M4A文件的QuickTime标准标签©day中,之前用mutagen没找到大概率是标签名没对应对。
步骤:
- 安装依赖:
pip install mutagen
- 示例代码:
from mutagen.mp4 import MP4 from datetime import datetime import os def get_recording_time(m4a_file): try: mp4 = MP4(m4a_file) # 提取原始录制时间标签 if '©day' in mp4.tags: raw_time = mp4.tags['©day'][0] # 解析ISO格式时间(YYYYMMDDTHHMMSSZ) return datetime.strptime(raw_time, '%Y%m%dT%H%M%SZ').strftime('%Y-%m-%d %H:%M:%S') return None except Exception as e: print(f"处理文件{m4a_file}出错: {str(e)}") return None # 批量处理文件夹下的所有M4A文件 target_dir = "替换为你的语音备忘录文件夹路径" recording_metadata = [] for file_name in os.listdir(target_dir): if file_name.lower().endswith('.m4a'): full_path = os.path.join(target_dir, file_name) time_str = get_recording_time(full_path) if time_str: recording_metadata.append({ "file_name": file_name, "original_recording_time": time_str }) # 输出结果 for entry in recording_metadata: print(f"文件: {entry['file_name']} | 原始录制时间: {entry['original_recording_time']}")
方法2:读取Windows文件属性的「Media created」(仅Windows环境)
如果需要和Windows文件属性里显示的时间完全一致,可以直接读取Shell属性,适合仅在Windows 11上运行的场景。
步骤:
- 安装依赖:
pip install pywin32
- 示例代码:
import win32com.client import os def get_media_created(file_path): try: shell = win32com.client.Dispatch("Shell.Application") folder = shell.NameSpace(os.path.dirname(file_path)) file_item = folder.ParseName(os.path.basename(file_path)) # Windows 11中「Media created」对应的属性索引为179 media_created = folder.GetDetailsOf(file_item, 179) return media_created if media_created else None except Exception as e: print(f"处理文件{file_path}出错: {str(e)}") return None # 批量处理 target_dir = "替换为你的语音备忘录文件夹路径" recording_metadata = [] for file_name in os.listdir(target_dir): if file_name.lower().endswith('.m4a'): full_path = os.path.join(target_dir, file_name) time_str = get_media_created(full_path) if time_str: recording_metadata.append({ "file_name": file_name, "original_recording_time": time_str }) # 输出结果 for entry in recording_metadata: print(f"文件: {entry['file_name']} | 原始录制时间: {entry['original_recording_time']}")
注意事项:
- 方法1跨平台(Windows/macOS/Linux都能用),读取的是文件本身携带的元数据,更可靠;
- 方法2仅适用于Windows,直接读取系统显示的属性,和你在文件详情里看到的完全一致;
- 如果方法1的
©day标签不存在,可以尝试查看MP4的creation_time属性,部分旧版本的语音备忘录可能用不同标签。
内容的提问来源于stack exchange,提问作者sophivar
相关产品推荐
相关产品推荐

