Pacix Labs

รูปภาพ

วิธีรวมไฟล์ JSON จาก Google Takeout เข้ากับรูปภาพ (แก้วันที่ผิด)

Google Takeout เก็บวันที่ของรูปภาพไว้ในไฟล์ JSON แยกต่างหาก เครื่องมือฟรี 4 ตัวช่วยรวมกลับเข้าไป: แต่ละตัวแก้อะไร คำสั่งที่ใช้ และวิธีตรวจสอบผลลัพธ์

· 8 นาทีในการอ่าน

มีให้อ่านในภาษา: العربيةবাংলাDeutschespañolfrançaisગુજરાતીहिन्दीIndonesiaitaliano日本語ಕನ್ನಡ한국어EnglishमराठीpolskiportuguêsрусскийKiswahiliதமிழ்తెలుగుTürkçeукраїнськаاردوTiếng Việt中文

คุณดาวน์โหลดคลังรูปภาพ Google Photos ด้วย Google Takeout ตอนนี้มีรูปหลายพันรูปวางอยู่ข้างไฟล์ .json หลายพันไฟล์ และโปรแกรมดูรูปบอกว่ารูปจากปี 2019 ถ่ายเมื่อวานนี้ วิธีแก้คือรวมไฟล์ JSON แต่ละไฟล์กลับเข้าไปในรูปของมัน เครื่องมือจะอ่านวันที่ถ่ายจากไฟล์ JSON แล้วเขียนลงในรูป ทำให้ทุกแอปกลับมาแสดงวันที่ที่ถูกต้อง

คู่มือนี้อธิบายว่าทำไมจึงมีไฟล์ JSON ทำไมการรวมไฟล์บางครั้งจึงล้มเหลว และเครื่องมือฟรี 4 ตัวรวมไฟล์อย่างไร คุณจะได้คำสั่งที่ใช้กับแต่ละตัว รู้ว่าแต่ละตัวเปลี่ยนวันที่แบบไหน และวิธีตรวจสอบผลลัพธ์ก่อนลบอะไรทิ้ง

ทำไมรูปภาพของคุณถึงมีไฟล์ JSON มาด้วย

สำหรับรูปแต่ละรูป Takeout ให้ไฟล์มาสองไฟล์ คือไฟล์ภาพ เช่น IMG_1234.jpg และไฟล์ JSON ที่มีวันที่ต้นฉบับ พิกัด GPS คำอธิบาย และอัลบั้มที่รูปนั้นอยู่ คู่มือการส่งออกข้อมูลฉบับหนึ่งเล่าถึงสิ่งที่มักเห็นในครั้งแรก: รูปจากปี 2019 แสดงวันที่เป็น "เมื่อวาน" ไม่มีตำแหน่งและไม่มีอัลบั้ม ทั้งที่ไม่มีอะไรหายไปเลย ข้อมูลอยู่ในไฟล์ JSON (PixelUnion) Illinois Tech ก็อธิบายแบบเดียวกันว่าทำไมไฟล์ที่ส่งออกมาจึงมีจำนวนมากกว่ารูปในคลังของคุณ (Illinois Tech)

ไฟล์รูปอาจมีข้อมูลไม่ตรงกับไฟล์ JSON ผู้สร้าง google-photos-exif สังเกตว่าถ้าคุณเปลี่ยนวันที่ใน Google Photos เมทาดาทาในตัวภาพจะไม่ถูกอัปเดต วันที่ใหม่จะอยู่แค่ในไฟล์ JSON รูปบางรูป ซึ่งมักเป็นรูปที่คนอื่นแชร์ให้คุณ ไม่มีวันที่อยู่ข้างในเลย (google-photos-exif) README ของ gphotos-takeout-repair แสดงปัญหาอีกครึ่งหนึ่ง: ในข้อมูลที่ส่งออกและแตกไฟล์แล้ว ทั้งรูป เวอร์ชันที่แก้ไข และไฟล์ JSON ต่างแสดงวันที่ส่งออกของ Takeout เป็นวันที่สร้าง (gphotos-takeout-repair)

