# make_live **Repository Path**: Mervyn_Lee/make_live ## Basic Information - **Project Name**: make_live - **Description**: 将失去关联关系的实况图(同名照片和视频)转换为livePhoto - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-12 - **Last Updated**: 2025-12-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # make-live 将失效分开的照片和视频重新合并成livePhoto ## Getting started 项目实例python版本 - 3.13.9 ## 具体步骤 ### 1、**安装依赖**: ``` shell pip install --upgrade pip ``` ### 2、核心代码 make_live(批量处理) ``` python import os import sys # 构建标准 XMP 元数据 def build_xmp_metadata(): xmp_data = ''' 1 1 123456789 image/jpeg Primary 0 32 video/mp4 Secondary ''' return xmp_data.encode('utf-8') # 创建单个动态照片 def create_motion_photo(jpeg_path, mp4_path, output_path, delete_source): try: with open(jpeg_path, 'rb') as f: jpeg_data = f.read() with open(mp4_path, 'rb') as f: mp4_data = f.read() xmp_data = build_xmp_metadata() padding = b'\x00' * 32 # 推荐值 with open(output_path, 'wb') as out: out.write(jpeg_data) out.write(xmp_data) out.write(padding) out.write(mp4_data) print(f"✅ 已生成动态照片: {output_path}") if delete_source: os.remove(jpeg_path) os.remove(mp4_path) print(f"🗑️ 已删除源文件: {jpeg_path}, {mp4_path}") except Exception as e: print(f"❌ 处理失败 {jpeg_path} + {mp4_path}: {e}") # 遍历目录,批量处理 def batch_process(root_dir, delete_source): live_photo_dir = os.path.join(root_dir, 'livePhoto') os.makedirs(live_photo_dir, exist_ok=True) # 创建 livePhoto 文件夹 for root, dirs, files in os.walk(root_dir): jpg_files = [f for f in files if f.lower().endswith('.jpg')] mp4_files = set(f for f in files if f.lower().endswith('.mp4')) for jpg in jpg_files: base_name = os.path.splitext(jpg)[0] mp4_candidate = base_name + '.mp4' if mp4_candidate in mp4_files: jpg_path = os.path.join(root, jpg) mp4_path = os.path.join(root, mp4_candidate) output_name = f"{base_name}.jpg" output_path = os.path.join(live_photo_dir, output_name) # 输出到 livePhoto 文件夹 create_motion_photo(jpg_path, mp4_path, output_path, delete_source) # 主函数 if __name__ == "__main__": if len(sys.argv) < 2: print("用法: python motion_photo.py <总目录路径> [--delete-source]") sys.exit(1) root_directory = sys.argv[1] delete_source = '--delete-source' in sys.argv or '-d' in sys.argv if not os.path.isdir(root_directory): print(f"❌ 错误:'{root_directory}' 不是一个有效目录") sys.exit(1) batch_process(root_directory, delete_source) ``` ### 3、在 make_live.py 同级目录下创建 dir 文件夹,将失效的同名照片、视频放在dir中,在dir目录中创建 livePhoto 文件加用来输出实况图片 ### 4、运行脚本 ![输入图片说明](README.assets/5f0132cf-2884-4008-b9b9-587d00e976ab.png) ``` shell python make_live.py dir ``` ### 5、将生成的实况图通过pc端百度网盘上传,上传完毕后需等待几分钟,通过手机端的百度网盘app即可看到实况效果,之后再下载到自己的手机上(实测支持鸿蒙6的手机端)