فرمت عکس حرکتی 1.0

Motion Photos فایل‌های تکی هستند که شامل یک تصویر ثابت عکاسی و یک ویدیوی کوتاه است که شامل ضبط صدا می‌شود. این نوع رسانه به کاربر این امکان را می دهد که یک تصویر ثابت با وضوح بالا و همچنین فیلم و صدا را برای ثبت احساسات و فضایی که در آن تصویر گرفته شده است، مشاهده کند.

وابستگی ها

موارد زیر مراجع هنجاری برای این مشخصات هستند:

مقدمه

استفاده از "MUST"، "MUST NOT"، "REQUIRED"، "SHOULD"، "SHOULD NOT"، "RECOMMENDED"، "MAY" و "OPTIONAL" طبق استاندارد IETF تعریف شده در RFC2119 است.

فرمت عکس متحرک

فایل‌های Motion Photo از یک فایل تصویر ثابت اولیه، JPEG ، HEIC ، یا AVIF تشکیل شده‌اند که یک فایل ویدئویی ثانویه به آن اضافه شده است. تصویر اصلی حاوی فراداده Camera XMP است که نحوه نمایش فایل تصویر ثابت و محتویات فایل ویدیویی را توضیح می‌دهد و فراداده Container XMP که نحوه مکان یابی محتوای فایل ویدیویی را توضیح می‌دهد.

فایل تصویر ممکن است دارای یک نقشه برداری باشد، همانطور که در مورد JPEGهای Ultra HDR وجود دارد.

الگوی نام فایل

نویسندگان باید از نام فایلی مطابق با عبارت منظم زیر استفاده کنند:

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

خوانندگان ممکن است فراداده XMP، فایل ویدیویی ضمیمه شده یا محتوای ویدیو را نادیده بگیرند اگر از الگو پیروی نشود.

رمزگذاری داده های رسانه ای

تصویر اصلی حاوی یک فهرست فراداده Container Element XMP است که ترتیب و ویژگی های فایل رسانه بعدی را در ظرف فایل تعریف می کند. هر فایل در کانتینر یک آیتم رسانه مربوطه در دایرکتوری دارد. آیتم رسانه مکان در محفظه فایل و خصوصیات اساسی هر فایل الحاقی را توصیف می کند.

ویژگی های XMP

دو مجموعه از فراداده XMP برای تعریف اطلاعات معنایی اضافی برای قالب Motion Photo استفاده می شود. ابرداده ممکن است به هر ترتیبی ظاهر شود.

فراداده دوربین

فراداده دوربین اطلاعاتی را در مورد نحوه ارائه قسمت های تصویر و ویدیوی اصلی Motion Photo رمزگذاری می کند.

  • URI فضای نام http://ns.google.com/photos/1.0/camera/ است
  • پیشوند فضای نام پیش فرض Camera است

ویژگی های زیر ممکن است در فراداده فایل تصویر ثابت XMP ظاهر شوند:

نام

تایپ کنید

توضیحات

Camera:MicroVideo

Camera:MicroVideoVersion

Camera:MicroVideoOffset

Camera:MicroVideoPresentation
TimestampUs

این ویژگی ها بخشی از مشخصات Microvideo V1 بودند. آنها در این مشخصات حذف شده اند و در صورت وجود باید نادیده گرفته شوند.

به طور خاص، ویژگی MicroVideoOffset با مقدار GContainer:ItemLength برای مکان یابی داده های ویدیویی در فایل جایگزین می شود.

Camera:MotionPhoto

Integer

0: نشان می دهد که فایل نباید به عنوان عکس حرکتی در نظر گرفته شود.

1: نشان می دهد که فایل باید به عنوان عکس حرکتی در نظر گرفته شود.

همه مقادیر دیگر تعریف نشده هستند و معادل 0 در نظر گرفته می شوند.

اگر مقدار صفر یا منفی باشد، فایل همیشه به عنوان یک عکس غیر متحرک در نظر گرفته می‌شود، حتی اگر یک ویدیو در واقع به فایل اضافه شده باشد.

از آنجایی که XMP توسط اکثر ویرایشگرهای خوش رفتار منتقل می شود، فایل های تصویر ثابت ممکن است همچنان مقدار باقیمانده 1 را برای این فیلد داشته باشند، حتی اگر ویدیوی ضمیمه حذف شده باشد. بنابراین این قسمت قطعی نیست و خوانندگان باید همیشه وجود یک ویدیو را تأیید کنند.

