Kamera Hareket Meta Veri Özellikleri

Bu sayfada MP4 dosyalarının yerleştirilmesine izin veren bir spesifikasyon açıklanmaktadır Video çekimi sırasındaki kamera hareketiyle ilgili meta veriler. Video çeken cihazlar genellikle sensörler kullanır. Örneğin:

  • Cep telefonlarında genellikle jiroskop, ivme ölçer, manyetometre ve GPS sensörleri bulunur.
  • Cihazların 3 serbestlik derecesi (3DoF) duruşunu izlemek için sensör füzyonu kullanılabilir.
  • 6 serbestlik derecesini izlemek için eşzamanlı yerelleştirme ve eşleme (SLAM) kullanılabilir. (6DoF) duruşu (örneğin, Tango).
  • Pozlama bilgileri, tarama başına hareketin interpolasyonunu elde etmek 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, yuvarlanan deklanşör efektlerini azaltmak için tarama çizgisi düzeyindeki hareket verileri kullanılabilir.
  • IMU ölçümleri ve türetilen 3DoF duruşları, IMU ve kamera arasındaki zaman hizalamasını ve geometrik hizalamayı değerlendirmek için kullanılabilir.

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

Örnek giriş

Video dosyası, özel meta verileri belirtmek için aşağıdaki örnek giriş kutusunu içermelidir 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 parçası, aşağıdaki gibi biçimlendirilmiş meta veri örnekleri akışını içerir.

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

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

M, açı eksen vektörüne karşılık gelen 3x3 döndürme matrisi olsun. Yerel koordinat sistemindeki herhangi bir X ışını 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 genel yönün kaydedilmesi gerekir.

Üç değer, açı eksen vektörünü temsil eder. Burada, radyan cinsinden dönüş açısı vektörün uzunluğuyla ve dönüş ekseni de normalleştirilmiş vektör ile verilir.

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

Kodlanmış gösterim ise float[3] axis := normalize(axis_angle) ve float angle_radians := length(angle_axis) değerleriyle 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 karesi başınadır. Bu meta verinin sunum zamanı (PTS) bir video karesinde ilk kullanılan tarama çizgisinin pozlanmasının başlangıcı.

pixel_exposure_time_ns, tek bir pikselin pozlama süresidir: nanosaniye ve rolling_shutter_skew_time_ns, ve son kullanılan tarama çizgisine maruz kalma oranı. Herhangi bir kullanabilirsiniz.

Karşılık gelen çerçevenin PTS'si şu aralıkta olmalıdır: pts_of_this_metadata ve pts_of_this_metadata + pixel_exposure_time_ns + roll_shutter_skew_time_ns

Bu bilgiler kaydedilmezse cihaz, mümkün olan en iyi şekilde video karesinin PTS'sini, kare pozlamasının merkezinde olacak şekilde ayarlayın.

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

Kameranın XYZ eksenleri etrafında radyan/saniye cinsinden jiroskop sinyali. Rotasyon (şimdiki değeri) pozitif olmalıdır.

Uygulamalar, IMU koordinat sistemi ile kamera arasındaki ilişkiyi tanımlar koordinat sisteminden geçer. Mümkünse bunları hizalamanızı öneririz.

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

Android Sensörüne bakın.TYPE_GYROSCOPE.

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

Kameranın XYZ eksenlerinde metre/saniye^2 cinsinden ivme ölçer.

Uygulamalar, IMU koordinat sistemi ile kamera arasındaki ilişkiyi tanımlar koordinat sisteminden geçer. Mümkünse bunları hizalamanızı öneririz.

Android Sensor.TYPE_ACCELEROMETER öğesine bakın.

  case 4:
    float position[3];
  break;
          

Kameranın 3D konumu. 3D konumu ve açı ekseni döndürmesi birlikte ve kameranın 6DoF duruşunda ve uygulama tarafından tanımlanan ortak bir koordinat sisteminde bahsedeceğim.

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

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

Örneğin 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 cinsinden boylam

rakım - WGS-84 elipsoitinin üzerindeki yükseklik

horizontal_accuracy: Yatay (enlem/boylam) doğruluk

vertical_accuracy - Dikey doğruluk

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

velocity_north - Kuzey yönünde hız

velocity_up - Yukarı yönde hız

speed_accuracy - Hız doğruluğu

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

Ortam manyetik alanı.

Android Sensor.TYPE_MAGNETIC_FIELD bölümüne bakın.

}

Notlar

  • Her MP4 dosyası için yukarıdaki veri türlerinin tümünü içeren yalnızca bir CAMM parçası olmalıdır. üretebilirsiniz.
  • Durum 5 ve 6'daki GPS örnekleri, sensörler tarafından oluşturulan ham değerler olmalıdır. Başaramazlar olmadığı durumlarda ara değer olarak test edilir veya tekrarlanır.
  • Koordinat sistemleri sağ taraftadır. Kamera koordinat sistemi X olarak tanımlanır sağı, Y aşağıyı ve Z ileriyi gösteriyor. Global çerçevenin Y ekseni koordinat sistemi yerçekimi vektörü boyunca aşağıyı işaret etmelidir.
  • IMU ölçümleri genellikle ayrı bir IMU koordinat sistemindedir ve iki koordinat sistemi farklıysa onları kamera koordinat sistemine eşleyin.
  • Tüm alanlar küçük-endian (önce en az anlamlı bayt) ve 32 bit kayandır IEEE 754-1985 biçimindedir.
  • Video karesini ve meta verileri doğru şekilde senkronize etmek için video karesinin PTS'si olması gerektiğini unutmayın (bu, maruz kalma meta verilerinden de anlaşılabilir).
  • Bu verileri karıştıran uygulama, PTS

Olası sorunlar

  • Bu tasarımda, veri örneği başına yalnızca bir pakete izin verilir. Yerleşik cihazlarda yazmayla ilgili sorunlar olabilir hem G/Ç basıncını hem de başlık boyutunu artırdığı için çok yüksek frekanslı paketler (örneğin, paket boyutu değişiklik gösteriyorsa stsc ve stsz atomları).
  • Farklı veri türlerinin ve farklı gecikmelerin bir arada kullanılması, PTS'nin her ikisinde de ileriye doğru ilerlemesine neden olabilir. ve geriye doğru planlarsınız. Ancak aynı zamanda arabelleğe alma ve bunları tekdüze sırada yazma.