कैमरा मोशन मेटाडेटा की खास जानकारी

इस पेज पर एक खास जानकारी दी गई है. इसकी मदद से, MP4 फ़ाइलें वीडियो कैप्चर करते समय कैमरे के मोशन के बारे में मेटाडेटा जोड़ सकती हैं. आम तौर पर, वीडियो कैप्चर करने वाले डिवाइस में ऐसे सेंसर होते हैं जो कैप्चर करने के बारे में ज़्यादा जानकारी दे सकते हैं. उदाहरण के लिए:

  • आम तौर पर, मोबाइल फ़ोन में जाइरोस्कोप, एक्सलरोमीटर, मैग्नेटोमीटर, और जीपीएस के सेंसर होते हैं.
  • सेंसर फ़्यूज़न का इस्तेमाल करके, डिवाइस की तीन डिग्री (3DoF) पोज़ को ट्रैक किया जा सकता है.
  • डिवाइस की 6 डिग्री (6DoF) पोज़िशन (जैसे कि टैंगो) को ट्रैक करने के लिए, एक साथ किए जाने वाले लोकलाइज़ेशन और मैपिंग (एसएलएम) का इस्तेमाल किया जा सकता है.
  • एक्सपोज़र की जानकारी का इस्तेमाल, स्कैन करने के दौरान लगने वाले मोशन को इंटरपोलेट करने के लिए किया जा सकता है.

इस मेटाडेटा को वीडियो में सेव किया जा सकता है. इसे प्रोसेस करने के बाद, अलग-अलग ऐप्लिकेशन में बेहतर तरीके से प्रोसेस किया जाता है. उदाहरण के लिए:

  • फ़्रेम लेवल के रोटेशन की जानकारी का इस्तेमाल, वीडियो को स्टेबल करने के लिए किया जा सकता है. साथ ही, स्कैन करने के मोशन डेटा का इस्तेमाल, शटर के असर को कम करने के लिए किया जा सकता है.
  • IMU रीडिंग और 3DF पोज़ का इस्तेमाल, IMU और कैमरे के बीच टाइम अलाइनमेंट और जियोमेट्रिक अलाइनमेंट का आकलन करने के लिए किया जा सकता है.

नीचे दिए गए सेक्शन, कैमरा मोशन मेटाडेटा (CAMM) ट्रैक के बारे में जानकारी देते हैं. इसमें एक नई सैंपल एंट्री होती है, जो यह बताती है कि ट्रैक किस तरह से मौजूद है और ट्रैक सैंपल का डेटा फ़ॉर्मैट क्या है.

सैंपल एंट्री

वीडियो मेटाडेटा में कस्टम मेटाडेटा ट्रैक दिखाने के लिए वीडियो फ़ाइल में नमूने के तौर पर दिया गया यह बॉक्स शामिल होना चाहिए, और subComponentType ट्रैक को meta पर सेट किया जाना चाहिए.

Camera Motion Metadata Sample Entry (camm)

Definition
Box Type: camm
Container: stsd
A sample entry indicating the data track that saves the camera motion.

Syntax
aligned(8) class CameraMotionMetadataSampleEntry extends SampleEntry('camm') {
}
  

डेटा फ़ॉर्मैट

मेटाडेटा ट्रैक में ऐसे मेटाडेटा के नमूने की एक स्ट्रीम होती है जिन्हें नीचे बताए गए तरीके से फ़ॉर्मैट किया गया है.

