Hareketli Fotoğraf biçimi 1.0

Hareketli Fotoğraflar, hareketsiz bir fotoğraf ve ses kaydını içeren kısa bir video içeren tek dosyalardır. Bu tür medya, kullanıcının görüntünün çekildiği hissi ve atmosferi yakalamak için video ve sesin yanı sıra yüksek çözünürlüklü bir resmi görüntülemesine olanak tanır.

Bağımlılıklar

Aşağıda, bu spesifikasyon için normatif referanslar verilmiştir:

Giriş

"ZORUNLU", "ZORUNLU OLMALI", "GEREKLİ", "GEREKLİ", "GEREKLİ DEĞİLDİR", "ÖNERİLİR", "MAYIS" ve "İSTEĞE BAĞLI" işlevleri RFC2119'da tanımlanan IETF standardına göre kullanılır.

Hareketli Fotoğraf Biçimi

Hareketli Fotoğraf dosyaları, birincil sabit resim dosyası (JPEG, HEIC veya AVIF) ve bu dosyanın sonuna ikincil bir video dosyası eklenir. Birincil görüntü, hareketsiz görüntü dosyasının ve video dosyası içeriklerinin nasıl görüntüleneceğini açıklayan Kamera XMP meta verilerini ve video dosyası içeriklerinin nasıl bulunacağını açıklayan Container XMP meta verilerini içerir.

Ultra HDR JPEG'lerde olduğu gibi resim dosyasının da bir kazanç haritası olabilir.

Dosya Adı Kalıbı

Yazarlar, aşağıdaki normal ifadeyle eşleşen bir dosya adı kullanmalıdır:

^([^\\s\\/\\\\][^\\/\\\\]*MP)\\.(JPG|jpg|JPEG|jpeg|HEIC|heic|AVIF|avif)

Kalıba uyulmaması halinde okuyucular XMP meta verilerini, eklenen video dosyasını veya video içeriklerini yoksayabilir.

Medya Verileri Kodlaması

Birincil görüntü, dosya kapsayıcısında sonraki medya dosyasının sırasını ve özelliklerini tanımlayan bir Kapsayıcı Öğesi XMP meta veri dizini içerir. Kapsayıcıdaki her dosyanın dizinde karşılık gelen bir medya öğesi vardır. Medya öğesi, dosya kapsayıcısındaki konumu ve birleştirilmiş her bir dosyanın temel özelliklerini açıklar.

XMP Özellikleri

Hareketli Fotoğraf biçimi için ekstra anlamsal bilgileri tanımlamak üzere iki XMP meta veri grubu kullanılır. Meta veriler herhangi bir sırada görünebilir.

Kamera Meta Verileri

Kamera meta verileri, Hareketli Fotoğraf'ın birincil resminin ve video bölümlerinin nasıl sunulacağıyla ilgili bilgileri kodlar.

  • Ad alanı URI'si: http://ns.google.com/photos/1.0/camera/
  • Varsayılan ad alanı öneki Camera

Aşağıdaki özellikler hareketsiz resim dosyası XMP meta verilerinde görünebilir:

Ad

Tür

Açıklama

Camera:MicroVideo

Camera:MicroVideoVersion

Camera:MicroVideoOffset

Camera:MicroVideoPresentation
TimestampUs

Bu özellikler, Microvideo V1 spesifikasyonunun bir parçasıydı. Bunlar bu spesifikasyonda silinir ve varsa yoksayılmalıdır.

Özellikle, dosyadaki video verilerinin bulunması için MicroVideoOffset özelliğinin yerine GContainer:ItemLength değeri kullanılır.

Camera:MotionPhoto

Integer

0: Dosyanın hareketli fotoğraf olarak değerlendirilmemesi gerektiğini belirtir.

1: Dosyanın hareketli fotoğraf olarak işlenmesi gerektiğini belirtir.

Diğer tüm değerler tanımlanmamıştır ve 0 ile eşdeğer şekilde ele alınır.

Değer sıfır veya negatif olursa video, dosyaya eklenmiş olsa bile her zaman Hareketli Fotoğraf olmayan bir dosya olarak değerlendirilir.

