yuv4mpeg(5) دفترچه راهنمای MJPEG Tools yuv4mpeg(5)

yuv4mpeg - قالب ویدیویی خام برای mjpegtools

بسیاری از ابزارهای mjpegtools از طریق لوله‌ها (pipes) با یکدیگر ارتباط برقرار می‌کنند و به عنوان فیلتر (یا منابع یا مقاصد) عمل می‌کنند. قالب داده‌های ویدیویی مورد استفاده در این لوله‌ها به عنوان "YUV4MPEG" یا دقیق‌تر "YUV4MPEG2" نامیده می‌شود. (این قالب در نسخه v1.5.x این ابزارها گسترش یافت و مدون شد.)

ساختار پایه شامل یک هدر استریم است که به دنبال آن تعداد نامحدودی فریم قرار می‌گیرد. هر فریم به خودی خود شامل یک هدر و به دنبال آن داده‌های ویدیویی است. هدرها متن ASCII تقریباً خوانا برای انسان هستند، اما داده‌های ویدیویی باینری ساده با اندازه بایت می‌باشند.

توزیع mjpegtools دارای یک کتابخانه C به نام libmjpegutils است که شامل توابعی برای کار با استریم‌های YUV4MPEG2 می‌باشد. توصیه می‌کنیم در صورت امکان به جای نوشتن کدهای خود، از این کتابخانه استفاده کنید. برای مشاهده توضیحات این توابع به فایل هدر "yuv4mpeg.h" مراجعه کنید.

اهداف طراحی:

تجزیه آسان (parse) هم از طریق C و هم sh.
توسعه‌پذیر؛ افزودن آسان پارامترهای جدید با حفظ سازگاری عقبرو (backwards compatibility).
ارتقای ساده از قالب اصلی "YUV4MPEG".

معایب:

هدرهای فریم اندازه ثابتی ندارند، بنابراین استریم‌ها قابلیت پرش (seekable) ندارند.

توضیح دقیق قالب استریم YUV4MPEG2 به شرح زیر است:

STREAM شامل موارد زیر است:

-
یک STREAM-HEADER
-
تعداد نامحدودی از FRAMEها

STREAM-HEADER شامل موارد زیر است:

-
رشته جادویی "YUV4MPEG2"
-
تعداد نامحدودی از TAGGED-FIELDها، که قبل از هر کدام یک نویسه جداکننده ' ' (فاصله تکی) قرار دارد
-
یک پایان‌دهنده خط تک '\n'

FRAME شامل موارد زیر است:

-
یک FRAME-HEADER
-
به میزان "length" بایت (octet) داده تصویر صفحه‌ای (planar) با فرمت YCbCr 4:2:0 (اگر استریم درهم‌بافته (interlaced) باشد، دو فیلد در هر فریم با ترتیب فضایی مناسب در هم آمیخته می‌شوند.)

FRAME-HEADER شامل موارد زیر است:

-
رشته جادویی "FRAME"
-
تعداد نامحدودی از TAGGED-FIELDها، که قبل از هر کدام یک نویسه جداکننده ' ' (فاصله تکی) قرار دارد
-
یک پایان‌دهنده خط تک '\n'

TAGGED-FIELD شامل موارد زیر است:

-
یک نویسه ASCII تکی به عنوان برچسب (tag)
-
مقدار VALUE (که فاقد فضای خالی است)

VALUE شامل موارد زیر است:

-
RATIO، یا
-
عدد صحیح (نمایش ASCII در مبنای ۱۰)، یا
-
یک نویسه ASCII منفرد، یا
-
رشته (چند نویسه ASCII)

RATIO شامل موارد زیر است:

-
صورت کسر (عدد صحیح ASCII در مبنای ۱۰)
-
علامت ':' (دو نقطه)
-
مخرج کسر (عدد صحیح ASCII در مبنای ۱۰)

برچسب‌های هدر به سه دسته تقسیم می‌شوند: اختیاری (optional)، الزامی (required) و دارای پیش‌فرض (has-default). برچسب‌های اختیاری کاملاً اختیاری هستند و ممکن است از هدر حذف شوند. برچسب‌های الزامی باید در هدر وجود داشته باشند. برچسب‌های دارای پیش‌فرض دارای یک مقدار پیش‌فرض هستند که در صورت عدم وجود برچسب در نظر گرفته می‌شود. مستقل از این دسته‌بندی‌ها، برخی از برچسب‌ها مقدار "ناشناخته" (unknown) را مجاز می‌دانند و برخی دیگر اجازه نمی‌دهند.

برچسب‌های پشتیبانی‌شده برای STREAM-HEADER:

W[integer] - عرض فریم بر حسب پیکسل، باید بزرگتر از ۰ باشد (الزامی)

H[integer] - ارتفاع فریم بر حسب پیکسل، باید بزرگتر از ۰ باشد (الزامی)