Camera:MotionPhotoVersion

Integer

نسخه فرمت فایل Motion Photo را نشان می دهد. این مشخصات نسخه "1" را تعریف می کند.

Camera:MotionPhotoPresentationTimestampUs

Long

مقدار طولانی نشان‌دهنده مهر زمانی ارائه (در میکروثانیه) فریم ویدیویی مربوط به تصویر ثابت است. مقدار می تواند -1 برای نشان دادن تنظیم نشده / نامشخص باشد.

رفتار ارائه

اگر Camera:MotionPhotoPresentationTimestampUs در بسته XMP وجود ندارد، خوانندگان باید از مهر زمانی ارائه بلافاصله قبل از مهر زمانی استفاده کنند که نزدیک به وسط تراک ویدیو است، یعنی مدت زمان تراک ویدیو تقسیم بر 2.

اگر Camera:MotionPhotoPresentationTimestampUs در بسته XMP وجود داشته باشد و "application/motionphoto-image-meta" در ویدئو وجود داشته باشد، همان مقدار باید در قسمت primaryImageFrameScoreDescr presentationTimestampUs آن تراک ظاهر شود. اگر Camera:MotionPhotoPresentationTimestampUs در بسته XMP وجود نداشته باشد و آهنگ فراداده وجود داشته باشد، مقدار در مسیر فراداده باید -1 باشد.

عنصر ظرف

عنصر کانتینر در فراداده XMP تصویر اصلی کدگذاری می‌شود و دایرکتوری آیتم‌های رسانه را در ظرف تعریف می‌کند. آیتم های رسانه باید به همان ترتیبی که عناصر آیتم رسانه در دایرکتوری قرار دارند در فایل کانتینر قرار گیرند و باید محکم بسته بندی شوند.

  • URI فضای نام http://ns.google.com/photos/1.0/container/ است
  • پیشوند فضای نام پیش فرض Container است

دایرکتوری ممکن است فقط یک آیتم تصویر اصلی داشته باشد و باید اولین مورد در فهرست باشد.

نام عنصر

تایپ کنید

توضیحات

Directory

آرایه مرتب سازه ها

آرایه مرتب Container:Item که چیدمان و محتویات کانتینر را تعریف می کنند.

عنصر مورد

عناصر آیتم رسانه نحوه استفاده از هر مورد توسط برنامه را توضیح می دهند.

  • URI فضای نام http://ns.google.com/photos/1.0/container/item/ است
  • پیشوند فضای نام پیش فرض Item است

اولین آیتم رسانه ای باید تصویر اصلی باشد. باید دارای یک ویژگی Mime باشد که یکی از انواع MIME تصویر فهرست شده در مقادیر نوع MIME مورد را مشخص کند. طول آیتم اصلی ممکن است با تجزیه تصویر اصلی بر اساس نوع MIME آن که از ابتدای ظرف فایل شروع می شود، تعیین شود.

اولین مورد رسانه ممکن است حاوی یک ویژگی Padding باشد که بالشتک اضافی را بین انتهای تصویر اصلی کدگذاری شده و ابتدای مورد رسانه بعدی مشخص می کند. فقط اولین مورد رسانه ممکن است دارای ویژگی Padding باشد.

هر آیتم رسانه ای باید دارای ویژگی Mime باشد. آیتم های رسانه ثانویه نیز باید دارای ویژگی های Length باشند.

آیتم های رسانه متوالی ممکن است داده های منبع را در ظرف فایل به اشتراک بگذارند. اولین آیتم رسانه محل منبع را در محفظه فایل تعیین می‌کند و آیتم‌های رسانه مشترک بعدی دارای Length روی 0 هستند در صورتی که داده منبع خود یک ظرف باشد.

مکان منابع آیتم رسانه در ظرف با جمع کردن مقادیر Length منابع آیتم ثانویه قبلی به طول رمزگذاری تصویر اولیه به اضافه Padding در صورت مشخص شدن تعیین می‌شود.

نام صفت

تایپ کنید

توضیحات

Mime

String

مورد نیاز. رشته ساده نشان دهنده نوع MIME مورد رسانه در ظرف است.

Semantic

String

مورد نیاز. رشته ساده که معنای خاص برنامه مورد رسانه را نشان می دهد. برای تعریف به بخش مقادیر معنایی آیتم مراجعه کنید.

Length

Integer

