Kamera Hareketi Meta Verilerinin Özellikleri

Bu sayfada, MP4 dosyalarının, video çekimi sırasında kamera hareketiyle ilgili meta verileri yerleştirmesine olanak tanıyan bir spesifikasyon açıklanmaktadır. Video kaydeden cihazlarda, genellikle kayıtla ilgili ek bilgi sağlayabilecek sensörler bulunur. Örneğin:

  • Cep telefonlarında genellikle jiroskop, ivme ölçer, manyetometre ve GPS sensörleri bulunur.
  • Sensör füzyonu, cihazların 3 derece serbestlik (3DoF) konumunu izlemek için kullanılabilir.
  • Eş zamanlı yerelleştirme ve eşleme (SLAM), cihazın 6 serbestlik derecesini (ör. Tango) izlemek için kullanılabilir.
  • Pozlama bilgileri, tarama başına hareketi incelemek için kullanılabilir.

Bu meta veriler, çeşitli uygulamalarda gelişmiş işleme sonrası için videoya kaydedilebilir. Örneğin:

  • Videoları sabitlemek için kare düzeyinde döndürme bilgileri; yuvarlak deklanşör efektlerini azaltmak için kare düzeyinde hareket verileri kullanılabilir.
  • IMU okumaları ve türetilen 3DoF duruşları, IMU ile kamera arasındaki zaman hizalamasını ve geometrik hizalamayı değerlendirmek için kullanılabilir.

Aşağıdaki bölümlerde, parçanın varlığını ve parça örneklerinin veri biçimini gösteren yeni bir örnek giriş içeren CAmera Motion Metadata (CAMM) kanalı belirtilmektedir.

Örnek giriş

Video dosyası, özel meta veri parçasını belirtmek için aşağıdaki örnek giriş kutusunu içermelidir ve parçanın subComponentType değeri meta olarak ayarlanmalıdır.

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') {
}
  

Veri biçimi

Meta veri kanalı, aşağıdaki şekilde biçimlendirilmiş meta veri örnekleri akışı içerir.

Alan Birim Açıklama
uint16 reserved;
Ayırtıldı. 0 olmalıdır.
uint16 type;
Veri paketinin türü (aşağıya bakın). Her paketin bir veri türü vardır.
switch (type) {
  case 0:
    float angle_axis[3];
  break;
          

Yerel kamera koordinatlarından dünya koordinat sistemine döndürmeyi temsil eden radyan cinsinden açı ekseni yönü. Dünya koordinat sistemi uygulamalar tarafından tanımlanır.

M, açı ekseninin vektörüne karşılık gelen 3x3 döndürme matrisi olsun. Yerel koordinat sistemindeki tüm ışın X için, dünya koordinatındaki ışın yönü M * X'tir.

Bu bilgiler, cihazda 3DoF sensör füzyonu çalıştırılarak elde edilebilir. IMU okumaları entegre edildikten sonra yalnızca entegre dünya yönü kaydedilmelidir.

Üç değer, açı ekseni vektörünü temsil eder. Böylece radyan cinsinden döndürme açısı, vektörün uzunluğu ve dönüş ekseni de normalleştirilmiş vektör tarafından verilir.

Kodlanmış gösterim, float[3] angle_axis := angle_radians * normalized_axis_vec3 ile bir eksen ve açıdan oluşturulabilir. Pozitif açı, eksen etrafında saat yönünün tersine bir dönüşü temsil eder.

Kodlanmış temsil de float[3] axis := normalize(axis_angle) ve float angle_radians := length(angle_axis) ile tekrar bir eksene ve açıya dönüştürülebilir.

  case 1:
    int32 pixel_exposure_time;
    int32 rolling_shutter_skew_time;
  break;
          
nanosaniye

Bu meta veri, video çerçevesi başınadır. Bu meta verilerin sunum zamanı (PTS), bir video çerçevesindeki ilk kullanılan kısa açıklamanın karşılaşma süresinin başlangıcı olmalıdır.

pixel_exposure_time_ns, nanosaniyedeki tek bir pikselin pozlama süresidir. rolling_shutter_skew_time_ns ise ilk kullanılan kısa çizgi ile son kullanılan kısa çizginin karşılaşma arasındaki gecikmedir. Tarama başına meta verileri karıştırmak için kullanılabilirler.

İlgili çerçevenin PTS değeri pts_of_this_metadata ile pts_of_this_metadata + pixel_exposure_time_ns + Roll_shutter_skew_time_ns aralığında olmalıdır.

Bu bilgiler kaydedilmediğinde cihaz, video karesinin PTS'sini kare pozlamasının ortasında olacak şekilde ayarlamaya çalışır.

  case 2:
    float gyro[3];
  break;
          
radyan/saniye

Kameranın XYZ eksenleri üzerindeki radyan/saniye cinsinden jiroskop sinyali. Döndürme, saat yönünün tersine pozitiftir.

Uygulamalar, IMU koordinat sistemi ile kamera koordinat sistemi arasındaki ilişkiyi tanımlar. Mümkünse bu öğeleri uyumlu hale getirmenizi öneririz.

İlk jiroskop okumalarının, sürücüsü tarafından tanımlanan IMU koordinat sisteminde olduğunu ve bunu kamera koordinat sistemine dönüştürmek için uygun dönüşümün gerektiğini unutmayın.

Android Sensörü.TYPE_GYROSCOPE'a bakın.

  case 3:
    float acceleration[3];
  break;
          
metre/saniye^2

Kameranın XYZ eksenleri boyunca ivme ölçer/saniye^2 şeklinde okunur.

Uygulamalar, IMU koordinat sistemi ile kamera koordinat sistemi arasındaki ilişkiyi tanımlar. Mümkünse bu öğeleri uyumlu hale getirmenizi öneririz.

Android Sensörü.TYPE_ACCELEROMETER'a bakın.

  case 4:
    float position[3];
  break;
          

Kameranın 3D konumu. 3D konum ve açılı eksen döndürme, kameranın 6DoF konumunu tanımlar ve uygulama tanımlı ortak bir koordinat sisteminde yer alır.

Bu bilgileri, cihazda 6DoF izlemeyi çalıştırarak alabilirsiniz.

  case 5:
    double latitude;
    double longitude;
    double altitude;
  break;
          
derece

Örnekle ilgili minimum GPS koordinatı.

  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: Ölçümün alındığı GPS döneminden bu yana geçen süre

gps_fix_type - 0 ( düzeltme yok), 2 (2D düzeltme), 3 (3D düzeltme)

Enlem - Derece cinsinden enlem

boylam - Derece

rakım: WGS-84 elipsoid'in yüksekliği

Yatay_doğruluk - Yatay (enlem/uzun) doğruluk

vertical_accuracy - Dikey (rakım) doğruluk

velocity_east - Doğu yönünde hız

velocity_north - Kuzey yönündeki hız

velocity_up - Yukarı doğru hız

speed_accuracy - Hız doğruluğu

  case 7:
    float magnetic_field[3];
  break;
          
Microtesla

Ortam manyetik alan.

Android Sensörü.TYPE_MAGNETIC_FIELD alanına bakın.

}

