إنّ الصور الحيّة عبارة عن ملفات فردية تحتوي على صورة ثابتة وفيديو قصير يتضمّن التسجيل الصوتي. ويتيح هذا النوع من الوسائط للمستخدم مشاهدة صورة ثابتة عالية الدقة بالإضافة إلى الفيديو والصوت لالتقاط المشاعر والأجواء التي تم التقاط الصورة بها.
التبعيات
في ما يلي مراجع معيارية لهذه المواصفات:
- كلمات رئيسية لاستخدامها في طلبات التعليقات (RFC) للإشارة إلى مستويات المتطلبات
- T.81 (09/92) الضغط الرقمي والترميز للصور الثابتة المستمرة بالألوان (JPEG)
- ISO/IEC 23008-12:2022 الترميز العالي الكفاءة وتسليم الوسائط في البيئات غير المتجانسة، الجزء 12: تنسيق ملف الصور (HEIC)
- تنسيق ملف الصورة AV1 (AVIF) (AVIF)
- الإصدار 1.0 من تنسيق الصورة بتقنية HDR الفائقة | مطوّرو تطبيقات Android (دقة HDR فائقة)
- مواصفات ISO 16684-1:2011(E) XMP الجزء 1 (XMP)
- مواصفات Adobe XMP، الجزء 3 من مساحة التخزين في الملفات (XMP)
- ISO/IEC 14496-10:2022 ترميز العناصر الصوتية المرئية الجزء 10: الترميز المتقدِّم للفيديو (AVC)
- معيار ISO/IEC 23008-2:2023 للترميز العالي الكفاءة وتسليم الوسائط في البيئات غير المتجانسة الجزء 2: ترميز الفيديو بكفاءة عالية (HEVC)
- مواصفات عملية البث المباشر وفك الترميز في AV1 (AV1)
- الأنظمة حسب ISO/IEC 14496-1:2010 ترميز العناصر الصوتية المرئية - الأنظمة
- تنسيق ملف وسائط ISO/IEC 14496-12:2015 (ISOBMFF)
- ISO/IEC 14496-14:2020 ترميز العناصر الصوتية المرئية الجزء 14: تنسيق ملف MP4 (MP4)
- تنسيق ملف Apple QuickTime (MOV)
المقدّمة
ينطبق استخدام "يجب" و"يجب ألا" و"مطلوب" و"يجب" و"يجب ألا" و"يُنصَح به" و"قد" و "اختياري" هو معيار IETF المحدَّد في RFC2119.
تنسيق الصور الحيّة
تتألف ملفات "الصور الحيّة" من ملف صور ثابتة أساسي، أو JPEG، أو HEIC، أو AVIF، مع إلحاق ملف فيديو ثانوي به. تحتوي الصورة الأساسية على بيانات وصفية للكاميرا XMP تصف كيفية عرض ملف الصورة الثابتة ومحتويات ملف الفيديو، والبيانات الوصفية لحاوية 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 الوصفية الخاصة بملف الصور الثابتة:
الاسم |
Type |
الوصف |
|
كانت هذه السمات جزءًا من مواصفات Microvideo V1. ويتم حذفها وفقًا لهذه المواصفات ويجب تجاهلها في حال توفّرها. على وجه التحديد، يتم استبدال السمة |
|
|
|
0: يشير إلى أنّه يجب عدم التعامل مع الملف كصورة حيّة. 1: يشير إلى أنّه يجب التعامل مع الملف كصورة حيّة. وجميع القيم الأخرى غير معرَّفة ويتم التعامل معها بما يعادل 0. إذا كانت القيمة صفرًا أو سالبًا، سيتم التعامل مع الملف دائمًا على أنّه "صورة غير حيّة"، حتى إذا تم إلحاق الفيديو بالملف فعلاً. وبما أنّ معظم المحرِّرين ذوي الأداء الجيد لا يزال ينتقل باستخدام XMP، قد تظل ملفات الصور الثابتة تساوي 1 المتبقية في هذا الحقل على الرغم من إزالة الفيديو الملحق. وبالتالي، فإنّ هذا الحقل ليس نهائيًا، ويجب أن يتأكّد القرّاء دائمًا من توفّر الفيديو. |
|
|
يشير إلى إصدار تنسيق الملف من "الصور الحيّة". تحدد هذه المواصفات الإصدار "1". |
|
|
قيمة طويلة تمثّل الطابع الزمني للعرض التقديمي (بالميكرو ثانية) لإطار الفيديو المقابل للصورة الثابتة. يمكن أن تكون القيمة -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
قد يحتوي الدليل على عنصر صورة أساسي واحد فقط ويجب أن يكون العنصر الأول في الدليل.
اسم العنصر |
Type |
الوصف |
|
مصفوفة الهياكل المرتبة |
مصفوفة مرتّبة من بنى |
عنصر العنصر
تصف عناصر عنصر الوسائط كيف يجب أن يستخدم التطبيق كل عنصر.
- معرّف الموارد المنتظم (URI) لمساحة الاسم هو
http://ns.google.com/photos/1.0/container/item/
- بادئة مساحة الاسم التلقائية هي
Item
يجب أن يكون عنصر الوسائط الأول هو الصورة الأساسية. يجب أن تحتوي على سمة Mime
تحدّد أحد أنواع MIME للصورة المدرَجة في قيم
نوع MIME للسلعة. يمكن تحديد طول العنصر الأساسي من خلال تحليل الصورة الأساسية استنادًا إلى نوع MIME بدءًا من بداية حاوية الملف.
قد يحتوي عنصر الوسائط الأول على سمة Padding
تحدد مساحة متروكة إضافية بين نهاية الصورة الأساسية المرمّزة وبداية عنصر الوسائط التالي. يمكن أن يحتوي أول عنصر وسائط فقط على السمة Padding
.
يجب أن يحتوي كل عنصر وسائط على سمة Mime
. يجب أن تحتوي عناصر الوسائط الثانوية
أيضًا على سمات الطول.
قد تشارك عناصر الوسائط المتسلسلة بيانات الموارد داخل حاوية الملف. يحدّد
عنصر الوسائط الأول موقع المورد في حاوية الملف،
ويتم ضبط السمة Length
على القيمة 0 لعناصر الوسائط المشتركة اللاحقة في حال كانت
بيانات المورد هي نفسها حاوية.
يتم تحديد موقع موارد عناصر الوسائط في الحاوية من خلال جمع قيم Length
لموارد العناصر الثانوية السابقة مع طول ترميز الصورة الأساسية بالإضافة إلى Padding
في حال تحديدها.
اسم السمة |
Type |
الوصف |
|
|
قيمة مطلوبة سلسلة بسيطة تشير إلى نوع MIME لعنصر الوسائط في الحاوية. |
|
|
قيمة مطلوبة سلسلة بسيطة تشير إلى المعنى الخاص بالتطبيق لعنصر الوسائط. راجِع قسم "القيم الدلالية للسلعة" للحصول على تعريف. |
|
|
مطلوب لعناصر الوسائط الثانوية، بما في ذلك حاوية الفيديو. طول العدد الصحيح الموجب بوحدات البايت للعنصر. من المتوقّع أن تكون عناصر الوسائط بتنسيقها الأصلي بدون تطبيق أي ترميز. قيمة الطول هي الطول الفعلي لوحدات البايت في الملف. يشير الطول 0 في عناصر الوسائط الثانوية إلى أنّه تمت مشاركة مورد عنصر الوسائط مع عنصر الوسائط السابق. من المتوقع أن يكون الطول 0 في عنصر الوسائط الأساسي. |
|
|
[صور حيّة مستندة إلى JPEG] اختيارية لعنصر الوسائط الأساسي. سلسلة بسيطة تحتوي على عدد صحيح موجب بالبايت من المساحة المتروكة الإضافية بين نهاية الصورة الأساسية المرمّزة وبداية عنصر الوسائط التالي. [صور حيّة مستنِدة إلى HEIC/AVIF] مطلوب لعنصر الوسائط الأساسي. يجب أن تكون القيمة مساوية لـ 8، وهو طول رأس مربع بيانات الفيديو للصور الحيّة ("mpvd"). |
العنصر:قيم نوع MIME
تحدّد السمة Item:Mime
نوع MIME لكل عنصر من عناصر الوسائط.
القيمة |
الوصف |
|
صورة JPEG |
|
صورة HEIC |
|
صورة AVIF |
|
حاوية MP4 |
|
حاوية MOV |
العنصر:القيم الدلالية
تحدد السمة Item:Semantic
المعنى الخاص بالتطبيق لكل
عنصر وسائط في دليل الحاوية.
|
الوصف |
|
يشير إلى أن عنصر الوسائط هو الصورة الأساسية الجاهزة للعرض في الحاوية. يجب أن تتضمّن الصورة الحيّة عنصرًا واحدًا فقط يحمل هذه الدلالة. |
|
يشير إلى أنّ عنصر الوسائط هو حاوية الفيديو. يجب أن تتضمّن الصورة الحيّة عنصرًا واحدًا فقط يحمل هذه الدلالة. يجب أن يكون موقع عنصر الوسائط هذا في نهاية الملف. لا يمكن وضع أي وحدات بايت أخرى بعد إنهاء وحدات البايت الخاصة بهذا العنصر. |
الصور الحيّة التي تحتوي على صورة أساسية بدقة HDR فائقة
وفقًا لقواعد القيمة الدلالية الخاصة بالعنصر والمحدّدة في هذه المواصفات وفي
مواصفات صورة "دقة HDR فائقة"،
يجب أن تتضمّن الصور الحيّة التي تحتوي على صورة أساسية بتقنية Ultra HDR أيضًا الوسائط التي تحتوي على دلالات "GainMap"
. كما يجب أن يضع كاتبو الصور المتحركة على كتّاب ترميز الصور المتحركة
عنصر عنصر الالتقاط قبل عنصر الفيديو.
السلوك الخاص بالصورة وفقًا لمعيار 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:
الشكل 1. رسم توضيحي لمربعات المستوى الأعلى لنموذج صورة HEIC داخل ملف صورة متحركة HEIC واحد. يُرجى العلم أنّ ترتيب المربعات هو للتوضيح فقط (يُرجى الرجوع إلى المعايير ذات الصلة حول كيفية إنشاء ملفات HEIF أو ملفات الفيديو)؛ ومع ذلك، يجب أن يأتي مربّع "mpvd" بعد جميع مربّعات ملفات صور HEIC.
محتوى حاوية الفيديو
يجب أن يتضمن ملف حاوية الفيديو الذي يتم إلحاقه بالصورة الأساسية مقطعًا صوتيًا أساسيًا واحدًا على الأقل. هذا المقطع الصوتي مطلوب ويحتوي على فيديو بترميز AVC أو HEVC أو AV1. درجة الدقة الأساسية لإطار الفيديو غير محددة. قد تختلف مساحة لون الفيديو ووظيفة النقل وعمق البت. على سبيل المثال، قد تكون الفيديوهات ذات التنسيق SDR بعمق 8 بت ومساحة ألوان BT.709 بعمق 8 بت، مع وظيفة نقل 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" بالنسبة إلى المربّع "trak") على حزمة واحدة تشير إلى إدخال نموذج بيانات وصفية نصية، (أي مربّع "ميت"). يجب أن يحتوي مربّع "ميت" على سلسلة من نوع 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