ดังนั้นแอปที่อ่านแค่ไฟล์รูปจะไม่เห็นวันที่เลย หรือเห็นวันที่คุณส่งออกข้อมูล วันที่ที่ถูกต้องอยู่ในไฟล์ JSON และการรวมไฟล์จะนำวันที่นั้นกลับเข้าไป

สามเรื่องที่ทำให้การรวมไฟล์พัง

เครื่องมือรวมไฟล์ทุกตัวต้องหาไฟล์ JSON ที่ถูกต้องให้รูปแต่ละรูป ลักษณะสามอย่างของ Takeout ทำให้เรื่องนี้ยากขึ้น

  1. รูปกับไฟล์ JSON ของมันอาจอยู่คนละ zip คำถามที่พบบ่อยเรื่องการย้ายข้อมูลของ Ente ยกตัวอย่าง flower.jpeg อยู่ใน zip หนึ่ง และ flower.json อยู่ในอีก zip หนึ่ง ทำให้จับคู่กันไม่ได้ (Ente) README ของ Porte ระบุกรณีเดียวกันนี้เป็นข้อจำกัดที่ทราบอยู่แล้ว: มันหาไฟล์เมทาดาทาที่อยู่ในไฟล์บีบอัดคนละไฟล์กับรูปไม่เจอ (Porte)
  2. ชื่อไฟล์ JSON ไม่สม่ำเสมอ สำหรับ IMG123.jpg คุณอาจได้ IMG123.jpg.json หรือแค่ IMG123.json และบางโฟลเดอร์มีไฟล์ JSON ที่ไม่มีรูปคู่กัน (google-photos-exif)
  3. รูปที่แก้ไขแล้วออกมาสองรูป Takeout ส่งออกรูปต้นฉบับและสำเนาที่แก้ไขเป็นไฟล์แยกที่มีค่า hash ต่างกัน เครื่องมือหาไฟล์ซ้ำที่เทียบ hash จึงจับไม่ได้ (Ente) ไฟล์ที่แก้ไขจะมีคำต่อท้าย -edited เช่น IMG_0001-edited.jpg อยู่ข้าง IMG_0001.jpg (gphotos-takeout-repair)

วิธีแก้ข้อแรกเหมือนกันทุกเครื่องมือ: ดาวน์โหลดไฟล์ zip ทุกไฟล์ แล้วแตกทั้งหมดลงในโฟลเดอร์หลักโฟลเดอร์เดียว โดยคงโฟลเดอร์ย่อยไว้ตามเดิม (Ente) ถ้ามี zip สองไฟล์ที่มีโฟลเดอร์ชื่อเดียวกัน ให้รวมเนื้อหาของโฟลเดอร์เข้าด้วยกัน แทนที่จะให้โฟลเดอร์หนึ่งเขียนทับอีกโฟลเดอร์ (google-photos-exif)

เคล็ดลับจาก Illinois Tech สำหรับการดาวน์โหลด: เปิดหน้าต่าง Takeout ไว้ด้านหน้า ถ้าย่อหน้าต่างหรือไปทำงานในหน้าต่างอื่น การดาวน์โหลดจะล้มเหลวหลังจาก 15 นาที เพราะ Google ขอให้คุณลงชื่อเข้าใช้อีกครั้ง (Illinois Tech)

เครื่องมือฟรี 4 ตัว และวันที่ที่แต่ละตัวแก้

รูปภาพมีวันที่สองแบบ วันที่ EXIF (DateTimeOriginal) เก็บอยู่ในตัวภาพและติดไปกับภาพในทุกแอปหรือบริการ วันที่ของไฟล์ (วันที่แก้ไขหรือวันที่สร้าง) เป็นของระบบไฟล์ และหายได้ง่าย: README ของ gpth เตือนว่าการย้ายไฟล์บนโทรศัพท์ Android มักจะรีเซ็ตค่านี้ (gpth) ก่อนเลือกเครื่องมือ ให้ตรวจดูว่ามันเขียนวันที่แบบไหนในสองแบบนี้