XMP, en iyi davranan düzenleyiciler tarafından aktarıldığından, eklenen video çıkarılmış olsa bile hareketsiz resim dosyalarında bu alan için kalan değer 1 olabilir. Dolayısıyla bu alan kesin değildir ve okuyucuların her zaman videonun mevcut olduğunu onaylaması gerekir.

Camera:MotionPhotoVersion

Integer

Hareketli Fotoğraf'ın dosya biçimi sürümünü belirtir. Bu spesifikasyon "1" sürümünü tanımlar.

Camera:MotionPhotoPresentationTimestampUs

Long

Resim sabitine karşılık gelen video karesinin sunum zaman damgasını (mikrosaniye cinsinden) temsil eden uzun değer. Ayarlanmadı/belirtilmediğini belirtmek için değer -1 olabilir.

Sunu davranışı

XMP paketinde Camera:MotionPhotoPresentationTimestampUs yoksa okuyucular, video parçasının ortasına en yakın zaman damgasından hemen önce (video parçasının süresi 2'ye bölünen zaman damgasından hemen önce) bir sunu zaman damgası kullanmalıdır.

XMP paketinde Camera:MotionPhotoPresentationTimestampUs ve videoda "application/motionphoto-image-meta" varsa ilgili kanalın primaryImageFrameScoreDescr presentationTimestampUs alanında aynı değer görünmelidir. XMP paketinde Camera:MotionPhotoPresentationTimestampUs yoksa ve meta veri kanalı mevcutsa meta veri kanalındaki değer -1 olmalıdır.

Kapsayıcı öğesi

Kapsayıcı öğesi, birincil görüntünün XMP meta verilerine kodlanır ve kapsayıcıdaki medya öğelerinin dizinini tanımlar. Medya öğeleri, kapsayıcı dosyada dizindeki medya öğesi öğeleriyle aynı sırada bulunmalı ve sıkı bir şekilde paketlenmelidir.

  • Ad alanı URI'si: http://ns.google.com/photos/1.0/container/
  • Varsayılan ad alanı öneki Container

Dizin yalnızca bir birincil resim öğesi içerebilir ve bu, dizindeki ilk öğe olmalıdır.

Öğe Adı

Tür

Açıklama

Directory

Sıralı Yapı Dizisi

Container'ın düzenini ve içeriğini tanımlayan sıralı Container:Item yapısı dizisi.

Öğe öğesi

Medya öğesi öğeleri, her bir öğenin uygulama tarafından nasıl kullanılması gerektiğini açıklar.

  • Ad alanı URI'si: http://ns.google.com/photos/1.0/container/item/
  • Varsayılan ad alanı öneki Item

İlk medya öğesi, birincil resim olmalıdır. Öğe MIME Türü Değerlerinde listelenen resim MIME türlerinden birini belirten bir Mime özelliğini içermelidir. Birincil öğenin uzunluğu, birincil resmin dosya kapsayıcısının başından başlayarak MIME türüne göre ayrıştırılmasıyla belirlenebilir.

İlk medya öğesi, kodlanmış birincil resmin sonu ile bir sonraki medya öğesinin başlangıcı arasında ek dolgu belirten bir Padding özelliği içerebilir. Yalnızca ilk medya öğesi Padding özelliği içerebilir.

Her medya öğesi bir Mime özelliği içermelidir. İkincil medya öğeleri de Uzunluk özelliklerini içermelidir.

Sıralı medya öğeleri, kaynak verilerini dosya kapsayıcısı içinde paylaşabilir. İlk medya öğesi, dosya kapsayıcısındaki kaynağın konumunu belirler. Kaynak verilerinin kapsayıcı olması durumunda sonraki paylaşılan medya öğeleri için Length değeri 0 olarak ayarlanır.

Kapsayıcıdaki medya öğesi kaynaklarının konumu, önceki ikincil öğe kaynaklarının Length değerlerinin, birincil resim kodlamasının uzunluğu ile (belirtilmişse Padding) toplanarak belirlenir.

Özellik Adı

Tür

Açıklama

Mime

String

Gerekli. Kapsayıcıdaki medya öğesinin MIME türünü gösteren basit dize.

Semantic

String

Gerekli. Medya öğesinin uygulamaya özel anlamını gösteren basit dize. Tanım için Öğe Semantik Değerleri bölümüne bakın.

Length

Integer

Video kapsayıcısı da dahil olmak üzere ikincil medya öğeleri için gereklidir. Öğenin bayt cinsinden pozitif tam sayı uzunluğu. Medya öğelerinin, kodlama uygulanmadan orijinal biçiminde olması beklenir. Uzunluk değeri, dosyadaki baytların gerçek uzunluğudur.

İkincil medya öğelerindeki uzunluk 0, medya öğesi kaynağının önceki medya öğesiyle paylaşıldığını gösterir. Birincil medya öğesinde uzunluğun 0 olması beklenir.

Padding

Integer

[JPEG tabanlı hareketli fotoğraflar]

Birincil medya öğesi için isteğe bağlıdır. Kodlanmış birincil resmin sonu ile bir sonraki medya öğesinin başlangıcı arasındaki ek dolgunun bayt cinsinden pozitif tam sayı uzunluğunu içeren basit dize.

[HEIC/AVIF tabanlı hareketli fotoğraflar]

Birincil medya öğesi için gereklidir. 8 değerine, yani Hareketli Fotoğraf Video Verileri ("mpvd") kutusunun başlık uzunluğuna eşit bir değere sahip olmalıdır.

Öğe:Mime türü değerleri

Item:Mime özelliği, her bir medya öğesinin MIME türünü tanımlar.

Değer

Açıklama

image/jpeg

JPEG resim

image/heic

HEIC resmi

image/avif

AVIF resmi

video/mp4

MP4 kapsayıcısı

video/quicktime

MOV kapsayıcısı

Öğe:Anlamsal değerler

Item:Semantic özelliği, kapsayıcı dizinindeki her bir medya öğesinin uygulamaya özel anlamını tanımlar.

Value

Açıklama

Primary

Medya öğesinin, kapsayıcıda görüntülenen birincil görüntülü reklamlar için hazır resim olduğunu belirtir. Hareketli fotoğraflar, bu anlamlara sahip yalnızca bir öğe içermelidir.

MotionPhoto

Medya öğesinin, video kapsayıcısı olduğunu belirtir. Hareketli fotoğraflar, bu anlamlara sahip yalnızca bir öğe içermelidir. Bu medya öğesinin konumu dosyanın sonunda olmalıdır. Bu medya öğesinin baytları sonlandırıldıktan sonra başka bayt yerleştirilemez.

Birincil Ultra HDR görüntü içeren hareketli fotoğraflar

Bu spesifikasyonda ve Ultra HDR görüntü spesifikasyonunda tanımlanan öğe semantik değeri kurallarına göre, birincil Ultra HDR resmi olan hareketli fotoğraflar, öğe anlamı "GainMap" olan bir medya öğesi de içermelidir. Ayrıca, hareketli fotoğrafları kodlayan yazarlar kazanç haritası öğe öğesini video öğesi öğesinden önce yerleştirmelidir.

ISOBMFF resmine özgü davranış

ISOBMFF tabanlı resimlere (ör. HEIC ve AVIF resimleri), dosyanın resim bölümü üst düzey bir "Hareketli Fotoğraf Video Verileri" kutusuyla sonlandırılacak şekilde bir yapıya sahip olmalıdır ve ISO/IEC 14496-1:2010(E) madde 8'de tanımlanan söz dizimi açıklama dilinin anlamı kullanılarak tanımlanmalıdır:

// Box as defined in ISO/IEC 14496-12:2015: 4.2
aligned(8) class MotionPhotoVideoData extends Box('mpvd') {
  bit(8) data[];
}

Bu örnekte "data" alanı, tüm video baytlarını içerir. Hareketli Fotoğraf Video Veri Kutusu'nun boyutu için "0" özel değerine izin verilmez. (Box'u genişleten sınıf boyutunun tanımı için ISO/IEC 14496-12:2015: 4.2'ye bakın.)

ISOBMFF görüntüsünün XMP'si de birincil medya öğesinin Dolgu özellik değerini, Hareketli Fotoğraf Video Veri Kutusu başlığının bayt cinsinden boyuta (boyut ve ad başlıkları) eşit olacak şekilde tanımlamalıdır.

HEIC tabanlı hareket fotoğrafı için aşağıdaki kutu yapısının gösterildiği Şekil 1'e bakın:

HEIC hareket dosyasındaki öğelerin yerleşimini gösteren çizgi diyagramı

Şekil 1. Tek bir HEIC hareket fotoğraf dosyasında bulunan örnek bir HEIC resminin üst düzey kutularının görseli. Kutuların sırasının çoğunlukla yalnızca örnek olduğunu unutmayın (lütfen HEIF veya video dosyalarının nasıl oluşturulduğuyla ilgili standartlara bakın). Bununla birlikte, "mpvd" kutusu tüm HEIC resim dosyası kutularından sonra gelmelidir.

Video kapsayıcı içerikleri

Birincil görüntüye eklenen video kapsayıcı dosyası en az bir birincil video kanalı içermelidir. Bu parça zorunludur ve AVC, HEVC veya AV1 olarak kodlanmış videolar içerir. Birincil video kare çözünürlüğü tanımlanmamıştır. Video renk alanı, aktarım işlevi ve bit derinliği değişiklik gösterebilir. Örneğin, SDR videolar 8 bit derinliğe, BT.709 renk alanına ve sRGB aktarım işlevine sahip olabilir. Alternatif olarak, HDR videoların 10 bit derinliği, BT.2100 renk alanı, HLG veya PQ aktarım işlevi, HDR meta verileri ve meta veri kanalları olabilir.

Video kapsayıcı dosyası, isteğe bağlı olarak daha yüksek çözünürlüklü bir ikincil video kanalı içerebilir. Okuyucular, JPEG veya HEIC resminde kodlanan birincil hareketsiz resmin yerine geçecek içerikleri göstermek için bu resmin içeriğini kullanmalıdır. Bu parça AVC, HEVC veya AV1'de kodlanmış, düşük kare hızlı video içerebilir. İkincil video karesi çözünürlüğü tanımlanmamış.

İkincil video parçasındaki tüm karelerin birincil video parçasında karşılık gelen karelere sahip olması beklenir. Birincil ve ikincil video kanallarındaki karşılık gelen her kare çifti aynı sunum zaman damgalarına sahip olmalıdır. Karşılık gelen birincil parça çerçevesi olmayan ikincil bir parça karesi varsa izleyiciler, ikincil video parçasını temsil eden küçük resim olarak en yakın eşleşen sunu zaman damgasına sahip birincil parça karesini seçmeyi deneyebilir.

Video kapsayıcı dosyası, AAC olarak kodlanmış 44 kHz, 48 kHz veya 96 kHz'lik isteğe bağlı 16 bit mono ya da stereo ses parçası içerebilir. Okuyucular, birincil video parçası gösterildiğinde bu ses parçasını sunmalıdır.

İkincil video kanalı (varsa), her zaman birincil video parçasından sonra gelmelidir. Diğer kanallarla ilgili başka sıralama kısıtlaması yoktur. Birincil video kanalının parça dizini, ikincil video kanallarından daha düşük olmalıdır. Yani birincil video parçasının parça numarası 2 ise ikincil video parçalarının parça numarası 3 veya daha büyük olmalıdır.

Makine Zekası Puanlaması ile Video Meta Verisi Parçası

Yazarlar isteğe bağlı olarak video kapsayıcı dosyasına "meta" türüyle bir meta veri kanalı ekleyebilir. Meta veri parçası, "Söz dizimi" bölümünde açıklanan biçimde bir bayt akışı içeren tam olarak bir örneğe sahip olmalıdır.

Meta veri parçası mevcutsa parça için örnek açıklama tablosu girişi (yani, "trak" kutusuna göre "mdia.minf.stbl.stsd" konumunda bulunan "stsd" kutusu), metin meta veri örnek girişini (yani bir "mett" kutusu) belirten tek bir atom içermelidir. "mett" kutusunun "application/motionphoto-image-meta" öğesine eşit bir MIME türü dizesi olmalıdır.

Sözdizimi

Bu meta veri parçası tanımlanmışsa içeriği, bu MotionPhotoMetadataDescriptor spesifikasyonuna uygun bir bayt akışından oluşmalıdır (burada, ISO/IEC 14496-1:2010(E) madde 8'de tanımlanan Söz Dizimi Açıklama Dilinin anlamı kullanılarak açıklanmaktadır).

// 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