Specifiche dei metadati di movimento della videocamera

In questa pagina viene descritta una specifica che consente di incorporare file MP4 metadati relativi al movimento della videocamera durante l'acquisizione video. I dispositivi che acquisiscono video di solito hanno che possono fornire informazioni aggiuntive sull'acquisizione. Ad esempio:

  • I telefoni cellulari in genere sono dotati di sensori per giroscopio, accelerometro, magnetometro e GPS.
  • La fusione dei sensori può essere utilizzata per tracciare la posa dei dispositivi sui 3 gradi di libertà (3DoF).
  • La localizzazione e la mappatura simultanea (SLAM) possono essere usate per tenere traccia dei 6 gradi di libertà (6DoF) posa del dispositivo (ad esempio, Cast).
  • Le informazioni sull'esposizione possono essere utilizzate per interpolare il movimento per scansione.

Questi metadati possono essere salvati nel video per una post-elaborazione avanzata in varie applicazioni. Ad esempio:

  • Le informazioni sulla rotazione a livello di fotogramma possono essere utilizzate per stabilizzare i video, mentre i dati sui movimenti a livello di linea di scansione possono essere utilizzati per ridurre gli effetti dell'otturatore.
  • Le letture dell'IMU e le pose 3DoF derivate possono essere utilizzate per valutare l'allineamento temporale e l'allineamento geometrico tra l'IMU e la fotocamera.

Le sezioni seguenti specificano la traccia CAmera Motion Metadata (CAMM), che include un nuovo esempio voce che indica l'esistenza della traccia e il formato dei dati dei campioni di traccia.

Esempio di voce

Il file video deve contenere la seguente casella di immissione di esempio per indicare i metadati personalizzati e il valore subComponentType della traccia deve essere impostato su 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') {
}
  

Formato dei dati

La traccia di metadati contiene uno stream di esempi di metadati formattati come segue.

Campo Unità Descrizione
uint16 reserved;
Riservato. Deve essere 0.
uint16 type;
Il tipo di pacchetto di dati (vedi di seguito). Ogni pacchetto include un tipo di dati.
switch (type) {
  case 0:
    float angle_axis[3];
  break;
          

Orientamento dell'asse dell'asse in radianti che rappresenta la rotazione dalle coordinate della fotocamera locale a un sistema di coordinate del mondo. Il sistema di coordinate mondiali è definito da applicazioni.

Sia M la matrice di rotazione 3x3 corrispondente al vettore dell'asse dell'angolo. Per qualsiasi raggio X nel sistema di coordinate locale, la direzione dei raggi nella coordinata mondiale è M * X.

Queste informazioni possono essere ottenute eseguendo la tecnologia di fusione dei sensori 3DoF sul dispositivo. Dopo aver integrato le letture dell'IMU, è necessario registrare solo l'orientamento globale integrato.

I tre valori rappresentano il vettore dell'asse dell'angolo, in modo che l'angolo di rotazione espresso in radianti sia dato dalla lunghezza del vettore e l'asse di rotazione sia dato dal vettore normalizzato.

La rappresentazione codificata può essere creata da un asse e da un angolo con float[3] angle_axis := angle_radians * normalized_axis_vec3. Un angolo positivo rappresenta una rotazione in senso antiorario intorno all'asse.

E la rappresentazione codificata può essere trasformata di nuovo in un asse e un angolo con float[3] axis := normalize(axis_angle) e float angle_radians := length(angle_axis).

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

Questi metadati sono forniti per singolo fotogramma video. L'ora di presentazione (PTS) di questi metadati deve l'inizio dell'esposizione della prima linea di scansione utilizzata in un fotogramma video.

pixel_exposure_time_ns è il tempo di esposizione di un singolo pixel in nanosecondi e rolling_shutter_skew_time_ns è il ritardo tra esposizione della prima e dell'ultima linea di scansione utilizzata. Si possono usare per interpolare i metadati per scansione.

Il PTS del frame corrispondente deve essere compreso tra pts_of_this_metadata e pts_of_this_metadata + pixel_exposure_time_ns + rolling_shutter_skew_time_ns.

Se queste informazioni non vengono salvate, il dispositivo dovrebbe fare il possibile per regola il PTS del fotogramma video in modo che sia al centro dell'esposizione del fotogramma.

  case 2:
    float gyro[3];
  break;
          
radianti/secondi

Segnale del giroscopio in radianti/secondi intorno a XYZ assi della fotocamera. La rotazione è positivo in senso antiorario.

Le applicazioni definiscono la relazione tra il sistema di coordinate IMU e la telecamera sistema di coordinate di rete. Ti consigliamo di allinearli, se possibile.

Tieni presente che le letture iniziali del giroscopio sono nel sistema di coordinate IMU definito dal conducente, ed è necessaria una trasformazione adeguata per convertirlo nel sistema di coordinate della fotocamera.

Fai riferimento a Android Sensor.TYPE_GYROSCOPE.

  case 3:
    float acceleration[3];
  break;
          
metri/secondi^2

Lettura dell'accelerometro in metri/secondo^2 lungo gli assi XYZ della fotocamera.

Le applicazioni definiscono la relazione tra il sistema di coordinate IMU e la telecamera sistema di coordinate di rete. Ti consigliamo di allinearli, se possibile.

Fai riferimento a Android Sensor.TYPE_ACCELEROMETER.

  case 4:
    float position[3];
  break;
          

Posizione 3D della fotocamera. La rotazione della posizione 3D e dell'asse angolare insieme definisce la Posizione 6DoF della fotocamera e si trovano in una coordinata comune definita dall'applicazione di un sistema operativo completo.

Puoi ottenere queste informazioni eseguendo il monitoraggio 6DoF sul dispositivo.

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

Coordinata GPS minima del campione.

  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: tempo trascorso dall'epoca GPS in cui è stata effettuata la misurazione

gps_fix_type: 0 ( nessuna correzione), 2 (correzione 2D), 3 (correzione 3D)

latitude - Latitudine in gradi

longitude - Longitudine in gradi

altitudine: l'altezza sopra l'ellissoide WGS-84.

horizontal_accuracy: precisione orizzontale (lat/long)

vertical_accuracy: precisione verticale (altitudine)

velocity_east - Velocità nella direzione est

velocity_north - Velocità in direzione nord

velocity_up - Velocità in direzione dell'alto

speed_accuracy - Precisione della velocità

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

Campo magnetico ambientale.

Fai riferimento a Android Sensor.TYPE_MAGNETIC_FIELD.

}