ในทุกคำสั่งด้านล่าง โฟลเดอร์แรกคือ Takeout ที่แตกไฟล์แล้ว และโฟลเดอร์ที่สองคือโฟลเดอร์ผลลัพธ์ใหม่ที่ว่างเปล่า

Porte: เขียนวันที่และตำแหน่งลงในรูป

Porte คัดลอกเวลาและตำแหน่งทางภูมิศาสตร์จากไฟล์ JSON ที่เกี่ยวข้องลงในข้อมูล EXIF ของภาพ โดยไม่บีบอัดภาพใหม่ ถ้าหาวันที่ไม่เจอ มันจะลองดึงจากชื่อไฟล์ และใช้วันที่เก่าที่สุดที่พบ เพื่อไม่ให้วันที่แก้ไขไฟล์ถูกนับเป็นวันที่ถ่าย มันคัดลอกไฟล์ไปยังโฟลเดอร์ผลลัพธ์แทนการแก้ไขไฟล์เดิม แยกไฟล์ที่ล้มเหลวไว้ในอีกโฟลเดอร์ และบันทึก log ไว้ มันไม่เก็บข้อมูลอัลบั้ม คุณดาวน์โหลดโปรแกรมสำเร็จรูปได้จากหน้า releases ของโปรเจกต์ (Porte):

porte srcpath destpath

google-photos-exif: เติมวันที่ EXIF ที่ขาดหายไป

เครื่องมือ Node.js ตัวนี้อ่าน photoTakenTime จากไฟล์ JSON แต่ละไฟล์ มันตั้งวันที่แก้ไขของไฟล์ และเติม DateTimeOriginal เฉพาะเมื่อรูปยังไม่มีค่านี้ ไฟล์ที่ประมวลผลไม่ได้จะไปอยู่ในโฟลเดอร์ error (google-photos-exif) ผู้เขียนของ PixelUnion ใช้เครื่องมือนี้และบอกว่ามันประมวลผลคลังรูปทั้งหมดเสร็จในราวยี่สิบนาที (PixelUnion)

yarn start --inputDir ~/takeout --outputDir ~/output --errorDir ~/error

gpth: จัดรูปลงโฟลเดอร์เดียวหรือแยกตามเดือน แล้วตั้งวันที่ของไฟล์

Google Photos Takeout Helper เป็นแบบโต้ตอบ: คุณรันมันแล้วตอบคำถาม มันรวบรวมรูปทั้งหมดไว้ในโฟลเดอร์เดียว หรือแยกเป็นโฟลเดอร์ตามเดือนด้วยตัวเลือก --divide-to-dates และตั้งวันที่แก้ไขล่าสุดของไฟล์ การเขียนข้อมูล JSON กลับเข้า EXIF ยังอยู่ในรายการสิ่งที่ต้องทำ README จึงให้คำสั่ง exiftool เพิ่มเติมที่คัดลอกวันที่ของไฟล์ไปใส่ในวันที่ EXIF สำหรับรูปที่ยังไม่มี ให้รันคำสั่งนั้นก่อนแตะไฟล์อีกครั้ง โปรดทราบว่า gpth ย้ายไฟล์เป็นค่าเริ่มต้น จึงควรเก็บไฟล์ zip ต้นฉบับไว้ (gpth)

exiftool -overwrite_original -r -if 'not defined DateTimeOriginal' -P "-AllDates<FileModifyDate" "your/output/folder/ALL_PHOTOS/"

gphotos-takeout-repair: เอาไฟล์ JSON และรูปซ้ำที่แก้ไขออก

