ছবি
গুগল টেকআউটের JSON ফাইল ছবির সঙ্গে মার্জ করার উপায় (ভুল তারিখ ঠিক করুন)
Google Takeout আপনার ছবির তারিখ আলাদা JSON ফাইলে রাখে। চারটি ফ্রি টুল সেগুলো আবার ছবিতে মিশিয়ে দেয়: কোন টুল কী ঠিক করে, সঠিক কমান্ড, আর ফলাফল কীভাবে যাচাই করবেন।
অন্যান্য ভাষায়ও পাওয়া যায়: العربيةDeutschespañolfrançaisગુજરાતીहिन्दीIndonesiaitaliano日本語ಕನ್ನಡ한국어EnglishमराठीpolskiportuguêsрусскийKiswahiliதமிழ்తెలుగుไทยTürkçeукраїнськаاردوTiếng Việt中文
আপনি Google Takeout দিয়ে আপনার Google Photos লাইব্রেরি ডাউনলোড করেছেন। এখন হাজার হাজার ছবির পাশে হাজার হাজার .json ফাইল, আর আপনার ফটো ভিউয়ার বলছে ২০১৯ সালের একটি ছবি গতকাল তোলা। গুগল টেকআউটের এই সমস্যা ঠিক করতে প্রতিটি JSON ফাইলকে তার ছবির সঙ্গে মার্জ করতে হয়। একটি টুল JSON ফাইল থেকে ছবি তোলার তারিখ পড়ে সেটা ছবির ভেতরে লিখে দেয়, ফলে প্রতিটি অ্যাপ আবার সঠিক তারিখ দেখায়।
এই গাইডে বোঝানো হয়েছে JSON ফাইলগুলো কেন থাকে, মার্জ কেন মাঝে মাঝে ব্যর্থ হয়, আর চারটি ফ্রি টুল কীভাবে মার্জ করে। প্রতিটি টুলের সঠিক কমান্ড, কোন টুল কোন তারিখ বদলায়, আর কিছু মোছার আগে ফলাফল যাচাই করার একটি উপায়ও পাবেন।
আপনার ছবির সঙ্গে JSON ফাইল আসে কেন
প্রতিটি ছবির জন্য Takeout আপনাকে দুটি ফাইল দেয়: ছবিটি, যেমন IMG_1234.jpg, আর একটি JSON ফাইল, যাতে থাকে মূল তারিখ, GPS কোঅর্ডিনেট, বিবরণ আর কোন কোন অ্যালবামে ছবিটি আছে। একটি এক্সপোর্ট গাইড প্রথম দেখার সাধারণ অভিজ্ঞতা বর্ণনা করেছে: ২০১৯ সালের একটি ছবির তারিখ দেখাচ্ছিল "গতকাল", কোনো লোকেশন নেই, অ্যালবামও নেই, অথচ কিছুই হারায়নি। তথ্যটা ছিল JSON ফাইলে (PixelUnion)। এক্সপোর্টে কেন আপনার লাইব্রেরির ছবির চেয়ে বেশি ফাইল থাকে, Illinois Tech-ও একই ব্যাখ্যা দিয়েছে (Illinois Tech)।
ছবির ফাইল আর JSON ফাইলের তথ্য না-ও মিলতে পারে। google-photos-exif-এর লেখক লক্ষ করেছেন, Google Photos-এর ভেতরে কোনো তারিখ বদলালে ছবির ভেতরের মেটাডেটা আপডেট হয় না: নতুন তারিখ থাকে কেবল JSON ফাইলে। কিছু ছবিতে, প্রায়ই যেগুলো অন্যরা আপনার সঙ্গে শেয়ার করেছে, ভেতরে কোনো তারিখই থাকে না (google-photos-exif)। gphotos-takeout-repair-এর README সমস্যার অন্য অর্ধেকটা দেখায়: এক্সট্র্যাক্ট করা এক্সপোর্টে ছবি, তার এডিট করা সংস্করণ আর JSON ফাইল, তিনটিরই created তারিখ হিসেবে Takeout এক্সপোর্টের তারিখ দেখা যায় (gphotos-takeout-repair)।
তাই যে অ্যাপ শুধু ছবির ফাইল পড়ে, সে হয় কোনো তারিখই দেখে না, নয়তো যেদিন আপনি এক্সপোর্ট করেছেন সেই দিনটা দেখে। সঠিক তারিখ আছে JSON ফাইলে, আর মার্জ সেটাকে ছবিতে ফিরিয়ে দেয়।
তিনটি বিষয় যা মার্জ নষ্ট করে
প্রতিটি মার্জ টুলকে প্রতিটি ছবির জন্য সঠিক JSON ফাইল খুঁজে বের করতে হয়। Takeout-এর তিনটি খুঁটিনাটি এ কাজটা কঠিন করে তোলে।
- একটি ছবি আর তার JSON ফাইল আলাদা zip-এ থাকতে পারে। Ente-এর মাইগ্রেশন FAQ উদাহরণ দিয়েছে:
flower.jpegএকটি zip-এ আরflower.jsonআরেকটিতে, ফলে দুটিকে মেলানো যায় না (Ente)। Porte-এর README-ও একই ঘটনাকে একটি জানা সীমাবদ্ধতা হিসেবে উল্লেখ করেছে: যে মেটাডেটা ফাইল তার ছবি থেকে আলাদা আর্কাইভে থাকে, সেটা এটি খুঁজে পায় না (Porte)। - JSON ফাইলের নাম একরকম নয়।
IMG123.jpg-এর জন্য আপনি পেতে পারেনIMG123.jpg.jsonঅথবা শুধুIMG123.json, আর কিছু ফোল্ডারে এমন JSON ফাইল থাকে যার সঙ্গে মেলে এমন কোনো ছবি নেই (google-photos-exif)। - এডিট করা ছবি দুবার আসে। Takeout মূল ছবি আর এডিট করা কপিকে আলাদা হ্যাশসহ আলাদা ফাইল হিসেবে এক্সপোর্ট করে, তাই হ্যাশ তুলনা করা ডুপ্লিকেট ফাইন্ডার এগুলোকে ধরতে পারে না (Ente)। এডিট করা ফাইলের নামের শেষে থাকে
-edited, যেমনIMG_0001-edited.jpg-এর পাশেIMG_0001.jpg(gphotos-takeout-repair)।
প্রথম সমস্যার সমাধান সব টুলের জন্য একই: সব zip ডাউনলোড করুন, তারপর সবগুলোকে একটি প্যারেন্ট ফোল্ডারে এক্সট্র্যাক্ট করুন এবং সাবফোল্ডারগুলো যেমন আছে তেমনই রাখুন (Ente)। দুটি zip-এ একই নামের ফোল্ডার থাকলে একটি দিয়ে অন্যটি বদলে না দিয়ে দুই ফোল্ডারের ভেতরের জিনিস একসঙ্গে মিলিয়ে নিন (google-photos-exif)।
ডাউনলোডের জন্য Illinois Tech-এর একটি পরামর্শ: Takeout-এর উইন্ডো সামনে রাখুন। আপনি যদি এটি মিনিমাইজ করেন বা অন্য উইন্ডোতে কাজ করেন, ১৫ মিনিট পরে ডাউনলোড ব্যর্থ হয়, কারণ Google আপনাকে আবার সাইন ইন করতে বলে (Illinois Tech)।
গুগল টেকআউটের জন্য চারটি ফ্রি টুল এবং প্রতিটি কোন তারিখ ঠিক করে
একটি ছবির দুই ধরনের তারিখ থাকে। EXIF তারিখ (DateTimeOriginal) ছবির ভেতরে রাখা থাকে এবং যেকোনো অ্যাপ বা সার্ভিসে ছবির সঙ্গেই যায়। ফাইলের তারিখ (modified বা created) ফাইল সিস্টেমের অংশ। এটা সহজেই হারিয়ে যায়: gpth-এর README সতর্ক করে যে Android ফোনে ফাইল সরালে সাধারণত এটি রিসেট হয়ে যায় (gpth)। টুল বাছার আগে দেখে নিন সেটি এই দুটির কোনটি লেখে।
নিচের প্রতিটি কমান্ডে প্রথম ফোল্ডারটি আপনার এক্সট্র্যাক্ট করা Takeout, আর দ্বিতীয়টি একটি নতুন, খালি আউটপুট ফোল্ডার।
Porte: তারিখ আর লোকেশন ছবির ভেতরে লেখে
Porte সংশ্লিষ্ট JSON ফাইল থেকে টাইমস্ট্যাম্প আর জিওলোকেশন ছবির EXIF ডেটায় কপি করে, ছবিটি আবার কমপ্রেস না করেই। কোনো তারিখ না পেলে এটি ফাইলের নাম থেকে চেষ্টা করে, আর যে তারিখগুলো পায় তার মধ্যে সবচেয়ে পুরোনোটা নেয়, যাতে ফাইল বদলানোর তারিখকে ছবি তোলার তারিখ ধরে না নেওয়া হয়। এটি ফাইলগুলো জায়গায় বদলানোর বদলে আউটপুট ফোল্ডারে কপি করে, ব্যর্থ ফাইলগুলো আলাদা ফোল্ডারে রাখে আর একটি লগ সেভ করে। এটি অ্যালবামের ডেটা রাখে না। প্রজেক্টের releases পেজ থেকে তৈরি প্রোগ্রাম ডাউনলোড করতে পারেন (Porte):
porte srcpath destpath
google-photos-exif: অনুপস্থিত EXIF তারিখ পূরণ করে
এই Node.js টুলটি প্রতিটি JSON ফাইল থেকে photoTakenTime পড়ে। এটি ফাইলের modified তারিখ সেট করে, আর DateTimeOriginal কেবল তখনই পূরণ করে যখন ছবিতে সেটা আগে থেকে নেই। যে ফাইলগুলো এটি প্রসেস করতে পারে না, সেগুলো একটি error ফোল্ডারে যায় (google-photos-exif)। PixelUnion-এর লেখক এটি ব্যবহার করেছেন এবং জানিয়েছেন যে এটি পুরো লাইব্রেরি প্রায় বিশ মিনিটে প্রসেস করেছে (PixelUnion)।
yarn start --inputDir ~/takeout --outputDir ~/output --errorDir ~/error
gpth: একটি ফোল্ডারে বা মাস অনুযায়ী সাজায়, তারপর ফাইলের তারিখ সেট করে
Google Photos Takeout Helper ইন্টারঅ্যাকটিভ: আপনি এটি চালান আর এর প্রশ্নের উত্তর দেন। এটি সব ছবি একটি ফোল্ডারে জড়ো করে, অথবা --divide-to-dates অপশন দিয়ে মাস অনুযায়ী আলাদা ফোল্ডারে, এবং ফাইলের last-modified তারিখ সেট করে। JSON ডেটা আবার EXIF-এ লেখার কাজটা এখনো এর to-do তালিকায় আছে, তাই এর README একটি বাড়তি exiftool কমান্ড দেয়, যা যে ছবিগুলোতে কোনো EXIF তারিখ নেই সেগুলোর জন্য ফাইলের তারিখ EXIF তারিখে কপি করে। ফাইলগুলোতে আবার হাত দেওয়ার আগে এই কমান্ডটি চালান। মনে রাখবেন, gpth ডিফল্টভাবে ফাইল সরিয়ে দেয়, তাই মূল zip-গুলো রেখে দিন (gpth)।
exiftool -overwrite_original -r -if 'not defined DateTimeOriginal' -P "-AllDates<FileModifyDate" "your/output/folder/ALL_PHOTOS/"
gphotos-takeout-repair: JSON ফাইল আর এডিট করা ডুপ্লিকেট সরিয়ে দেয়
এই টুল আপনার ছবি একটি নতুন ফোল্ডারে কপি করে, ফোল্ডারের কাঠামো ঠিক রাখে, আর JSON ফাইলের photoTakenTime থেকে প্রতিটি ফাইলের created তারিখ সেট করে। যেখানে একটি -edited কপি আছে, সেখানে এটি সেই সংস্করণটিই রাখে (সাধারণত সেটাই সবচেয়ে ভালো) আর মূলটি বাদ দেয়, ফলে আউটপুটে কোনো JSON ফাইল বা এডিট করা ডুপ্লিকেট থাকে না (gphotos-takeout-repair)। npm install -g gphotos-takeout-repair দিয়ে এটি ইনস্টল করুন, তারপর:
gphotos-takeout-repair --src ./unzipped-takeout-dir --dest ./output-dir
প্রতিটি ছবির তারিখ যদি ছবির ভেতরেই চান, Porte সেটা সরাসরি লিখে দেয়। বাকি তিনটির ক্ষেত্রে পরে EXIF তারিখ যাচাই করুন, নিচে যেভাবে দেখানো হয়েছে।
যাচাই করুন তারিখগুলো সত্যিই ছবির ভেতরে আছে কি না
ফাইল ব্রাউজারের "date modified" কলামে ভরসা করবেন না। মেটাডেটা নিজেই যাচাই করুন।
- বাড়তি কোনো সফটওয়্যার ছাড়া: একটি ছবিতে রাইট-ক্লিক করে Mac-এ Get Info বা Windows-এ Properties বেছে নিন। ভালো মার্জের পরে আপনার দেখা উচিত সঠিক তোলার তারিখ, ছবিতে থাকলে GPS কোঅর্ডিনেট, আর যেখানে পাওয়া যায় ক্যামেরার মডেল (PixelUnion)।
- পুরো একটি ফোল্ডারের জন্য: ExifTool একটি ফোল্ডারের প্রতিটি JPG-এর
DateTimeOriginalট্যাগ দেখাতে পারে। এই লাইনটি এর ডকুমেন্টেশনের একটি উদাহরণের ওপর ভিত্তি করে (ExifTool):
exiftool -DateTimeOriginal -S -s -ext jpg .
খালি লাইন, বা আপনার এক্সপোর্টের সপ্তাহের কোনো তারিখ মানে সেই ছবিটি মার্জ হয়নি। তখন টুলের error বা failed ফোল্ডার দেখুন, আর যাচাই করুন মেলানো JSON ফাইলটি অন্য কোনো zip থেকে এসেছিল কি না।
- সংখ্যা মিলিয়ে দেখুন। আউটপুট ফোল্ডার আর error ফোল্ডার মিলিয়ে মোটামুটি ততগুলো ছবি আর ভিডিও থাকা উচিত যতগুলো এক্সট্র্যাক্ট করা Takeout-এ আছে; আপনার টুল এডিট করা ডুপ্লিকেট সরিয়ে দিলে সেগুলো বাদ দিয়ে।
এক ক্লিকের বিকল্প
কমান্ড লাইন ব্যবহার করতে না চাইলে একটি ডেস্কটপ অ্যাপও একই কাজ করতে পারে। PHOTOK হলো Pacix Labs-এর একটি প্রোডাক্ট। এর পেজ অনুযায়ী, এটি Google যেসব .json ফাইল এদিক-ওদিক ছড়িয়ে রাখে সেগুলো পড়ে আসল তারিখ আর জায়গা ফিরিয়ে দেয়, তারপর ছবিগুলো বছর / মাস / জায়গা অনুযায়ী ফোল্ডারে সাজায় এবং হুবহু একই ডুপ্লিকেটগুলো আলাদা করে রাখে। এটি Windows 10 ও 11-এ এবং Apple চিপযুক্ত Mac-এ চলে, কিছুই আপলোড না করে কাজ করে এবং কখনো কোনো ফাইল মোছে না। প্রিভিউ ফ্রি, আর পূর্ণ সংস্করণের দাম €49, একবারের পেমেন্ট (PHOTOK)।
যে পথই বেছে নিন, ওপরের ফ্রি টুল বা একটি অ্যাপ, নিয়ম একই: কপিতে কাজ করুন, কিছু ছবি যাচাই করুন, আর zip রেখে দিন।
চেকলিস্ট
- প্রতিটি zip ডাউনলোড করুন এবং দ্বিতীয় একটি ড্রাইভে কপি রাখুন।
- সব zip একটি প্যারেন্ট ফোল্ডারে এক্সট্র্যাক্ট করুন, সাবফোল্ডার রাখুন, একই নামের ফোল্ডারগুলো মিলিয়ে নিন।
- একটি টুল বেছে নিন এবং জেনে নিন সেটি কোন তারিখ লেখে: EXIF তারিখ, ফাইলের তারিখ নাকি দুটোই।
- এটি একটি কপিতে, নতুন আউটপুট ফোল্ডারে চালান।
- বিভিন্ন বছরের কিছু ছবিতে
DateTimeOriginalযাচাই করুন, আর error ফোল্ডার দেখুন। -editedকপিগুলো নিয়ে কী করবেন ঠিক করুন।- JSON ফাইল আর zip কেবল যাচাই এবং দ্বিতীয় ব্যাকআপের পরেই মুছুন।
প্রায়ই জিজ্ঞাসিত প্রশ্ন
Google Takeout আমার ছবির সঙ্গে JSON ফাইল দেয় কেন?
প্রতিটি ছবি সম্পর্কে Google যা জানে, যেমন তোলার তারিখ, লোকেশন, বিবরণ আর অ্যালবামের তথ্য, তা ছবির পাশে একটি আলাদা .json ফাইলে রাখে। ছবির ফাইলে হয়তো একই তথ্য থাকে না, যেমন আপনি যদি Google Photos-এর ভেতরে তারিখ বদলে থাকেন।
JSON ফাইলগুলো কি মুছে ফেলতে পারি?
কেবল তখনই, যখন তারিখ আর জায়গা ছবির ভেতরে চলে এসেছে এবং আপনি কিছু ছবি যাচাই করে দেখেছেন। তার আগে, ছবির যে তারিখ আর লোকেশন Google জানে, তা রাখা আছে কেবল JSON ফাইলেই।
মার্জ টুল কোন তারিখটা ঠিক করে?
সেটা টুলের ওপর নির্ভর করে। কিছু টুল তারিখটা ছবির EXIF মেটাডেটায় (DateTimeOriginal) লেখে, যা ফাইলের সঙ্গেই সব জায়গায় যায়। অন্যগুলো শুধু ফাইলের modified বা created তারিখ সেট করে, যা কপি করার কিছু পদ্ধতিতে রিসেট হয়ে যায়। বেছে নেওয়ার আগে টুলের README পড়ুন।
মার্জের পরেও কিছু ছবির তারিখ ভুল কেন?
সাধারণত কারণ ছবি আর তার JSON ফাইল আলাদা zip-এ ছিল এবং কখনো একসঙ্গে রাখা হয়নি, অথবা JSON ফাইলের নাম ছবির নাম থেকে আলাদা। সব zip একটি ফোল্ডারে এক্সট্র্যাক্ট করুন, নতুন একটি কপিতে টুলটি আবার চালান, আর টুলের error বা failed ফোল্ডার দেখুন।
মূল zip ফাইলগুলো কি রেখে দিতে হবে?
হ্যাঁ, যতক্ষণ না মার্জ করা লাইব্রেরি যাচাই হয়ে যায় এবং আপনার কাছে আরেকটি ব্যাকআপ থাকে। কিছু টুল ফাইল কপি না করে সরিয়ে দেয়, আর zip-ই নতুন করে শুরু করার একমাত্র উপায়।
সূত্র
- Ente: Google Photos migration FAQ (split zips, wrong dates, duplicates)
- PixelUnion: how to export your Google Photos library without losing the metadata
- Illinois Tech: use Google Takeout to export Google Photos
- google-photos-exif (GitHub README)
- Porte: fixing and organizing a Google Takeout photos export (GitHub README)
- Google Photos Takeout Helper, gpth (GitHub README)
- gphotos-takeout-repair 1.4.2 (README)
- ExifTool documentation