फ़ील्ड यूनिट जानकारी
uint16 reserved;
बुक किया हुआ. 0 होना चाहिए.
uint16 type;
डेटा पैकेट का टाइप (नीचे देखें). हर पैकेट में एक तरह का डेटा होता है.
switch (type) {
  case 0:
    float angle_axis[3];
  break;
          

रेडीअन में ऐंगल ऐक्सिस ओरिएंटेशन, स्थानीय कैमरा निर्देशांक से विश्व निर्देशांक सिस्टम में घुमाव को दिखाता है. वर्ल्ड कोऑर्डिनेट सिस्टम का मतलब ऐप्लिकेशन है.

M को ऐंगल ऐक्सिस वेक्टर से जुड़े 3x3 रोटेशन मैट्रिक्स की अनुमति दें. लोकल कोऑर्डिनेट के किसी भी रे X के लिए, दुनिया के कोऑर्डिनेट में किरण की दिशा M * X है.

यह जानकारी डिवाइस पर 3DoF सेंसर फ़्यूज़न से मिल सकती है. IMU रीडिंग को इंटिग्रेट करने के बाद, सिर्फ़ इंटिग्रेटेड ग्लोबल ओरिएंटेशन को रिकॉर्ड करना ज़रूरी है.

तीनों वैल्यू, ऐंगल-ऐक्स वेक्टर को दिखाती हैं, जैसे कि रेडियंस में रोटेशन ऐंगल वेक्टर की लंबाई से दिया जाता है और रोटेशन ऐक्सिस को सामान्य वेक्टर से दिया जाता है.

कोड में बदले गए कोड के प्रज़ेंटेशन को float[3] angle_axis := angle_radians * normalized_axis_vec3 के किसी ऐक्सिस और ऐंगल से बनाया जा सकता है. पॉज़िटिव कोण दिशा में अक्ष के चारों ओर घड़ी की उल्टी दिशा में घूमता है.

साथ ही, float[3] axis := normalize(axis_angle) और float angle_radians := length(angle_axis) का इस्तेमाल करके, कोड में बदले गए फ़ॉर्मैट को किसी ऐक्सिस में बदला जा सकता है.

  case 1:
    int32 pixel_exposure_time;
    int32 rolling_shutter_skew_time;
  break;
          
नैनोसेकंड

यह मेटाडेटा हर वीडियो फ़्रेम के हिसाब से होता है. इस मेटाडेटा का प्रज़ेंटेशन समय (पीटीएस) किसी वीडियो फ़्रेम में सबसे पहले इस्तेमाल की गई स्कैनलाइन के एक्सपोज़र की शुरुआत होना चाहिए.

pixel_exposure_time_ns नैनोसेकंड में एक पिक्सल और rolling_Shut_skew_time_ns के पहली बार इस्तेमाल की गई स्कैनलाइन के एक्सपोज़र के बीच के समय का अंतर होता है. इनका इस्तेमाल हर स्कैन किए गए मेटाडेटा को इंटरपोलेट करने के लिए किया जा सकता है.

संबंधित फ़्रेम की PTS pts_of_this_metadata और pts_of_this_metadata + Pixel_exposure_time_ns + रोलिंग_शॉर्टर_स्काई_टाइम_न के अंदर होनी चाहिए.

यह जानकारी सेव न होने पर, डिवाइस को कोशिश करनी चाहिए कि वह वीडियो फ़्रेम के पीटीएस को अडजस्ट कर सके.

  case 2:
    float gyro[3];
  break;
          
रेडीअन/सेकंड

कैमरे के XYZ अक्षों के आस-पास रेडीअन/सेकंड में जाइरोस्कोप सिग्नल. घड़ी की उल्टी दिशा में घुमाव पॉज़िटिव होता है.

ऐप्लिकेशन, IMU निर्देशांक सिस्टम और कैमरा निर्देशांक सिस्टम के बीच संबंध तय करते हैं. अगर संभव हो, तो हम उन्हें अलाइन करने का सुझाव देते हैं.

ध्यान दें कि जायरो की पहली रीडिंग, उसके ड्राइवर के तय किए गए IMU निर्देशांक सिस्टम में होती है. साथ ही, उसे कैमरा निर्देशांक सिस्टम में बदलने के लिए, सही बदलाव की ज़रूरत होती है.

Android सेंसर का प्रकार देखें.TYPE_GYROSCOPE.

  case 3:
    float acceleration[3];
  break;
          
मीटर/सेकंड^2

कैमरे के XYZ अक्षों के साथ, मीटर/सेकंड^2 में एक्सलरोमीटर पढ़ना.

ऐप्लिकेशन, IMU निर्देशांक सिस्टम और कैमरा निर्देशांक सिस्टम के बीच संबंध तय करते हैं. अगर संभव हो, तो हम उन्हें अलाइन करने का सुझाव देते हैं.

Android सेंसर.TYPE_ACCELEROMETER देखें.

  case 4:
    float position[3];
  break;
          

कैमरे की 3D स्थिति. 3D स्थिति और ऐंगल ऐक्सिस में बदलाव, कैमरे की 6DoF पोज़ को तय करता है. ये आम तौर पर इस्तेमाल किए जाने वाले निर्देशांक सिस्टम में होते हैं.

आप डिवाइस पर 6DoF ट्रैकिंग चलाकर यह जानकारी पा सकते हैं.

  case 5:
    double latitude;
    double longitude;
    double altitude;
  break;
          
अंश

नमूने का कम से कम जीपीएस निर्देशांक.

  case 6:
    double time_gps_epoch;
    int gps_fix_type;
    double latitude;
    double longitude;
    float altitude;
    float horizontal_accuracy;
    float vertical_accuracy;
    float velocity_east;
    float velocity_north;
    float velocity_up;
    float speed_accuracy;
  break;
          

seconds

degrees
degrees
meters
meters
meters
meters/seconds
meters/seconds
meters/seconds
meters/seconds
          

time_gps_epoch - मेज़रमेंट करने के दौरान जीपीएस अवधि के बाद का समय

gps_fix_type - 0 ( कोई सुधार नहीं), 2 (2D सुधार), 3 (3D सुधार)

अक्षांश - डिग्री में अक्षांश

देशांतर - डिग्री में देशांतर

ऊंचाई - WGS-84 एलिप्सोइड से ज़्यादा ऊंचाई

हॉरिज़ॉन्टल_ऐक्यूरेसी - हॉरिज़ॉन्टल (लाट/लॉन्ग) सटीक

vertical_accuracy - वर्टिकल (ऊंचाई) सटीक होना

velotity_east - पूर्व दिशा में वेलोसिटी

veloity_north - उत्तरी दिशा में वेलोसिटी

velationity_up - अप ऐरो वेलोसिटी

स्पीड-सटीकता - स्पीड सटीक है

  case 7:
    float magnetic_field[3];
  break;
          
माइक्रोटेस्ला

हमेशा चालू चुंबकीय क्षेत्र.

Android सेंसर.TYPE_MAGNETIC_FIELD देखें.

}