Note

  • Deve esserci una sola traccia CAMM per ogni file MP4, che contiene tutti i tipi di dati sopra indicati. unendoli.
  • I campioni GPS nei casi 5 e 6 devono essere valori grezzi generati dai sensori. Non possono essere interpolati o ripetuti quando non vi è alcuna modifica del GPS.
  • I sistemi di coordinate sono sul lato destro. Il sistema di coordinate della fotocamera è definito come X rivolta a destra, Y rivolta verso il basso e Z rivolta in avanti. L'asse Y del piano globale sistema di coordinate dovrebbe puntare verso il basso lungo il vettore di gravità.
  • Le letture IMU avvengono in genere in un sistema di coordinate IMU separato ed è necessaria una rotazione per mapparle al sistema di coordinate della fotocamera se i due sistemi di coordinate sono diversi.
  • Tutti i campi sono Litt-endian (prima il byte meno significativo) e il formato mobile a 32 bit sono nel formato IEEE 754-1985.
  • Per sincronizzare con precisione il fotogramma video e i metadati, il PTS del fotogramma video dovrebbe trovarsi al centro della sua esposizione (questo può essere dedotto anche dai metadati di esposizione).
  • L'applicazione che esegue il mux di questi dati dovrebbe scegliere una scala di tempo sufficientemente grande per ottenere un PTS preciso.

Problemi potenziali

  • Questa progettazione consente un solo pacchetto per campione di dati. I dispositivi incorporati potrebbero presentare problemi di scrittura a frequenza molto elevata perché aumenta la pressione di I/O, oltre alla dimensione dell'intestazione (ad esempio, stsc e stsz atomi) se la dimensione del pacchetto varia.
  • La combinazione di tipi di dati diversi con ritardi differenti può causare l'avanzamento del PTS e indietro, man mano che i pacchetti vengono scritti nel file. Tuttavia, questo può essere risolto il buffering dei pacchetti e li scrive in ordine monotonico.