تنسيق الصورة الحيّة 1.0

الصور الحيّة هي ملفات فردية تحتوي على صورة فوتوغرافية ثابتة فيديو قصير يتضمن تسجيلاً صوتيًا يتيح هذا النوع من الوسائط للمستخدم عرض صورة ثابتة عالية الدقة بالإضافة إلى الفيديو والصوت لالتقاط العاطفة والجو الذي تم فيه التقاط الصورة.

التبعيات

في ما يلي مراجع معيارية لهذه المواصفات:

مقدّمة

إن استخدام "يجب" أو "يجب ألا" أو "مطلوب" أو "ينبغي" "SHOULD NOT" و"RECOMMENDED" و"MAY" و"OPTIONAL" وفقًا لمعيار مجموعة مهندسي شبكة الإنترنت (IETF) كما هو محدّد في RFC2119.

تنسيق الصور الحيّة

تتألف ملفات الصور الحيّة من ملف صور ثابتة أساسي، JPEG أو HEIC أو AVIF مع إلحاق ملف فيديو ثانوي بها. تحتوي الصورة الأساسية على كاميرا XMP البيانات الوصفية التي تصف كيفية عرض ملف الصورة الثابتة ومحتوى ملف الفيديو والبيانات الوصفية Container XMP التي تصف كيفية تحديد مكان محتوى ملف الفيديو.

قد يحتوي ملف الصورة على خريطة معزّزة، كما هو الحال مع صور JPEG بدقة فائقة.

نمط اسم الملف

يجب أن يستخدم الكتاب اسم ملف يطابق التعبير العادي التالي:

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

قد يتجاهل القرّاء بيانات XMP الوصفية أو ملف الفيديو الملحق أو الفيديو والمحتوى إذا لم يتم اتباع النمط.

ترميز بيانات الوسائط

تحتوي الصورة الأساسية على عنصر حاوية XMP دليل بيانات وصفية يحدد ترتيب الوسائط اللاحقة وخصائصها ملف في حاوية الملف. يحتوي كل ملف في الحاوية على وسائط مقابلة العنصر في الدليل. يصف عنصر الوسائط الموقع الموجود في الملف والخصائص الأساسية لكل ملف متسلسل.

سمات XMP

يتم استخدام مجموعتين من بيانات تعريف XMP لتحديد المعلومات الدلالية الإضافية تنسيق الصور المتحركة. قد تظهر البيانات الوصفية بأي ترتيب.

البيانات الوصفية للكاميرا