برای موارد رسانه ثانویه، از جمله محفظه ویدیو، مورد نیاز است. طول عدد صحیح مثبت در بایت مورد. انتظار می رود موارد رسانه به شکل اصلی خود باشند و هیچ کدگذاری اعمال نشده باشد. مقدار طول، طول واقعی بایت های موجود در فایل است.

طول 0 در آیتم های رسانه ثانویه نشان می دهد که منبع آیتم رسانه با آیتم رسانه قبلی به اشتراک گذاشته شده است. انتظار می رود طول در یک مورد رسانه اصلی 0 باشد.

Padding

Integer

[عکس های متحرک مبتنی بر JPEG]

اختیاری برای آیتم رسانه اصلی. رشته ساده حاوی طول عدد صحیح مثبت در بایت های بالشتک اضافی بین انتهای تصویر اصلی کدگذاری شده و ابتدای آیتم رسانه بعدی.

[عکس‌های متحرک مبتنی بر HEIC/AVIF]

برای آیتم رسانه اصلی مورد نیاز است. باید مقداری برابر با 8 داشته باشد، طول سرصفحه کادر Motion Photo Video Data ("mpvd") .

مورد: مقادیر نوع Mime

Item:Mime نوع MIME هر آیتم رسانه را تعریف می کند.

ارزش

توضیحات

image/jpeg

تصویر JPEG

image/heic

تصویر HEIC

image/avif

تصویر AVIF

video/mp4

ظرف MP4

video/quicktime

ظرف MOV

مورد: مقادیر معنایی

Item:Semantic معنای خاص برنامه هر آیتم رسانه را در فهرست کانتینر تعریف می کند.

Value

توضیحات

Primary

نشان می دهد که آیتم رسانه تصویر آماده نمایش اولیه در ظرف است. یک عکس متحرک باید شامل یک و فقط یک مورد با این معنایی باشد.

MotionPhoto

نشان می دهد که آیتم رسانه، ظرف ویدیو است. یک عکس متحرک باید شامل یک و فقط یک مورد با این معنایی باشد. محل این آیتم رسانه ای باید در انتهای فایل باشد. پس از پایان یافتن بایت های این آیتم رسانه ای، هیچ بایت دیگری نمی تواند قرار گیرد.

عکس‌های متحرک با تصویر Ultra HDR اولیه

مطابق با قوانین ارزش معنایی مورد تعریف شده در این مشخصات و در مشخصات تصویر Ultra HDR ، عکس‌های متحرک با تصویر Ultra HDR اولیه نیز باید شامل یک آیتم رسانه با یک آیتم معنایی "GainMap" باشد. همچنین، نویسندگانی که عکس‌های متحرک را کد می‌کنند، باید عنصر آیتم gainmap را قبل از عنصر آیتم ویدیویی قرار دهند.

رفتار ویژه تصویر ISOBMFF

عکس‌های متحرک با تصاویر مبتنی بر ISOBMFF (مثلاً تصاویر HEIC و AVIF) باید ساختاری داشته باشند که بخش تصویر فایل با کادر سطح بالایی «داده‌های ویدیوی عکس متحرک» خاتمه یابد که با استفاده از معنای زبان توصیف نحوی توصیف شده است. تعریف شده در ISO/IEC 14496-1:2010(E) بند 8:

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

جایی که فیلد "داده" شامل تمام بایت های ویدئویی است. مقدار ویژه "0" برای اندازه جعبه داده Motion Photo Video مجاز نیست. (برای تعریف اندازه کلاسی که Box را گسترش می دهد، به ISO/IEC 14496-12:2015: 4.2 مراجعه کنید.)

XMP تصویر ISOBMFF همچنین باید مقدار ویژگی Padding آیتم رسانه اصلی را به اندازه بایت هدر Motion Photo Video Data Box، یعنی هدرهای اندازه و نام، تعریف کند.

برای نمونه عکس متحرک مبتنی بر HEIC به شکل 1 که ساختار این جعبه را نشان می دهد مراجعه کنید:

نمودار خطی که آرایش عناصر را در یک فایل حرکتی HEIC نشان می دهد

شکل 1. تصویر جعبه های سطح بالای یک نمونه تصویر HEIC در یک فایل عکس متحرک HEIC. توجه داشته باشید که ترتیب جعبه ها عمدتاً فقط برای تصویر است (لطفاً به استانداردهای مربوطه در مورد نحوه ساخت فایل های HEIF یا ویدیویی مراجعه کنید). با این وجود، کادر "mpvd" باید بعد از تمام جعبه های فایل تصویری HEIC بیاید.

