在 JPG 文件上编辑自定义元数据 - 实时照片

问题描述 投票:0回答:1

我正在尝试编辑 JPG 文件(iPhone 创建的 Live Photo 的静态图像)的自定义元数据值。尝试了 exiftool 但它对我不起作用。

作为参考,这是其中一个文件的元数据 - https://www.metadata2go.com/result/93287b28-1c16-4491-affe-8ffbd6d9dd1a

我要编辑和更新的字段是

内容标识符 DF64C2AE-ED3C-4778-BFCA-C15277E521D2

我尝试使用 exiftool 更新该字段

exiftool -ContentIdentifier=5A0FFB8D-5410-4464-A343-61AE4A6C1109 LW16.jpg

它总是抛出错误,例如文件无法读取或警告:标签“ContentIdentifier”未定义 没什么可做的。

任何人都可以帮助我解决这个问题或指导我使用另一种方法来更改值?

metadata jpeg exiftool phlivephoto apple-live-photos
1个回答
0
投票

我正在像这样使用little_exif将原始MakerNote写入exif数据,它现在正在工作:)我正在尝试处理视频部分

use std::{
    fs,
    path::{Path, PathBuf},
};

use little_exif::{exif_tag, metadata::Metadata};

pub fn generate_binding() -> (String, Vec<u8>) {
    let uuid: String = uuid::Uuid::new_v4().into();
    let mut note:Vec<u8> = b"Apple iOS\x00\x00\x01MM\x00\x01\x00\x11\x00\x02\x00\x00\x00\x25\x00\x00\x00\x20\x00\x00\x00\x00".to_vec();
    // let note = header + uuid.as_bytes().to_vec() + vec![b"\x00\x00\x00\x00"];
    note.extend(uuid.as_bytes().to_vec());
    note.extend(b"\x00".to_vec());
    (uuid, note)
}

pub fn generate_live_photo(
    jpeg_src: &Path,
    mov_src: &Path,
    dest_dir: Option<&Path>,
) -> Option<(PathBuf, PathBuf)> {
    let (uuid, note) = generate_binding();
    let (jpeg, mov) = match dest_dir {
        Some(dest_dir) => {
            let (jpeg, mov) = (
                Path::new(dest_dir).join(match jpeg_src.file_name() {
                    Some(src) => src,
                    None => return None,
                }),
                Path::new(dest_dir).join(format!("{}.mov",uuid.to_uppercase())),
            );
            //copy files
            fs::copy(jpeg_src, &jpeg).unwrap();
            fs::copy(mov_src, &mov).unwrap();
            (jpeg, mov)
        }
        None => (jpeg_src.to_path_buf(), mov_src.join(uuid)),
    };

    let mut metadata = match Metadata::new_from_path(&jpeg) {
        Ok(data) => data,
        Err(_) => return None,
    };
    metadata.set_tag(exif_tag::ExifTag::MakerNote(note));
    match metadata.write_to_file(&jpeg) {
        Ok(_) => {}
        Err(_) => {
            return None;
        }
    };

    Some((jpeg, mov))
}
© www.soinside.com 2019 - 2024. All rights reserved.