Pacix Labs

الصور

صور جوجل تيك اوت: كيف تدمج ملفات JSON في الصور وتصلح التواريخ الخاطئة

يحفظ Google Takeout تواريخ صورك في ملفات JSON منفصلة. أربع أدوات مجانية تعيد دمجها في الصور: ما الذي تصلحه كل أداة، والأوامر الدقيقة، وطريقة التحقق من النتيجة.

· 7 دقائق للقراءة

متوفر أيضًا بـ: বাংলাDeutschespañolfrançaisગુજરાતીहिन्दीIndonesiaitaliano日本語ಕನ್ನಡ한국어EnglishमराठीpolskiportuguêsрусскийKiswahiliதமிழ்తెలుగుไทยTürkçeукраїнськаاردوTiếng Việt中文

نزّلت مكتبة صور Google الخاصة بك باستخدام Google Takeout. والآن لديك آلاف الصور بجانب آلاف ملفات .json، وعارض الصور يقول إن صورة من عام 2019 التُقطت أمس. لإصلاح صور جوجل تيك اوت، تدمج كل ملف JSON في صورته. تقرأ أداةٌ تاريخ الالتقاط من ملف JSON وتكتبه داخل الصورة، فيعرض كل تطبيق التاريخ الصحيح من جديد.

يشرح هذا الدليل سبب وجود ملفات JSON، ولماذا يفشل الدمج أحيانًا، وكيف تنفّذ أربع أدوات مجانية هذا الدمج. ستحصل على الأمر الدقيق لكل أداة، وعلى التاريخ الذي تغيّره كل واحدة منها، وعلى طريقة للتحقق من النتيجة قبل أن تحذف أي شيء.

لماذا تأتي صورك مع ملفات JSON

لكل صورة، يعطيك Takeout ملفين: الصورة نفسها، مثل IMG_1234.jpg، وملف JSON يحتوي على التاريخ الأصلي وإحداثيات GPS والوصف والألبومات التي تنتمي إليها. يصف أحد أدلة التصدير الانطباع الأول المعتاد: صورة من عام 2019 ظهر تاريخها "أمس"، بلا موقع ولا ألبوم، مع أن شيئًا لم يُفقد. كانت المعلومات في ملف JSON (PixelUnion). ويقدّم معهد إلينوي للتكنولوجيا التفسير نفسه لسبب احتواء التصدير على ملفات أكثر من عدد الصور في مكتبتك (Illinois Tech).

قد لا يتطابق ملف الصورة مع ملف JSON. لاحظ مؤلف google-photos-exif أنك إذا غيّرت تاريخًا داخل صور Google، فإن البيانات الوصفية داخل الصورة لا تُحدَّث: التاريخ الجديد موجود في ملف 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 في ملف آخر، وهذا يمنع المطابقة بينهما (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).

ونصيحة من معهد إلينوي للتكنولوجيا بخصوص التنزيل: أبقِ نافذة Takeout في المقدمة. إذا صغّرتها أو عملت في نافذة أخرى، تفشل التنزيلات بعد 15 دقيقة لأن Google تطلب منك تسجيل الدخول مرة أخرى (Illinois Tech).

أربع أدوات مجانية لصور جوجل تيك اوت والتاريخ الذي تصلحه كل منها

للصورة نوعان من التاريخ. تاريخ EXIF (DateTimeOriginal) محفوظ داخل الصورة وينتقل معها إلى أي تطبيق أو خدمة. أما تاريخ الملف (تاريخ التعديل أو الإنشاء) فينتمي إلى نظام الملفات، ومن السهل أن يضيع: يحذّر ملف README الخاص بـ gpth من أن نقل الملفات على هاتف Android يعيد ضبطه في العادة (gpth). قبل أن تختار أداة، تحقق من أي النوعين تكتب.

في كل أمر أدناه، المجلد الأول هو Takeout المستخرج، والثاني مجلد إخراج جديد وفارغ.

Porte: يكتب التاريخ والموقع داخل الصورة

ينسخ Porte الطابع الزمني والموقع الجغرافي من ملف JSON المرتبط إلى بيانات EXIF في الصورة، من دون إعادة ضغط الصورة. وإذا لم يجد تاريخًا، يحاول استخراجه من اسم الملف، ويستخدم أقدم تاريخ يجده حتى لا يُعتبر تاريخ تعديل الملف تاريخًا للالتقاط. وهو ينسخ الملفات إلى مجلد الإخراج بدل تعديلها في مكانها، ويضع الملفات الفاشلة في مجلد منفصل ويحفظ سجلًا. ولا يحتفظ ببيانات الألبومات. يمكنك تنزيل برنامج جاهز من صفحة الإصدارات في المشروع (Porte):

porte srcpath destpath

google-photos-exif: يملأ تاريخ EXIF المفقود