محتویات کانتینر ویدیویی

فایل محفظه ویدیویی که به تصویر اصلی اضافه می‌شود باید حداقل یک تراک ویدیوی اصلی را شامل شود. این آهنگ مورد نیاز است و حاوی ویدیوهای کدگذاری شده با AVC ، HEVC ، یا AV1 است. وضوح فریم ویدیوی اولیه تعریف نشده است. فضای رنگ فیلم، عملکرد انتقال و عمق بیت ممکن است متفاوت باشد. برای مثال، ویدیوهای SDR ممکن است دارای عمق 8 بیتی، فضای رنگی BT.709، با عملکرد انتقال sRGB باشند. یا، ویدیوهای HDR ممکن است عمق 10 بیتی، فضای رنگی BT.2100 و عملکرد انتقال HLG یا PQ، همراه با متادیتا و تراک‌های فراداده HDR داشته باشند.

فایل محفظه ویدیو ممکن است حاوی یک تراک ویدیویی ثانویه اختیاری با وضوح بالاتر باشد. خوانندگان باید از محتویات آن برای نمایش جایگزینی برای تصویر ثابت اولیه کدگذاری شده در تصویر JPEG یا HEIC استفاده کنند. این آهنگ ممکن است حاوی ویدیوی با نرخ فریم پایین‌تر باشد که در AVC، HEVC، یا AV1 کدگذاری شده است. وضوح فریم ویدیوی ثانویه تعریف نشده است.

انتظار می رود که تمام فریم های موجود در تراک ویدئوی ثانویه دارای فریم های متناظر در تراک ویدئوی اولیه باشند. هر جفت فریم متناظر در تراک‌های ویدیوی اولیه و ثانویه باید دارای مهرهای زمانی ارائه یکسان باشد. اگر یک فریم تراک ثانویه بدون قاب تراک اصلی مربوطه وجود داشته باشد، بینندگان می‌توانند فریم آهنگ اصلی را با نزدیک‌ترین مُهر زمان ارائه منطبق به عنوان تصویر کوچک نماینده برای آن تراک ویدیوی ثانویه انتخاب کنند.

فایل محفظه ویدیو ممکن است حاوی یک آهنگ صوتی مونو یا استریو 16 بیتی اختیاری با فرکانس‌های 44 کیلوهرتز، 48 کیلوهرتز یا 96 کیلوهرتز باشد که در AAC کدگذاری شده‌اند. خوانندگان باید این تراک صوتی را هنگامی که تراک ویدیوی اصلی نمایش داده می شود ارائه دهند.

تراک ویدیوی ثانویه، در صورت وجود، همیشه باید بعد از تراک ویدیوی اصلی بیاید. هیچ محدودیت دیگری برای سفارش در مورد آهنگ های دیگر وجود ندارد. تراک ویدیوی اولیه باید دارای شاخص تراک کمتر از هر تراک ویدیوی ثانویه باشد. به این معنا که اگر تراک ویدیوی اولیه دارای تراک شماره 2 باشد، هر تراک ویدیویی ثانویه باید دارای شماره تراک بزرگتر یا مساوی با 3 باشد.

آهنگ فراداده ویدیویی با امتیازدهی هوش ماشینی

نویسندگان می‌توانند به صورت اختیاری یک آهنگ فراداده را با نوع «meta» به فایل محفظه ویدیو اضافه کنند. تراک فراداده باید دقیقاً یک نمونه داشته باشد که حاوی یک جریان بایت در قالب توصیف شده در "Syntax" باشد .

اگر تراک فراداده موجود باشد، ورودی جدول توصیف نمونه برای مسیر (یعنی کادر "stsd" واقع در "mdia.minf.stbl.stsd" نسبت به کادر "trak") باید شامل یک اتم منفرد باشد که نشان دهنده یک ورودی نمونه فراداده متن - (یعنی یک کادر "mett"). کادر "mett" باید دارای رشته ای از نوع MIME برابر با "application/motionphoto-image-meta" باشد.

نحو

اگر این تراک فراداده تعریف شده باشد، محتوای آن باید شامل یک جریان بایت باشد که مطابق با این مشخصات MotionPhotoMetadataDescriptor است که در اینجا با استفاده از معنای زبان توصیف نحوی تعریف شده در ISO/IEC 14496-1:2010(E) بند 8 توضیح داده شده است.

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