C[string] - زیرنمونه‌گیری کروما، قالب داده تصویر (دارای پیش‌فرض)


420jpeg  - 4:2:0 با موقعیت‌دهی JPEG/MPEG-1 (پیش‌فرض)
420mpeg2 - 4:2:0 با موقعیت‌دهی MPEG-2
420paldv - 4:2:0 با موقعیت‌دهی PAL-DV
411  - 4:1:1، هم‌مکان (cosited)
422  - 4:2:2، هم‌مکان (cosited)
444  - 4:4:4 (بدون زیرنمونه‌گیری)
444alpha - 4:4:4 همراه با کانال آلفا
mono  - فقط صفحه لونا (Y')

I[char] - مشخصات درهم‌بافی: (دارای پیش‌فرض)


? - نامشخص (پیش‌فرض)
p - پیش‌رونده/هیچ‌کدام
t - اول فیلد بالا (top-field-first)
b - اول فیلد پایین (bottom-field-first)
m - حالت ترکیبی: به برچسب 'I' در هدر فریم مراجعه شود

F[ratio] - نرخ فریم (دارای پیش‌فرض 0:0 == نامشخص)

A[ratio] - نسبت ابعاد نمونه (دارای پیش‌فرض 0:0 == نامشخص)

X[string] - 'متاداده' (اختیاری؛ پردازش‌نشده، اما منتقل می‌شود)

برچسب‌های پشتیبانی‌شده کنونی برای FRAME-HEADER:

I[string] - فریم‌بندی و نمونه‌گیری (الزامی فقط و فقط در صورتی که Im در هدر استریم وجود داشته باشد). مقدار یک رشته از سه نویسه "xyz" است که معانی زیر را دارند:


x: نحوه نمایش فریم
t - اول فیلد بالا
T - اول فیلد بالا و تکرار
b - اول فیلد پایین
B - اول فیلد پایین و تکرار
1 - فریم پیش‌رونده تکی
2 - فریم پیش‌رونده دوگانه (تکرار)
3 - فریم پیش‌رونده سه‌گانه (تکرار)
y: نمونه‌گیری زمانی فریم
p - پیش‌رونده (فیلدها در یک زمان نمونه‌برداری می‌شوند)
i - درهم‌بافته (فیلدها در زمان‌های متفاوت نمونه‌برداری می‌شوند)
z: زیرنمونه‌گیری کرومای فریم
p - پیش‌رونده (زیرنمونه‌گیری روی کل فریم)
i - درهم‌بافته (هر فیلد به طور مستقل زیرنمونه‌گیری می‌شود)
? - نامشخص (تنها برای زیرنمونه‌گیری‌های غیر 4:2:0 مجاز است)

X[string] - 'متاداده' (اختیاری؛ پردازش‌نشده، اما منتقل می‌شود)

توجه داشته باشید که یک برنامه فیلتر باید تمام برچسب‌های "X" را وفادارانه از لوله ورودی به لوله خروجی منتقل کند (مگر اینکه البته خودش از یکی از آن برچسب‌ها استفاده کند). کتابخانه ارائه شده در صورتی که توابع y4m_copy_stream_info() و y4m_copy_frame_info() به درستی استفاده شوند، این کار را به طور خودکار انجام خواهد داد.

تمام داده‌های تصویر در فضای رنگی CCIR-601 Y'CbCr هستند که به صورت صفحه به صفحه در ترتیب ردیف‌محور (row-major) ارائه می‌شوند. هر نمونه درون هر صفحه دارای اندازه یک بایت (۸ بیت) است. هنگامی که همه صفحه‌ها وجود دارند، به ترتیب Y' و Cb و Cr ارسال می‌شوند که احتمالاً یک صفحه ماسک شفافیت/آلفا نیز به دنبال آن‌ها قرار می‌گیرد (برای فرمت کرومای 444alpha). داده‌های کانال آلفا از همان محدوده کانال روشنایی Y' پیروی می‌کنند: شفافیت کامل در ۱۶ و کدر بودن کامل در ۲۳۵ قرار دارد.

تمام صفحه‌های Y' و آلفا شامل (height X width) بایت هستند. اندازه صفحه‌های کروما به حالت زیرنمونه‌گیری بستگی دارد:

-
4:4:4 - (height X width) بایت
-
4:2:2 - (height X width) / 2 بایت
-
4:1:1 - (height X width) / 4 بایت
-
4:2:0 - (height X width) / 4 بایت

برای جزئیات بیشتر درباره خواندن و نوشتن فایل‌های yuv4mpeg سورس‌کدها را مطالعه کنید - برنامه‌های کاربردی زیادی وجود دارند، برخی ساده و برخی پیچیده، که می‌توانند به عنوان راهنما عمل کنند.

mjpegtools(1), yuv4mpeg.h

حق نشر (Copyright) این صفحه راهنما متعلق به Matthew J. Marjanovic در سال 2004 است.

25 نوامبر 2002 MJPEG Tools Team