تعمل البيانات الوصفية للكاميرا على ترميز المعلومات حول كيفية تقديم الصورة الأساسية مقاطع الفيديو في الصورة المتحركة.

  • معرّف الموارد المنتظم (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

يشير إلى إصدار تنسيق الملف من "الصور الحيّة". تحدد هذه المواصفات الإصدار "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 على 0، في حالة ما إذا كان بيانات المورد هي في حد ذاتها حاوية.

يتم تحديد موقع موارد عنصر الوسائط في الحاوية من خلال جمع قيم Length لموارد العنصر الثانوي السابق إلى طول ترميز الصورة الأساسية بالإضافة إلى Padding إذا تم تحديده.

اسم السمة

النوع

الوصف

Mime

String

مطلوب. سلسلة بسيطة تشير إلى نوع MIME لعنصر الوسائط في الحاوية.

Semantic

String

مطلوب. سلسلة بسيطة تشير إلى المعنى الخاص بالتطبيق لعنصر الوسائط. راجِع قسم "القيم الدلالية للسلعة" للحصول على تعريف.

Length

Integer

مطلوب لعناصر الوسائط الثانوية، بما في ذلك حاوية الفيديو. طول العدد الصحيح الموجب بوحدات البايت للعنصر. من المتوقّع أن تكون عناصر الوسائط بتنسيقها الأصلي بدون تطبيق أي ترميز. قيمة الطول هي الطول الفعلي لوحدات البايت في الملف.

يشير الطول 0 في عناصر الوسائط الثانوية إلى أنّه تمت مشاركة مورد عنصر الوسائط مع عنصر الوسائط السابق. من المتوقع أن يكون الطول 0 في عنصر الوسائط الأساسي.

Padding

Integer

[صور حيّة مستندة إلى JPEG]

اختيارية لعنصر الوسائط الأساسي. سلسلة بسيطة تحتوي على عدد صحيح موجب بالبايت من القيم الإضافية المساحة المتروكة بين نهاية الصورة الأساسية المرمّزة وبداية عنصر الوسائط التالي.

[صور حيّة مستنِدة إلى HEIC/AVIF]

مطلوب لعنصر الوسائط الأساسي. يجب أن تساوي قيمة 8، طول رأس الصورة المتحركة مربّع بيانات الفيديو ("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

يشير إلى أنّ عنصر الوسائط هو حاوية الفيديو. يجب أن تتضمّن الصورة الحيّة عنصرًا واحدًا فقط يحمل هذه الدلالة. يجب أن يكون موقع عنصر الوسائط هذا في نهاية الملف. لا يمكن وضع أي وحدات بايت أخرى بعد إنهاء وحدات البايت الخاصة بهذا العنصر.

الصور الحيّة التي تحتوي على صورة أساسية بدقة HDR فائقة

ووفقًا لقواعد القيمة الدلالية للعنصر المحددة في هذه المواصفات مواصفات صور "دقة HDR فائقة" يجب أن تتضمن الصور الحيّة التي تحتوي على صورة أساسية بدقة HDR فائقة عنصر وسائط يحمل دلال عنصر لـ "GainMap". كذلك، يجب على مؤلفي الصور المتحركة وضع عنصر عنصر getmap قبل عنصر عنصر الفيديو.

السلوك الخاص بالصورة وفقًا لمعيار ISOBMFF

صور حيّة مع مستندة إلى ISOBMFF صور (مثل يجب أن تكون صور HEIC وAVIF) ذات بنية بحيث ينتهي جزء من الملف بـ "بيانات فيديو صور متحركة" من المستوى الأعلى. صُنْدُوق باستخدام دلالات لغة الوصف النحوي المحددة في الفقرة 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[];
}

حيث تكون "البيانات" يحتوي على جميع وحدات بايت الفيديو. القيمة الخاصة "0" غير مسموح به لحجم مربع بيانات فيديو الصور الحيّة. (راجع وفقًا لمعيار ISO/IEC 14496-12:2015: 4.2 لتعريف حجم الفئة لتوسيع Box.)

يجب أن يحدد XMP الخاص بصورة ISOBMFF أيضًا المساحة المتروكة لعنصر الوسائط الأساسي تساوي حجم الفيديو بالبايت عنوان مربّع البيانات، وهو عناوين الحجم والاسم.

يمكنك الاطّلاع على الشكل 1 الذي يوضّح بنية الصندوق هذه لعينة من الحركة المستندة إلى HEIC. الصورة:

رسم تخطيطي خطي يوضّح ترتيب العناصر في ملف حركة HEIC

الشكل 1. رسم توضيحي لمربّعات المستوى الأعلى لنموذج صورة HEIC داخل ملف صورة متحركة HEIC واحد. لاحظ أن ترتيب الصناديق يكون في الغالب توضيح فقط (يُرجى الرجوع إلى المعايير ذات الصلة حول كيفية إنشاء HEIF أو ملفات الفيديو ومع ذلك، فإن "mpvd" ينبغي أن يأتي بعد كل رموز HEIC ومربعات ملفات الصورة.

محتوى حاوية الفيديو

يجب أن يتضمن ملف حاوية الفيديو الملحق بالصورة الأساسية على مقطع فيديو أساسي واحد على الأقل. هذا المقطع الصوتي مطلوب ويحتوي على فيديو مُرمَّز. في AVC HEVC AV1 تشير رسالة الأشكال البيانية درجة الدقة الأساسية لإطار الفيديو غير محددة. وتبلغ مساحة لون الفيديو وقد يختلف عمق البت. على سبيل المثال، قد تحتوي الفيديوهات ذات النطاق العادي الديناميكية على 8 بت والعمق، ومساحة اللون BT.709، مع وظيفة نقل sRGB. أو، قد تحدث مقاطع فيديو بنطاق عالي الديناميكية (HDR) أن تحتوي على عمق 10 بت ومساحة ألوان BT.2100 ونقل HLG أو PQ إلى جانب البيانات الوصفية ذات تنسيق HDR ومسارات البيانات الوصفية.

قد يحتوي ملف حاوية الفيديو على خيار ثانوي واحد عالي الدقة. مقطع فيديو. يجب أن يستخدم القراء محتوياته لعرض بدائل الأساسية الثابتة بترميز JPEG أو صورة HEIC. قد يحتوي هذا المسار على فيديو بعدد منخفض للقطات في الثانية تم ترميزه بتنسيق AVC أو HEVC أو AV1. إطار الفيديو الثانوي ودرجة الدقة غير محددة.

من المتوقع أن تحتوي جميع الإطارات في مسار الفيديو الثانوي على الإطارات المناسبة في مقطع الفيديو الأساسي. كل زوج من الأزواج المقابلة يجب أن تحتوي الإطارات في مسارات الفيديو الأساسية والثانوية على عرض متطابق الطوابع الزمنية. إذا كان هناك إطار مسار ثانوي بدون مقابل أساسي إطار التتبع، يمكن للمشاهدين اختيار إطار مسار أساسي بأقرب الطابع الزمني للعرض التقديمي المطابق كصورة مصغّرة تمثّل ذلك مقطع فيديو ثانوي.

يمكن أن يحتوي ملف حاوية الفيديو على صوت أحادي أو استريو 16 بت اختياري. مقطع صوتي بتردد 44 كيلوهرتز أو 48 كيلوهرتز أو 96 كيلوهرتز وبترميز AAC يجب أن يعرض القرّاء هذا المحتوى. المقطع الصوتي عند عرض مقطع الفيديو الأساسي.

يجب أن يأتي مقطع الفيديو الثانوي دائمًا بعد المقطع الصوتي الأساسي، إذا كان متوفرًا. مقطع فيديو. لا توجد قيود ترتيب أخرى فيما يتعلق بالمسارات الأخرى. تشير رسالة الأشكال البيانية يجب أن يحتوي مقطع الفيديو الأساسي على فهرس مقاطع أقل من فهرس أي مقطع ثانوي مقطع فيديو. أي إذا كان مقطع الفيديو الأساسي يضم رقم المسار 2، يجب أن يحتوي مقطع الفيديو الثانوي على رقم مسار أكبر من أو يساوي 3.

تتبع البيانات الوصفية للفيديو مع نتائج ذكاء الآلة

يمكن للمؤلفين إضافة مسار بيانات وصفية بشكل اختياري إلى ملف حاوية الفيديو باستخدام اكتب "meta". يجب أن يحتوي مسار البيانات الوصفية على عينة واحدة فقط تحتوي على بث بايت بالتنسيق الموضّح في "البنية".

إذا كان مسار البيانات الوصفية موجودًا، فإن إدخال جدول وصف النموذج المسار (أي مربع "stsd" في "mdia.minf.stbl.stsd" بالنسبة إلى "تراك" مربع) على ذرة واحدة تشير إلى عينة من البيانات الوصفية النصية. الإدخال - (أي مربع "ميت"). "ميت" يجب أن يحتوي المربّع على سلسلة من نوع MIME تساوي إلى "application/motionphoto-image-meta".

بناء الجملة

إذا تم تحديد مسار البيانات الوصفية هذا، يجب أن يتكون محتواه من تدفق بايت بالتوافق مع مواصفات MotionPhotoMetadataDescriptor هذه، هنا باستخدام دلالات لغة الوصف النحوي المحددة في الفقرة 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