เครื่องมือนี้คัดลอกรูปของคุณไปยังโฟลเดอร์ใหม่ คงโครงสร้างโฟลเดอร์ไว้ และตั้งวันที่สร้างของแต่ละไฟล์จาก photoTakenTime ในไฟล์ JSON ถ้ามีสำเนา -edited มันจะเก็บเวอร์ชันนั้น (ซึ่งมักดีที่สุด) และไม่เอาต้นฉบับ ผลลัพธ์จึงไม่มีทั้งไฟล์ JSON และรูปซ้ำที่แก้ไขแล้ว (gphotos-takeout-repair) ติดตั้งด้วย npm install -g gphotos-takeout-repair แล้วรัน:

gphotos-takeout-repair --src ./unzipped-takeout-dir --dest ./output-dir

ถ้าต้องการให้วันที่อยู่ในตัวภาพสำหรับทุกรูป Porte จะเขียนลงไปโดยตรง ส่วนอีกสามตัว ให้ตรวจวันที่ EXIF ภายหลังตามวิธีด้านล่าง

ตรวจสอบว่าวันที่อยู่ในรูปจริงๆ

อย่าเชื่อคอลัมน์ "วันที่แก้ไข" ในโปรแกรมจัดการไฟล์ ให้ตรวจที่เมทาดาทาโดยตรง

  1. โดยไม่ต้องใช้ซอฟต์แวร์เพิ่ม: คลิกขวาที่รูปแล้วเลือก Get Info บน Mac หรือ Properties บน Windows หลังรวมไฟล์สำเร็จ คุณควรเห็นวันที่ถ่ายที่ถูกต้อง พิกัด GPS ถ้ารูปนั้นมี และรุ่นกล้องถ้ามีข้อมูล (PixelUnion)
  2. สำหรับทั้งโฟลเดอร์: ExifTool แสดงแท็ก DateTimeOriginal ของไฟล์ JPG ทุกไฟล์ในโฟลเดอร์ได้ บรรทัดนี้อิงจากตัวอย่างในเอกสารของมัน (ExifTool):
exiftool -DateTimeOriginal -S -s -ext jpg .

บรรทัดว่าง หรือวันที่ในสัปดาห์ที่คุณส่งออกข้อมูล หมายความว่ารูปนั้นยังไม่ได้รวม จากนั้นให้ดูโฟลเดอร์ error หรือ failed ของเครื่องมือ และตรวจว่าไฟล์ JSON ที่คู่กันมาจาก zip อื่นหรือไม่

  1. เทียบจำนวน โฟลเดอร์ผลลัพธ์รวมกับโฟลเดอร์ error ควรมีรูปและวิดีโอประมาณเท่ากับ Takeout ที่แตกไฟล์แล้ว หักรูปซ้ำที่แก้ไขออกถ้าเครื่องมือของคุณลบออก

ทางเลือกแบบคลิกเดียว

ถ้าไม่อยากใช้บรรทัดคำสั่ง แอปบนเดสก์ท็อปก็ทำงานเดียวกันได้ PHOTOK เป็นผลิตภัณฑ์ของ Pacix Labs ตามที่ระบุในหน้าของมัน แอปจะอ่านไฟล์ .json ที่ Google กระจายไว้ทั่ว แล้วใส่วันที่และสถานที่จริงกลับเข้าไป จากนั้นจัดรูปลงโฟลเดอร์ ปี / เดือน / สถานที่ และแยกรูปซ้ำที่เหมือนกันทุกประการไว้ต่างหาก ใช้งานได้บน Windows 10 และ 11 และบน Mac ที่ใช้ชิป Apple ทำงานโดยไม่อัปโหลดอะไรเลย และไม่ลบไฟล์ใดๆ เวอร์ชันทดลองดูใช้ฟรี ส่วนเวอร์ชันเต็มราคา €49 จ่ายครั้งเดียว (PHOTOK)