Notlar

  • Her bir MP4 dosyası için yalnızca bir CAMM kanalı olmalıdır. Yukarıdaki veri türlerinin tümünü karıştırarak içerir.
  • 5. ve 6. durumdaki GPS örnekleri, sensörler tarafından oluşturulan ham değerler olmalıdır. Bu modeller, GPS değişikliği olmadığında interpolasyon yapamaz veya tekrarlanamaz.
  • Koordinat sistemleri sağ taraftadır. Kamera koordinat sistemi; X'i sağa, Y'yi aşağı ve İleri Z olarak tanımlanır. Küresel koordinat sisteminin Y ekseni, yerçekimi vektörü boyunca işaret etmelidir.
  • IMU okumaları genellikle ayrı bir IMU koordinat sistemindedir ve iki koordinat sistemi farklıysa bunları kamera koordinat sistemiyle eşlemek için döndürme gerekir.
  • Tüm alanlar küçük boyutludur (en az önemli bayt) ve 32 bitlik kayan noktalar IEEE 754-1985 biçimindedir.
  • Video çerçevesinin ve meta verilerin doğru şekilde senkronize edilebilmesi için video karesinin PTS'sinin, odak noktasının merkezinde olması gerekir (bu, pozlama meta verilerinden de elde edilebilir).
  • Bu verileri karıştıran uygulama, doğru bir PTS değeri elde etmek için yeterli büyüklükte bir zaman ölçeği seçmelidir.

Olası sorunlar

  • Bu tasarım, veri örneği başına yalnızca bir pakete izin verir. Yerleştirilmiş cihazlar, G/Ç basıncının yanı sıra başlık boyutunu (örneğin, stsc ve stsz atomları) artırdığı için çok yüksek frekanslı paketler yazarken sorun yaşayabilir.
  • Farklı türlerdeki verilerin farklı gecikmelerde kullanılması, paketlere dosya yazıldığında PTS'nin ileri ve geri gitmesine neden olabilir. Ancak, bu işlem paketlerin arabelleğe alınması ve monoton bir sırayla yazılmasıyla önlenebilir.