Foto Motion adalah file tunggal yang berisi gambar foto diam dan video pendek, yang mencakup rekaman audio. Jenis media ini memungkinkan pengguna untuk melihat gambar diam beresolusi tinggi serta video dan suara untuk menangkap sentimen dan suasana di mana gambar itu diambil.
Dependensi
Berikut ini adalah referensi normatif untuk spesifikasi ini:
- Kata kunci untuk digunakan dalam RFC untuk Menunjukkan Tingkat Persyaratan
- T.81 (09/92) Kompresi digital dan coding nada berkelanjutan gambar (JPEG)
- ISO/IEC 23008-12:2022 Coding dan penayangan media dengan efisiensi tinggi di lingkungan heterogen Bagian 12: Format File Gambar (HEIC)
- Format File Gambar (AVIF) AV1 (AVIF)
- Format Gambar Ultra HDR v1.0 | Android Developers (Ultra HDR)
- Spesifikasi XMP ISO 16684-1:2011(E) Bagian 1 (XMP)
- Spesifikasi Adobe XMP Bagian 3 Penyimpanan dalam File (XMP)
- ISO/IEC 14496-10:2022 Coding objek audio-visual Bagian 10: Lanjutan coding video (AVC)
- ISO/IEC 23008-2:2023 Coding dan penayangan media dengan efisiensi tinggi di lingkungan heterogen Bagian 2: Video efisiensi tinggi coding (HEVC)
- Bitstream AV1 & Spesifikasi Proses Decoding (AV1)
- Coding Objek Audio-Visual ISO/IEC 14496-1:2010 - Sistem
- Format file media ISO/IEC 14496-12:2015 ISO Box (ISOBMFF)
- ISO/IEC 14496-14:2020 Coding objek audio-visual Bagian 14: File MP4 format (MP4)
- Apple QuickTime File Format (MOV)
Pengantar
Penggunaan "HARUS", "TIDAK BOLEH", "WAJIB", "HARUS", "TIDAK BOLEH", "DIREKOMENDASIKAN", "MEI", dan "OPSIONAL" sesuai dengan standar IETF didefinisikan dalam RFC2119.
Format Foto Bergerak
File Motion Photo terdiri dari file gambar diam utama, JPEG, HEIC, atau AVIF, dengan file video sekunder yang akan ditambahkan. Gambar utama berisi Camera XMP metadata yang menjelaskan cara menampilkan file gambar diam dan konten file video, dan metadata Container XMP yang menjelaskan cara menemukan konten file video.
File gambar mungkin memiliki getmap, seperti halnya dengan Ultra HDR JPEG.
Pola Nama File
Penulis harus menggunakan nama file yang cocok dengan ekspresi reguler berikut:
^([^\\s\\/\\\\][^\\/\\\\]*MP)\\.(JPG|jpg|JPEG|jpeg|HEIC|heic|AVIF|avif)
Pembaca dapat mengabaikan metadata XMP, file video yang ditambahkan, atau video jika pola tidak diikuti.
Encoding Data Media
Image utama berisi Elemen Container XMP direktori metadata yang menentukan urutan dan properti media berikutnya di penampung file. Setiap file dalam penampung memiliki media yang sesuai item pada direktori. Item media menjelaskan lokasi dalam file {i>container <i}dan properti dasar setiap file yang digabungkan.
Atribut XMP
Dua set {i>metadata<i} XMP digunakan untuk mendefinisikan informasi semantik tambahan untuk format Foto Bergerak. Metadata dapat muncul dalam urutan apa pun.
Metadata Kamera
Metadata kamera mengenkode informasi tentang cara menampilkan gambar utama dan bagian video dari Foto Motion.
- URI namespace adalah
http://ns.google.com/photos/1.0/camera/
- Awalan namespace default adalah
Camera
Atribut berikut dapat muncul dalam metadata XMP file gambar diam:
Nama |
Jenis |
Deskripsi |
|
Properti ini merupakan bagian dari spesifikasi Microvideo V1. Parameter tersebut akan dihapus dalam spesifikasi ini dan harus diabaikan jika ada. Secara khusus, atribut |
|
|
|
0: Menunjukkan bahwa file tidak seharusnya diperlakukan sebagai Foto Bergerak. 1: Menunjukkan bahwa file harus diperlakukan sebagai Foto Bergerak. Semua nilai lain tidak ditentukan dan diperlakukan setara dengan 0. Jika nilainya nol atau negatif, maka file akan selalu diperlakukan sebagai non-Foto Bergerak, bahkan jika video telah ditambahkan ke dalam file. Karena XMP digunakan oleh sebagian besar editor yang berperilaku baik, file gambar diam mungkin masih memiliki nilai residu 1 untuk bidang ini meskipun video telah dihapus. Oleh karena itu, kolom ini tidak definitif dan pembaca harus selalu mengonfirmasi keberadaan video. |
|
|
Menunjukkan versi format file Foto Bergerak. Spesifikasi ini mendefinisikan versi "1". |
|
|
Nilai panjang yang mewakili stempel waktu presentasi (dalam mikrodetik) frame video yang sesuai dengan gambar diam. Nilai dapat berupa -1 untuk menunjukkan tidak ditetapkan/tidak ditentukan. |
Perilaku presentasi
Jika Camera:MotionPhotoPresentationTimestampUs
tidak ada dalam paket XMP,
pembaca harus menggunakan stempel waktu presentasi tepat sebelum stempel waktu
yang paling dekat ke bagian tengah trek video, yaitu durasi trek video
dibagi 2.
Jika Camera:MotionPhotoPresentationTimestampUs
ada dalam paket XMP dan
"application/motionphoto-image-meta"
ditampilkan dalam video, hal yang sama
nilai harus muncul di primaryImageFrameScoreDescr
presentationTimestampUs
bidang dari jalur tersebut. Jika Camera:MotionPhotoPresentationTimestampUs
bukan
ada dalam paket XMP dan jalur metadata ada, maka nilai yang
trek metadata harus -1.
Elemen container
Elemen kontainer dienkode ke dalam metadata XMP dari gambar utama dan menentukan direktori item media dalam container. Item media harus yang terletak di file container dengan urutan yang sama dengan elemen item media di direktori dan harus dikemas dengan sangat padat.
- URI namespace adalah
http://ns.google.com/photos/1.0/container/
- Awalan namespace default adalah
Container
Direktori ini hanya boleh berisi satu item gambar utama dan harus menjadi item pertama item pada direktori.
Nama Elemen |
Jenis |
Deskripsi |
|
Array Struktur yang Diurutkan |
Array yang diurutkan dari struktur |
Elemen item
Elemen item media menjelaskan cara penggunaan setiap item oleh aplikasi.
- URI namespace adalah
http://ns.google.com/photos/1.0/container/item/
- Awalan namespace default adalah
Item
Item media pertama harus berupa gambar utama. Harus berisi Mime
yang menetapkan salah satu jenis MIME gambar yang tercantum dalam Tipe MIME Item
Nilai-nilai. Panjang item utama dapat ditentukan dengan menguraikan item utama
berdasarkan jenis MIME-nya, yang dimulai dari awal container file.
Item media pertama mungkin berisi atribut Padding
yang menentukan
padding di antara akhir gambar utama yang dienkode dan awal gambar
item media berikutnya. Hanya item media pertama yang boleh berisi atribut Padding
.
Setiap item media harus berisi atribut Mime
. Item media sekunder harus
juga berisi atribut {i>Length<i}.
Item media berurutan dapat berbagi data resource dalam penampung file. Tujuan
pertama menentukan lokasi
sumber daya di kontainer file,
dan item media bersama berikutnya memiliki Length
yang disetel ke 0 jika
data resource itu sendiri adalah container.
Lokasi resource item media dalam container ditentukan dengan menjumlahkan
nilai Length
resource item sekunder sebelumnya sepanjang
encoding gambar utama ditambah Padding
jika ditentukan.
Nama Atribut |
Jenis |
Deskripsi |
|
|
Wajib. String sederhana yang menunjukkan jenis MIME item media dalam penampung. |
|
|
Wajib. String sederhana yang menunjukkan arti spesifik aplikasi dari item media. Lihat bagian Nilai Semantik Item untuk definisi. |
|
|
Wajib untuk item media sekunder, termasuk penampung video. Panjang bilangan bulat positif dalam byte item. Item media diharapkan dalam bentuk aslinya, tanpa encoding yang diterapkan. Nilai {i>length<i} adalah panjang byte sebenarnya dalam file. Panjang 0 dalam item media sekunder menunjukkan bahwa resource item media dibagikan dengan item media sebelumnya. Panjangnya diharapkan 0 di item media utama. |
|
|
[Foto motion berbasis JPEG] Opsional untuk item media utama. String sederhana yang berisi panjang bilangan bulat positif dalam byte tambahan padding di antara akhir gambar utama yang dienkode dan awal item media berikutnya. [Foto motion berbasis HEIC/AVIF] Diperlukan untuk item media utama. Harus memiliki nilai sama dengan 8, nilai panjang header Foto Gerak Kotak Data Video ("mpvd"). |
Item:Nilai jenis MIME
Atribut Item:Mime
menentukan jenis MIME setiap item media.
Nilai |
Deskripsi |
|
Gambar JPEG |
|
Gambar HEIC |
|
Gambar AVIF |
|
Penampung MP4 |
|
Penampung MOV |
Item:Nilai semantik
Atribut Item:Semantic
menentukan arti spesifik setiap aplikasi
pada direktori container.
|
Deskripsi |
|
Menunjukkan bahwa item media adalah gambar utama yang siap ditampilkan dalam penampung. Foto motion harus menyertakan satu, dan hanya satu, item dengan semantik ini. |
|
Menunjukkan bahwa item media adalah penampung video. Foto motion harus menyertakan satu, dan hanya satu, item dengan semantik ini. Lokasi item media ini harus berada di akhir file. Tidak ada byte lain yang dapat ditempatkan setelah byte item media ini dihentikan. |
Foto motion dengan gambar Ultra HDR utama
Sesuai dengan aturan nilai semantik item yang ditentukan dalam spesifikasi ini dan
spesifikasi gambar Ultra HDR,
foto motion dengan gambar Ultra HDR utama juga harus menyertakan item media dengan
semantik item "GainMap"
. Selain itu, penulis yang mengenkode foto bergerak harus menempatkan
elemen item getmap sebelum elemen item video.
Perilaku khusus gambar ISOBMFF
Foto Motion dengan Berbasis ISOBMFF gambar (mis., gambar HEIC dan AVIF) harus memiliki struktur sehingga gambar bagian dari file dihentikan dengan "Data Video Foto Bergerak" tingkat atas kotak, dijelaskan dengan menggunakan semantik {i>syntax<i} Bahasa Deskripsi yang didefinisikan dalam Klausul 8 ISO/IEC 14496-1:2010(E):
// Box as defined in ISO/IEC 14496-12:2015: 4.2
aligned(8) class MotionPhotoVideoData extends Box('mpvd') {
bit(8) data[];
}
di mana “data” berisi semua byte video. Nilai khusus "0" tidak diizinkan untuk ukuran Kotak Data Video Foto Gerak. (Lihat ISO/IEC 14496-12:2015: 4.2 untuk definisi ukuran class yang memperluas Box.)
XMP gambar ISOBMFF juga harus menentukan Padding item media utama nilai atribut ini sama dengan ukuran dalam byte Video Foto Gerak {i>Header <i}Data Box, yaitu {i>header <i}ukuran dan nama.
Lihat Gambar 1 yang mengilustrasikan struktur kotak ini untuk contoh gerakan berbasis HEIC foto:
Gambar 1. Ilustrasi kotak tingkat atas dari contoh gambar HEIC dalam satu file foto gerakan HEIC. Perhatikan bahwa urutan kotak sebagian besar adalah untuk hanya ilustrasi (lihat standar yang relevan tentang cara membangun file HEIF atau video); Meskipun demikian, "mpvd" kotak harus muncul setelah semua HEIC kotak file gambar.
Konten penampung video
File kontainer video yang ditambahkan ke gambar utama harus mencakup setidaknya satu trek video utama. Trek ini wajib diisi dan berisi video yang dienkode di AVC, HEVC, atau AV1. Tujuan resolusi frame video utama tidak ditentukan. Ruang warna video, transfer fungsi ini, dan kedalaman bit dapat bervariasi. Misalnya, video SDR mungkin memiliki bit 8-bit kedalaman warna, ruang warna BT.709, dengan fungsi transfer sRGB. Atau, video HDR mungkin memiliki kedalaman 10-bit bit, ruang warna BT.2100, dan transfer HLG atau PQ tambahan, beserta metadata dan trek metadata HDR.
File penampung video dapat berisi satu opsional resolusi sekunder yang lebih tinggi trek video. Pembaca harus menggunakan kontennya untuk menampilkan pengganti untuk gambar diam utama yang dikodekan dalam gambar JPEG atau HEIC. Trek ini mungkin berisi video dengan kecepatan frame yang lebih rendah yang dienkode dalam AVC, HEVC, atau AV1. Frame video sekunder resolusi tidak ditentukan.
Semua frame dalam trek video sekunder diharapkan memiliki frame yang sesuai di trek video utama. Setiap pasangan pasangan frame di trek video primer dan sekunder harus memiliki presentasi yang identik stempel waktu. Jika ada frame trek sekunder tanpa frame trek utama yang sesuai frame trek, pelihat dapat mencoba memilih frame trek utama dengan frame stempel waktu presentasi yang cocok sebagai thumbnail representatif untuk trek video sekunder.
File kontainer video dapat berisi satu audio mono atau stereo 16-bit opsional trek pada 44kHz, 48 kHz, atau 96 kHz yang dikodekan dalam AAC. Pembaca harus menyajikan ini trek audio saat trek video utama ditampilkan.
Trek video sekunder, jika ada, harus selalu muncul setelah trek utama trek video. Tidak ada batasan pengurutan lainnya terkait jalur lain. Tujuan trek video utama harus memiliki indeks trek yang lebih rendah dari trek sekunder mana pun trek video. Artinya, jika trek video utama memiliki trek nomor 2, maka setiap trek video sekunder harus memiliki nomor trek lebih besar dari atau sama dengan 3.
Trek Metadata Video dengan Penskoran Machine Intelligence
Penulis dapat menambahkan trek metadata ke file kontainer video dengan ketik "meta". Trek metadata hanya boleh memiliki satu sampel yang berisi aliran byte dalam format yang dijelaskan dalam "Sintaksis".
Jika trek metadata ada, contoh entri tabel deskripsi untuk (yaitu, kotak "stsd" yang terletak di "mdia.minf.stbl.stsd" relatif terhadap "trak" ) harus berisi satu atom yang menunjukkan contoh metadata teks entri - (yaitu, kotak "mett"). "mett" box harus memiliki string jenis MIME sama ke "application/motionphoto-image-meta".
Sintaksis
Jika trek metadata ini ditentukan, kontennya harus terdiri dari aliran byte
sesuai dengan spesifikasi MotionPhotoMetadataDescriptor
ini, yang dijelaskan
menggunakan semantik {i>syntax<i} Bahasa Deskripsi yang didefinisikan di
Klausa 8 ISO/IEC 14496-1:2010(E).
// BaseDescriptor as defined in ISO/IEC 14496-1:2010(E): 7.2.2.2
abstract aligned(8) expandable((1<<28) - 1) class BaseDescriptor
: bit(8) tag=0 {
// Empty. To be filled by classes extending this class.
}
// Score data for a frame.
class MotionPhotoFrameScoreDescriptor extends BaseDescriptor
: bit(8) tag=MotionPhotoFrameScoreDescrTag {
// The frame's score in the range [0, 1].
float(32) score;
// The frame's presentation timestamp in microseconds.
int(64) presentationTimestampUs;
}
// Score data for a track.
class MotionPhotoTrackScoreDescriptor extends BaseDescriptor
: bit(8) tag=MotionPhotoTrackScoreDescrTag {
// The number of scored frames in the track.
unsigned int(32) numScoredFrames;
// The track's frames' score data. They must be in ascending order with
// respect to the presentation timestamp.
MotionPhotoFrameScoreDescriptor trackFrameScoreDescr[numScoredHighResFrames];
}
// Score data for a motion photo.
class MotionPhotoScoreDescriptor extends BaseDescriptor
: bit(8) tag=MotionPhotoScoreDescrTag {
// Machine-intelligence model version used to calculate the scores. Writers
// using a scoring model should set this field to 1 or greater. Writers not
// using any scoring model should set this field to 0.
unsigned int(32) modelVersion;
// The primary image's frame score data.
MotionPhotoFrameScoreDescriptor primaryImageFrameScoreDescr;
// The high-resolution motion photo frames' score data.
MotionPhotoTrackScoreDescriptor highResTrackScoreDescr;
}
// Flag data for a track.
class MotionPhotoTrackFlagsDescriptor extends BaseDescriptor
: bit(8) tag=MotionPhotoTrackFlagDescrTag {
// Set to true to indicate the video frames have been stabilized and don't
// require readers of the track to apply any further stabilization.
bit(1) isStabilized;
}
// Flags for a motion photo.
class MotionPhotoFlagsDescriptor extends BaseDescriptor
: bit(8) tag=MotionPhotoFlagDescrTag {
// The low-resolution motion photo track's flag data.
MotionPhotoTrackFlagDescriptor lowResTrackFlagsDescr;
// The high-resolution motion photo track's flag data.
MotionPhotoTrackFlagDescriptor highResTrackFlagsDescr;
}
// Container for motion photo metadata, like stabilization indicators and
// quality scoring.
class MotionPhotoMetadataDescriptor extends BaseDescriptor
: bit(8) tag=MotionPhotoMetadataDescrTag {
// Scoring data for the still and high-res frames.
MotionPhotoScoreDescriptor motionPhotoScoreDescr;
// Flags for the low-res and high-res frames.
MotionPhotoFlagDescriptor motionPhotoFlagDescr;
}
// Class tags for MotionPhotoData using the "User Private" tag space 0xC0-0xFE
// for descriptors defined in ISO/IEC 14496-1:2010(E): 7.2.2.1, Table 1.
// 0xC0 MotionPhotoMetadataDescrTag
// 0xC1 MotionPhotoScoreDescrTag
// 0xC2 MotionPhotoTrackScoreDescrTag
// 0xC3 MotionPhotoFrameScoreDescrTag
// 0xC4 MotionPhotoFlagsDescrTag
// 0xC5 MotionPhotoTrackFlagDescrTag