【问题标题】:Exported Google+ photos, how do I convert JSON data into EXIF?导出的 Google+ 照片,如何将 JSON 数据转换为 EXIF?
【发布时间】:2015-05-23 06:51:54
【问题描述】:

最近使用 Google Takeout 从 Google+ 下载了 60GB 以上的照片和视频。

这产生了大量文件,但有价值的元数据(包括照片的原始日期和位置)存储在每个相册的单独 metadata.json 文件中,而不是 EXIF 中。

这意味着我无法将其导入任何其他照片服务,除非根据 G+ 对照片进行的自动编辑基本上打乱所有日期。

在任何地方都找不到答案 - 解决这个问题应该可以帮助任何希望将照片从 Google 服务移到其他地方的人。

【问题讨论】:

    标签: json google-plus exif photos exiftool


    【解决方案1】:

    我在将 Google 照片导出到 Synology NAS 后编写了这个 bash 脚本。 你可以试试这个

        #!/bin/bash
        tmpFileName="filelist.txt"
        startPath="/google_drive_sync"
        exifToolPath="./Image-ExifTool-12.29/"
        showCorrectFiles="False"
        debugOutput="False"
        
       if [[ -f $tmpFileName ]]; then
        echo "FileList is exist"
    else    
        echo "Creatig FileList"
        find $startPath -name "*.jpg"  >> $tmpFileName
        find $startPath -name "*.png"  >> $tmpFileName
        find $startPath -name "*.PNG"  >> $tmpFileName
        find $startPath -name "*.JPG"  >> $tmpFileName
    fi
    
    filesCount=`wc filelist.txt -l | awk '{print $1}'`
    currentFile=0
    needRefresh="True"
    tmpCount=0
    processedByJson=0
    processedByFilename=0
    skippedFiles=0
    echo "Parsing FileList"
    echo "Total files (including eaDir): $filesCount"
    while read fullPathToPhoto
    do
        currentFile=$((currentFile + 1))
        tmpCount=$((tmpCount + 1))
        
        if [[ "$tmpCount" -gt "100" ]]; then
        tmpCount=0
        needRefresh="True"
        fi
    
        if [[ "$needRefresh" == "True" ]]; then
        clear
        needRefresh="False"
        echo "Processing: $currentFile of $filesCount"
        echo "Processed by JSON: $processedByJson"
        echo "Processed by FileName: $processedByFilename"
        echo "Skipped: $skippedFiles"
        fi
        photoFileName="$fullPathToPhoto"
        if [[ "$photoFileName" == *"eaDir"* ]]; then
        isEaDir="True"
        skippedFiles=$((skippedFiles + 1))
        else
        jsonFileName="$photoFileName.json"
            modifyDate=`stat "$photoFileName" | grep "Modify:" | cut -c9-18`
        checkJson="False"
            if [[ -f $jsonFileName ]]; then
                jsonDateTime=`cat "$jsonFileName" | grep -A1 "photoTakenTime" | grep "timestamp" | awk '{print $2}' | cut -c2-11`
            jsonDateTimeFormatted=`date -d @$jsonDateTime +"%Y-%m-%d %H:%M:%S"`
            jsonDate=`date -d @$jsonDateTime +"%Y-%m-%d"`
            checkJson="True"
        fi
        isAndroidWhatsAppImage="False"
        if [[ -n $modifyDate ]]; then
            isAndroidWhatsAppImageTmp=`echo $photoFileName | grep "WA" | grep "IMG"`
            if [[ -n $isAndroidWhatsAppImageTmp ]]; then
                isAndroidWhatsAppImage="True"
                modifyDateFromFileNameTmp=`echo $photoFileName | sed 's|.*IMG||' | sed 's/WA.*//' | sed 's/[^0-9]//g'`
                yearTmp=`echo $modifyDateFromFileNameTmp | cut -c1-4`
                monthTmp=`echo $modifyDateFromFileNameTmp | cut -c5-6`
                dayTmp=`echo $modifyDateFromFileNameTmp | cut -c7-8`
                modifyDateFromFileName=`echo $yearTmp-$monthTmp-$dayTmp`
            else
                isAndroidWhatsAppImage="False"
            fi
        fi
        if [[ "$isAndroidWhatsAppImage" == "True" ]]; then
            if [[ "$modifyDateFromFileName" != "$jsonDate" ]]; then
            checkJson="False"
            fi
        fi    
        if [[ "$checkJson" == "True" ]]; then
            if [[ "$modifyDate" != "$jsonDate" ]]; then
            echo "Change dt for $photoFileName" 
            echo "from $modifyDate to $jsonDateTimeFormatted by JSON"
            perl "$exifToolPath/exiftool" "-AllDates=$jsonDateTimeFormatted" "$photoFileName" -overwrite_original
            perl "$exifToolPath/exiftool" "-FileCreateDate<DateTimeOriginal" "-FileModifyDate<DateTimeOriginal" "$photoFileName"
            processedByJson=$((processedByJson + 1))
            tmpCount=$((tmpCount + 45))
            else
            if [[ "$showCorrectFiles" == "True" ]]; then
                echo "Date is correct for $photoFileName by JSON"
                tmpCount=$((tmpCount + 45))
            fi
            skippedFiles=$((skippedFiles + 1))
            fi
        else
            if [[ -n $modifyDate ]]; then
            if [[ "$isAndroidWhatsAppImage" == "True" ]]; then
                if [[ "$debugOutput" == "True" ]]; then
                echo "Find WhatsApp image in $photoFileName"
                fi
                if [[ "$modifyDateFromFileName" == "$modifyDate" ]]; then
                if [[ "$showCorrectFiles" == "True" ]]; then
                    echo "Date is correct for $photoFileName"
                    echo "date is $modifyDate FileName date is $modifyDateFromFileName"
                    tmpCount=$((tmpCount + 45))
                fi
                skippedFiles=$((skippedFiles + 1))
                else
                echo "Change dt for $photoFileName" 
                echo "from $modifyDate to $modifyDateFromFileName by FileName"
                perl "$exifToolPath/exiftool" "-AllDates=$modifyDateFromFileName 06:00:00" "$photoFileName" -overwrite_original
                perl "$exifToolPath/exiftool" "-FileCreateDate<DateTimeOriginal" "-FileModifyDate<DateTimeOriginal" "$photoFileName"
                processedByFilename=$((processedByFilename + 1))
                tmpCount=$((tmpCount + 45))
                fi
            else
                if [[ "$debugOutput" == "True" ]]; then
                echo "$isAndroidWhatsAppImage"
                echo "Skip image check in $photoFileName"
                tmpCount=$((tmpCount + 45))
                fi
                skippedFiles=$((skippedFiles + 1))
            fi
            fi
        fi
        fi  
        done < $tmpFileName
    

    【讨论】:

      【解决方案2】:

      http://www.sno.phy.queensu.ca/~phil/exiftool/ 有一个 Exif 工具

      那里有很多文档,但有一些例子:

      这样称呼 exiftool -json=picture.json picture.jpg

      exiftool -filename -imagesize -exif:fnumber -xmp:all image.jpg

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-13
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        • 2019-05-03
        • 2014-08-20
        相关资源
        最近更新 更多