تقرأ أداة Node.js هذه القيمة photoTakenTime من كل ملف JSON. وهي تضبط تاريخ تعديل الملف، ولا تملأ DateTimeOriginal إلا إذا لم يكن موجودًا في الصورة أصلًا. والملفات التي لا تستطيع معالجتها تذهب إلى مجلد للأخطاء (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. من دون برامج إضافية: انقر بزر الفأرة الأيمن على صورة واختر "الحصول على المعلومات" على Mac أو "خصائص" على Windows. بعد دمج ناجح يجب أن ترى تاريخ الالتقاط الصحيح، وإحداثيات GPS إن كانت الصورة تحتوي عليها، وطراز الكاميرا حيثما توفر (PixelUnion).
  2. لمجلد كامل: يستطيع ExifTool طباعة الوسم DateTimeOriginal لكل ملف JPG في مجلد. هذا السطر مبني على مثال من وثائقه (ExifTool):
exiftool -DateTimeOriginal -S -s -ext jpg .

السطر الفارغ أو التاريخ الذي يعود إلى أسبوع التصدير يعني أن تلك الصورة لم تُدمج. عندها افحص مجلد الأخطاء أو الملفات الفاشلة لدى الأداة، وتحقق مما إذا كان ملف JSON المطابق قد جاء من ملف zip آخر.

  1. قارن الأعداد. يجب أن يحتوي مجلد الإخراج مع مجلد الأخطاء على عدد من الصور ومقاطع الفيديو يقارب عددها في Takeout المستخرج، مطروحًا منه النسخ المعدّلة المكررة إن كانت أداتك تزيلها.

بديل بنقرة واحدة

إذا كنت لا تريد استخدام سطر الأوامر، فيمكن لتطبيق سطح مكتب أن يؤدي المهمة نفسها. PHOTOK منتج من Pacix Labs. وبحسب صفحته، يقرأ ملفات .json التي تبعثرها Google هنا وهناك ويعيد التواريخ والأماكن الحقيقية إلى الصور، ثم يرتّب الصور في مجلدات حسب السنة / الشهر / المكان ويضع النسخ المكررة المتطابقة تمامًا جانبًا. يعمل على Windows 10 و11 وعلى أجهزة Mac بشريحة Apple، ولا يرفع أي شيء، ولا يحذف أي ملف أبدًا. المعاينة مجانية، والنسخة الكاملة تكلّف ‎€49 تُدفع مرة واحدة (PHOTOK).

أيًّا كان الطريق الذي تختاره، الأدوات المجانية أعلاه أو تطبيق، فالقواعد واحدة: اعمل على نسخة، وتحقق من عيّنة، واحتفظ بملفات zip.

قائمة التحقق

  • نزّل كل ملفات zip واحتفظ بنسخة منها على قرص ثانٍ.
  • استخرج كل ملفات zip في مجلد رئيسي واحد، وأبقِ المجلدات الفرعية، وادمج المجلدات التي تحمل الاسم نفسه.
  • اختر أداة واعرف أي تاريخ تكتب: تاريخ EXIF أو تاريخ الملف أو كليهما.
  • شغّلها على نسخة، وأخرج النتيجة إلى مجلد جديد.
  • تحقق من DateTimeOriginal في عيّنة من سنوات مختلفة، وافحص مجلد الأخطاء.
  • قرّر ما ستفعله بنسخ -edited.
  • لا تحذف ملفات JSON وملفات zip إلا بعد التحقق وبعد إنشاء نسخة احتياطية ثانية.

الأسئلة الشائعة

لماذا يعطيني Google Takeout ملفات JSON مع صوري؟

تحفظ Google تاريخ الالتقاط والموقع والوصف ومعلومات الألبومات التي تعرفها عن كل صورة في ملف .json منفصل بجانب الصورة. وقد لا يحتوي ملف الصورة نفسه على المعلومات نفسها، مثلًا إذا غيّرت التاريخ داخل صور Google.

هل يمكنني حذف ملفات JSON؟

فقط بعد أن تصبح التواريخ والأماكن داخل الصور وتكون قد تحققت من عيّنة منها. قبل ذلك، يكون ملف JSON المكان الوحيد الذي يُحفظ فيه تاريخ الصورة وموقعها كما تعرفهما Google.

أي تاريخ تصلحه أداة الدمج؟

يعتمد ذلك على الأداة. بعض الأدوات تكتب التاريخ في بيانات EXIF الوصفية للصورة (DateTimeOriginal)، وهي تنتقل مع الملف أينما ذهب. وأدوات أخرى تضبط فقط تاريخ تعديل الملف أو تاريخ إنشائه، وهو تاريخ تعيد بعض طرق النسخ ضبطه. اقرأ ملف README الخاص بالأداة قبل أن تختار.

لماذا تبقى بعض الصور خاطئة بعد الدمج؟

في الغالب لأن الصورة وملف JSON الخاص بها كانا في ملفي zip مختلفين ولم يُجمعا معًا أبدًا، أو لأن اسم ملف JSON يختلف عن اسم الصورة. استخرج كل ملفات zip في مجلد واحد، وشغّل الأداة من جديد على نسخة جديدة، وافحص مجلد الأخطاء أو الملفات الفاشلة لدى الأداة.

هل أحتاج إلى الاحتفاظ بملفات zip الأصلية؟

نعم، إلى أن تتحقق من المكتبة المدموجة ويكون لديك نسخة احتياطية أخرى. بعض الأدوات تنقل الملفات بدل نسخها، وملفات zip هي طريقتك الوحيدة للبدء من جديد.

المصادر