مشخصات فراداده حرکت دوربین

این صفحه مشخصاتی را توصیف می‌کند که به فایل‌های MP4 اجازه می‌دهد تا ابرداده‌های مربوط به حرکت دوربین را در حین ضبط ویدیو جاسازی کنند. دستگاه‌هایی که فیلم‌برداری می‌کنند معمولاً دارای حسگرهایی هستند که می‌توانند اطلاعات بیشتری درباره فیلم‌برداری ارائه دهند. مثلا:

  • تلفن های همراه معمولا دارای حسگرهایی برای ژیروسکوپ، شتاب سنج، مغناطیس سنج و GPS هستند.
  • از همجوشی حسگر می توان برای ردیابی وضعیت 3 درجه آزادی (3DoF) دستگاه ها استفاده کرد.
  • مکان یابی و نقشه برداری همزمان (SLAM) می تواند برای ردیابی وضعیت 6 درجه آزادی (6DoF) دستگاه (مثلاً تانگو) استفاده شود.
  • از اطلاعات نوردهی می توان برای درون یابی حرکت در هر خط اسکن استفاده کرد.

این ابرداده را می توان در ویدیو برای پس پردازش پیشرفته در برنامه های مختلف ذخیره کرد. مثلا:

  • از اطلاعات چرخش در سطح فریم می توان برای تثبیت فیلم ها استفاده کرد و از داده های حرکتی در سطح اسکن می توان برای کاهش جلوه های شاتر غلتکی استفاده کرد.
  • خوانش های IMU و حالت های 3DoF مشتق شده را می توان برای ارزیابی هم ترازی زمانی و هم ترازی هندسی بین 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 است.

این اطلاعات را می توان با اجرای fusion سنسور 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;
          
نانوثانیه

این ابرداده در هر فریم ویدیو است. زمان ارائه (PTS) این ابرداده باید شروع نوردهی اولین خط اسکن استفاده شده در یک فریم ویدیو باشد.

pixel_exposure_time_ns زمان نوردهی برای یک پیکسل واحد در نانوثانیه است و rolling_shutter_skew_time_ns تاخیر بین نوردهی اولین اسکن لاین استفاده شده و آخرین اسکن لاین است. می توان از آنها برای درون یابی ابرداده در هر اسکن استفاده کرد.

PTS قاب مربوطه باید در pts_of_this_metadata و pts_of_this_metadata + pixel_exposure_time_ns + rolling_shutter_skew_time_ns باشد.

هنگامی که این اطلاعات ذخیره نمی‌شوند، دستگاه باید بهترین تلاش را برای تنظیم PTS قاب ویدیو در مرکز نوردهی فریم انجام دهد.

  case 2:
    float gyro[3];
  break;
          
رادیان/ثانیه

سیگنال ژیروسکوپ در رادیان/ثانیه حول محورهای XYZ دوربین. چرخش در جهت خلاف جهت عقربه های ساعت مثبت است.

برنامه ها رابطه بین سیستم مختصات IMU و سیستم مختصات دوربین را تعریف می کنند. توصیه می کنیم در صورت امکان آنها را هم تراز کنید.

توجه داشته باشید که قرائت های اولیه ژیروسکوپ در سیستم مختصات IMU تعریف شده توسط درایور آن است و برای تبدیل آن به سیستم مختصات دوربین نیاز به تبدیل مناسب است.

به Android Sensor.TYPE_GYROSCOPE مراجعه کنید.

  case 3:
    float acceleration[3];
  break;
          
متر/ثانیه^2

خواندن شتاب سنج بر حسب متر/ثانیه^2 در امتداد محورهای XYZ دوربین.

برنامه ها رابطه بین سیستم مختصات IMU و سیستم مختصات دوربین را تعریف می کنند. توصیه می کنیم در صورت امکان آنها را هم تراز کنید.

به Android Sensor.TYPE_ACCELEROMETER مراجعه کنید.

  case 4:
    float position[3];
  break;
          

موقعیت سه بعدی دوربین موقعیت سه بعدی و چرخش محور زاویه با هم حالت 6DoF دوربین را مشخص می کند و آنها در یک سیستم مختصات تعریف شده کاربردی مشترک هستند.

با اجرای ردیابی 6DoF بر روی دستگاه می توانید این اطلاعات را به دست آورید.

  case 5:
    double latitude;
    double longitude;
    double altitude;
  break;
          
درجه

حداقل مختصات GPS نمونه.

  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 که اندازه گیری انجام شد

gps_fix_type - 0 (بدون تعمیر)، 2 (رفع دو بعدی)، 3 (اصلاح سه بعدی)

عرض جغرافیایی - عرض جغرافیایی بر حسب درجه

طول جغرافیایی - طول جغرافیایی بر حسب درجه

ارتفاع - ارتفاع بالاتر از بیضی WGS-84

horizontal_accuracy - دقت افقی (lat/long).

vertical_accuracy - دقت عمودی (ارتفاع).

velocity_east - سرعت در جهت شرق

velocity_north - سرعت در جهت شمال

velocity_up - سرعت در جهت بالا

speed_accuracy - دقت سرعت

  case 7:
    float magnetic_field[3];
  break;
          
میکروتسلا

میدان مغناطیسی محیطی

به Android Sensor.TYPE_MAGNETIC_FIELD مراجعه کنید.

}

یادداشت

  • در هر فایل MP4 باید تنها یک تراک CAMM وجود داشته باشد که شامل تمام انواع داده های فوق با مخلوط کردن آنها با یکدیگر باشد.
  • نمونه های GPS در موارد 5 و 6 باید مقادیر خام تولید شده توسط حسگرها باشند. در صورت عدم تغییر GPS نمی توان آنها را درون یابی یا تکرار کرد.
  • سیستم های مختصات سمت راست هستند. سیستم مختصات دوربین به صورت X به سمت راست، Y به سمت پایین و Z به سمت جلو تعریف می شود. محور Y سیستم مختصات جهانی باید در امتداد بردار گرانش به سمت پایین باشد.
  • خوانش‌های IMU معمولاً در یک سیستم مختصات IMU جداگانه هستند و در صورت متفاوت بودن دو سیستم مختصات، برای نگاشت آن‌ها به سیستم مختصات دوربین به چرخش نیاز است.
  • همه فیلدها کم اندین هستند (ابتدا بایت کم اهمیت) و نقاط شناور 32 بیتی از فرمت IEEE 754-1985 هستند.
  • برای همگام‌سازی دقیق فریم ویدیو و ابرداده، PTS فریم ویدیو باید در مرکز نوردهی آن باشد (این را می‌توان از فراداده نوردهی نیز استنباط کرد).
  • برنامه‌ای که این داده‌ها را مخدوش می‌کند باید مقیاس زمانی به اندازه کافی بزرگ برای دریافت یک PTS دقیق انتخاب کند.

مسائل بالقوه

  • این طراحی تنها به یک بسته در هر نمونه داده اجازه می دهد. دستگاه‌های جاسازی شده ممکن است در نوشتن بسته‌های فرکانس بسیار بالا مشکل داشته باشند، زیرا فشار ورودی/خروجی و همچنین اندازه هدر (به عنوان مثال، اتم‌های stsc و stsz ) را در صورت تغییر اندازه بسته افزایش می‌دهد.
  • اختلاط انواع مختلف داده ها با تأخیرهای مختلف می تواند باعث شود که PTS هم به جلو و هم به عقب برود زیرا بسته ها در فایل نوشته می شوند. با این حال، می توان با بافر کردن بسته ها و نوشتن آنها به ترتیب یکنواخت بر این مشکل غلبه کرد.