नोट

  • हर MP4 फ़ाइल के लिए सिर्फ़ एक सीएमएम ट्रैक होना चाहिए, जिसमें ऊपर दिए गए सभी डेटा टाइप को एक साथ मिलाकर दिखाया जाना चाहिए.
  • केस 5 और 6 में जीपीएस सैंपल, रॉ वैल्यू होने के साथ-साथ सेंसर से जनरेट किए गए होने चाहिए. जीपीएस में कोई बदलाव न होने पर, उन्हें इंटरपोलेट या दोहराया नहीं जा सकता.
  • निर्देशांक सिस्टम दाईं ओर होते हैं. कैमरा कोऑर्डिनेट सिस्टम को दाईं ओर X, नीचे की ओर Y, और नीचे की तरफ़ इशारा करने वाले Z के तौर पर दिखाया गया है. ग्लोबल कोऑर्डिनेट सिस्टम का Y-एक्सिस, गुरुत्वाकर्षण वेक्टर की ओर इशारा करना चाहिए.
  • आम तौर पर, IMU रीडिंग एक अलग IMU निर्देशांक सिस्टम में होती है. अगर दोनों निर्देशांक सिस्टम अलग-अलग हैं, तो उन्हें कैमरा कोऑर्डिनेट सिस्टम से मैप करने के लिए रोटेशन की ज़रूरत होती है.
  • सभी फ़ील्ड में एंड-एंडियन (सबसे छोटे बाइट पहले) हैं और 32-बिट वाले फ़्लोटिंग पॉइंट IEEE 754-1985 फ़ॉर्मैट में हैं.
  • वीडियो फ़्रेम और मेटाडेटा को सही तरीके से सिंक करने के लिए, वीडियो फ़्रेम के पीटीएस उसके एक्सपोज़र के बीच में होने चाहिए. यह एक्सपोज़र मेटाडेटा से भी निकाला जा सकता है.
  • इस डेटा को शामिल करने वाले ऐप्लिकेशन को सटीक पीटीएस पाने के लिए बड़े समय का विकल्प चुनना चाहिए.

संभावित समस्याएं

  • इस डिज़ाइन में हर डेटा सैंपल के लिए, सिर्फ़ एक पैकेट की अनुमति है. एम्बेड किए गए डिवाइसों को लोड करने में ज़्यादा फ़्रीक्वेंसी वाले पैकेट का इस्तेमाल करने में समस्या हो सकती है. ऐसा इसलिए, क्योंकि इससे I/O दबाव बढ़ता है. साथ ही, हेडर का साइज़ (उदाहरण के लिए, stsc और stsz ऐटम) अलग-अलग हो सकते हैं. ऐसा तब होता है, जब पैकेट का साइज़ अलग-अलग होता है.
  • अलग-अलग तरह के देरी वाले डेटा के मिक्स होने पर, पीटीएस को आगे और पीछे, दोनों सुविधाएं मिल सकती हैं. ऐसा इसलिए होता है, क्योंकि पैकेट फ़ाइल में लिखे जाते हैं. हालांकि, पैकेट बफ़र की समस्या से बचने और उन्हें एक ही क्रम में लिखने से इस समस्या को हल किया जा सकता है.