ไม่ว่าจะเลือกทางไหน เครื่องมือฟรีด้านบนหรือแอป กฎก็เหมือนกัน: ทำงานกับสำเนา ตรวจรูปตัวอย่าง และเก็บไฟล์ zip ไว้

รายการตรวจสอบ

  • ดาวน์โหลดไฟล์ zip ทุกไฟล์ และเก็บสำเนาไว้ในไดรฟ์ที่สอง
  • แตกไฟล์ zip ทั้งหมดลงในโฟลเดอร์หลักโฟลเดอร์เดียว คงโฟลเดอร์ย่อยไว้ และรวมโฟลเดอร์ที่ชื่อเหมือนกัน
  • เลือกเครื่องมือและรู้ว่ามันเขียนวันที่แบบไหน: วันที่ EXIF วันที่ของไฟล์ หรือทั้งสองอย่าง
  • รันกับสำเนา โดยส่งผลลัพธ์ไปยังโฟลเดอร์ใหม่
  • ตรวจ DateTimeOriginal จากรูปตัวอย่างหลายๆ ปี และดูในโฟลเดอร์ error
  • ตัดสินใจว่าจะทำอย่างไรกับสำเนา -edited
  • ลบไฟล์ JSON และไฟล์ zip หลังจากตรวจสอบและมีข้อมูลสำรองชุดที่สองแล้วเท่านั้น

คำถามที่พบบ่อย

ทำไม Google Takeout ถึงให้ไฟล์ JSON มาพร้อมกับรูปภาพของฉัน

Google เก็บวันที่ถ่าย ตำแหน่ง คำอธิบาย และข้อมูลอัลบั้มที่รู้เกี่ยวกับรูปแต่ละรูปไว้ในไฟล์ .json แยกที่อยู่ข้างรูป ตัวไฟล์รูปเองอาจไม่มีข้อมูลเดียวกัน เช่น ในกรณีที่คุณเปลี่ยนวันที่ใน Google Photos

ลบไฟล์ JSON ได้ไหม

ลบได้หลังจากวันที่และสถานที่เข้าไปอยู่ในรูปแล้ว และคุณได้ตรวจสอบรูปตัวอย่างแล้วเท่านั้น ก่อนหน้านั้น ไฟล์ JSON คือที่เดียวที่เก็บวันที่และตำแหน่งของรูปตามที่ Google รู้

เครื่องมือรวมไฟล์แก้วันที่แบบไหน

ขึ้นอยู่กับเครื่องมือ บางตัวเขียนวันที่ลงในเมทาดาทา EXIF ของรูป (DateTimeOriginal) ซึ่งติดไปกับไฟล์ บางตัวตั้งเพียงวันที่แก้ไขหรือวันที่สร้างของไฟล์ ซึ่งวิธีคัดลอกบางแบบจะรีเซ็ตค่านี้ อ่าน README ของเครื่องมือก่อนเลือก

ทำไมรูปบางรูปยังผิดอยู่หลังรวมไฟล์แล้ว

ส่วนใหญ่เป็นเพราะรูปกับไฟล์ JSON ของมันอยู่คนละ zip และไม่เคยถูกนำมารวมกัน หรือไฟล์ JSON มีชื่อต่างจากรูป แตกไฟล์ zip ทั้งหมดลงในโฟลเดอร์เดียว รันเครื่องมืออีกครั้งกับสำเนาใหม่ แล้วดูโฟลเดอร์ error หรือ failed ของเครื่องมือ

ต้องเก็บไฟล์ zip ต้นฉบับไว้ไหม

ต้องเก็บ จนกว่าจะตรวจสอบคลังรูปที่รวมแล้วและมีข้อมูลสำรองอีกชุดหนึ่ง เครื่องมือบางตัวย้ายไฟล์แทนการคัดลอก และไฟล์ zip คือทางเดียวที่คุณจะเริ่มต้นใหม่ได้

แหล่งที่มา