Ppmtompeg User Manual(0) Ppmtompeg User Manual(0)

ppmtompeg - کدگذاری یک جریان بیتی MPEG-1

ppmtompeg [options] parameter-file

این برنامه بخشی از Netpbm(1) است.

ppmtompeg یک جریان ویدیویی MPEG-1 تولید می‌کند. MPEG-1 اولین روش بزرگ فشرده‌سازی ویدیو است، و همان چیزی است که در Video CDها (VCD) استفاده می‌شد. منشأ ppmtompeg به سال ۱۹۹۵ بازمی‌گردد. DVD از روش پیشرفته‌تری یعنی MPEG-2 استفاده می‌کند. یک روش حتی جدیدتر نیز به نام MPEG-4 وجود دارد که Divx نیز نامیده می‌شود. نمی‌دانم کجا می‌توان کاربرد آن را یافت.

از نظر فنی میان یک روش فشرده‌سازی برای ویدیو و یک فرمت واقعی فایل (جریان) برای یک فیلم تفاوت وجود دارد، و نمی‌دانم آیا می‌توان به‌درستی گفت که فرمت جریانی که ppmtompeg تولید می‌کند MPEG-1 است یا خیر.

ابزار Mencoder از بسته Mplayer احتمالاً برای اکثر نیازهای تولید فرمت ویدیویی برتر است، اگر تنها به این دلیل نباشد که محبوب‌تر است.

کتابخانه برنامه‌نویسی PM2V جریان‌های MPEG-2 تولید می‌کند.

از Mplayer (که بخشی از Netpbm نیست) برای انجام تبدیل معکوس استفاده کنید: ایجاد مجموعه‌ای از فایل‌های PNM از یک جریان MPEG.

param_file یک فایل پارامتر است که شامل فهرستی از فایل‌های ورودی و سایر پارامترها است. این فایل در زیر با جزئیات شرح داده شده است.

برای درک این برنامه، باید درباره فرمت پیچیده MPEG-1 اطلاعاتی داشته باشید. یکی از منابع اطلاعات درباره این فرمت استاندارد، بخش Introduction to MPEG در Compression FAQ است.

گزینه‌های -gop، -combine_gops، -frames و -combine_frames همگی مانعة‌الجمع هستند.

این گزینه باعث می‌شود ppmtompeg آماری را که در خروجی استاندارد می‌نویسد، به انتهای فایل stat_file نیز اضافه کند. این آمار از اختصارات زیر استفاده می‌کند: بیت بر بلوک (bpb)، بیت بر فریم (bpf)، ثانیه بر فریم (spf) و بیت بر ثانیه (bps).

این آمار شامل تعداد فریم‌های I، P و B و اطلاعاتی درباره فشرده‌سازی و کیفیت است.

باعث می‌شود ppmtompeg زمان باقی‌مانده را زودتر از هر num_seconds ثانیه یک‌بار گزارش نکند (مگر اینکه تخمین زمان افزایش یابد، که نزدیک به شروع اجرا رخ خواهد داد). مقدار منفی به ppmtompeg می‌گوید که اصلاً گزارش ندهد. مقدار 0 پیش‌فرض است (یک‌بار پس از هر فریم گزارش می‌دهد). توجه داشته باشید که زمان باقی‌مانده یک تخمین است و زمان صرف‌شده برای خواندن فریم‌ها را در نظر نمی‌گیرد.
باعث می‌شود ppmtompeg کاملاً بی‌صدا اجرا شود، به طوری که تنها خروجی صفحه، خطاها باشند. این گزینه به‌ویژه هنگام خواندن ورودی از stdin مفید است. معادل گزینه مشترک -quiet در اکثر برنامه‌های دیگر Netpbm است.
این گزینه از چاپ خط خلاصه برای هر فریم توسط ppmtompeg جلوگیری می‌کند.
ppmtompeg را وادار می‌کند تا از نسخه دقیق‌تر، اما از نظر محاسباتی سنگین‌تر DCT استفاده کند.
باعث می‌شود ppmtompeg تنها GOP شماره‌گذاری‌شده را کدگذاری کند (اولین GOP عدد 0 است). فایل پارامتر همانند استفاده معمولی است. فایل خروجی همان فایل خروجی معمولی با پسوند .gop.gop_num خواهد بود. ppmtompeg هیچ اطلاعات توالی خروجی نمی‌دهد.
باعث می‌شود ppmtompeg صرفاً تعدادی فایل GOP را در یک جریان خروجی واحد MPEG ترکیب کند. ppmtompeg یک سرآیند و پس‌آیند توالی درج می‌کند. در این حالت، فایل پارامتر تنها نیاز دارد شامل مقدار SIZE، یک فایل خروجی و شاید فهرستی از فایل‌های GOP ورودی باشد (به زیر مراجعه کنید).

اگر فهرستی از فایل‌های GOP ورودی ارائه ندهید، آنگاه ppmtompeg فرض می‌کند که از همان فایل پارامتری استفاده می‌کنید که هنگام ایجاد ورودی (با گزینه -gop) استفاده کرده‌اید و نام‌های فایل gop متناظر را خودش محاسبه می‌کند. اگر این‌طور نیست، می‌توانید فایل‌های GOP ورودی را به همان روش فایل‌های ورودی معمولی مشخص کنید -- جز اینکه به جای استفاده از INPUT_DIR، INPUT و END_INPUT، از GOP_INPUT_DIR، GOP_INPUT و GOP_END_INPUT استفاده کنید. اگر هیچ فایل ورودی GOP مشخص نشده باشد، پیش‌فرض استفاده از نام فایل خروجی با پسوند .gop.gop_num، با شروع gop_num از 0، به عنوان فایل‌های ورودی است.

بنابراین، مگر اینکه فایل‌های GOP را از منابع مختلف ترکیب و جور کنید، می‌توانید به‌سادگی از همان فایل پارامتر برای ایجاد فایل‌های GOP (-gop) و سپس تبدیل آن‌ها به یک جریان MPEG (-combine_gops) استفاده کنید.

این گزینه باعث می‌شود ppmtompeg تنها فریم‌های شماره‌گذاری‌شده از first_frame تا last_frame (شامل هر دو) را کدگذاری کند. فایل پارامتر همانند حالت استفاده معمولی است. خروجی در فایل‌های جداگانه قرار خواهد گرفت، یک فایل برای هر فریم، با نام فایل خروجی معمولی همراه با پسوند .frame.frame_num. هیچ اطلاعات سرآیند GOP خروجی داده نمی‌شود. (بنابراین، فایل پارامتر نیازی به داشتن مقدار GOP_SIZE ندارد).

بعداً برای ترکیب این فریم‌ها در یک جریان MPEG از ppmtompeg -combine_frames استفاده کنید.

این گزینه باعث می‌شود ppmtompeg صرفاً برخی فریم‌های مجزای MPEG (مانند فریم‌هایی که ممکن است در اجرای قبلی ppmtompeg -frames ایجاد کرده باشید) را در یک جریان MPEG واحد ترکیب کند. سرآیندهای توالی و GOP به طور مناسب درج می‌شوند. در این حالت، فایل پارامتر تنها نیاز دارد شامل مقدار SIZE، مقدار GOP_SIZE، یک فایل خروجی و شاید فهرستی از فایل‌های فریم باشد (به زیر مراجعه کنید).

فایل پارامتر می‌تواند فایل‌های فریم ورودی را به همان روش فایل‌های ورودی معمولی مشخص کند -- جز اینکه به جای استفاده از INPUT_DIR، INPUT و END_INPUT، از FRAME_INPUT_DIR، FRAME_INPUT و FRAME_END_INPUT استفاده کنید. اگر هیچ فایل فریم ورودی مشخص نشده باشد، پیش‌فرض استفاده از نام فایل خروجی با پسوند .frame.frame_num، با شروع frame_num از 0، به عنوان فایل‌های ورودی است.

این گزینه باعث می‌شود ppmtompeg هر فرایند دوردست (remote) را با اولویت پایین (nice) اجرا کند. (این مورد تنها در صورتی مرتبط است که ppmtompeg را در حالت موازی اجرا کنید. در غیر این صورت، هیچ فرایند دوردستی وجود ندارد). به “man nice” مراجعه کنید..TP -max_machines num_machines این گزینه باعث می‌شود ppmtompeg حداکثر از num_machines ماشین به عنوان خدمتگزار (slave) برای استفاده در کدگذاری موازی بهره ببرد.
این گزینه باعث می‌شود ppmtompeg نسبت سیگنال به نویز (SNR) را در آمار گزارش‌شده لحاظ کند. برای هر فریم SNR (Y U V) و اوج SNR (Y U V) را چاپ می‌کند. در بخش خلاصه، تنها میانگین‌های روشنایی (Y) را چاپ می‌کند. مقدار SNR به صورت 10*log(واریانس اصلی/واریانس خطا) تعریف می‌شود. مقدار اوج SNR به صورت 20*log(255/RMSE) تعریف می‌شود. توجه داشته باشید که با استفاده از این گزینه، سرعت اجرای ppmtompeg کمی کاهش می‌یابد.
این گزینه باعث می‌شود ppmtompeg میانگین مربعات خطا (MSE) را به ازای هر بلوک گزارش کند. همچنین کیفیت تصاویر نیز به‌طور خودکار گزارش می‌شود، بنابراین دیگر نیازی به مشخص کردن -snr نخواهد بود.
این گزینه باعث می‌شود ppmtompeg اطلاعات نرخ بیت را در فایل rate_file بنویسد. اطلاعات نرخ بیت شامل بیت بر فریم و همچنین بیت در بازه فریم I تا فریم I بعدی است.
این گزینه باعث می‌شود ppmtompeg هیستوگرامی از بردارهای حرکت را به عنوان بخشی از آمار چاپ کند. سه هیستوگرام وجود دارد -- یکی برای فریم‌های P، یکی برای بردارهای حرکت رو به جلوی فریم B، و یکی برای بردارهای حرکت رو به عقب فریم B.

خروجی به صورت یک ماتریس است که هر مدخل آن متناظر با یک بردار حرکت در پنجره جستجو است. مرکز ماتریس نشان‌دهنده بردارهای حرکت (0,0) است.

این گزینه باعث می‌شود ppmtompeg پیام‌هایی را که ارتباط بین ماشین‌ها را هنگام اجرای ppmtompeg در حالت موازی شرح می‌دهند، در خروجی استاندارد چاپ کند.
این گزینه باعث می‌شود ppmtompeg پیام‌هایی را که روند پیشرفت تبدیل در ماشین‌های مختلف را هنگام اجرای ppmtompeg در حالت موازی شرح می‌دهند، در خروجی استاندارد چاپ کند.

فایل پارامتر باید حاوی خطوط زیر باشد (مگر در هنگام استفاده از گزینه‌های -combine_gops یا -combine_frames):

این عبارت الگو (توالی) فریم‌های I، فریم‌های P و فریم‌های B را مشخص می‌کند. pattern صرفاً توالی‌ای از حروف I، P و B بدون هیچ فاصله‌ای بین آن‌ها است. مثال:
PATTERN IBBPBBPBBPBBPBB

ببینید: فریم‌های I، فریم‌های P، فریم‌های B .

نام فایلی را مشخص می‌کند که جریان MPEG خروجی در آن قرار می‌گیرد.
این عبارت مشخص می‌کند تصاویر ورودی (فریم‌ها) از کجا می‌آیند. اگر هر فریم در یک فایل جداگانه باشد، directory پوشه‌ای است که همه آن‌ها در آن قرار دارند. برای اشاره به دایرکتوری جاری می‌توانید از . استفاده کنید. یک directory تهی (null) به دایرکتوری ریشه درخت فایل‌های سیستم اشاره دارد.

برای اینکه ppmtompeg همه فریم‌ها را به صورت ترتیبی از ورودی استاندارد بخواند، مشخص کنید:

INPUT_DIR stdin
پس از این خط باید فهرستی از فایل‌های ورودی (به ترتیب نمایش) و سپس خط END_INPUT قرار گیرد.

سه نوع خط بین INPUT و END_INPUT می‌تواند قرار گیرد. نخست، یک خط ممکن است صرفاً نام یک فایل ورودی باشد. دوم، خط می‌تواند به شکل single_star_expr [x-y] باشد. single_star_expr می‌تواند یک نویسه * در خود داشته باشد. این نویسه با تمامی اعداد بین x و y (شامل هر دو) جایگزین می‌شود. برای مثال، خط tennis*.ppm [12-15] به فایل‌های tennis12.ppm، tennis13.ppm، tennis14.ppm و tennis15.ppm اشاره دارد.

همچنین پر کردن یکنواخت با صفر (zero-padding) نیز اعمال می‌شود. برای مثال، خط football.*.ppm [001-130] به فایل‌های football.001.ppm، football.002.ppm، ...، football.009.ppm، football.010.ppm، ... و football.130.ppm اشاره دارد.

نوع سوم خط به این صورت است: single_star_expr [x-y+s]، که در آن با خط دقیقاً مشابه بالا رفتار می‌شود، به جز اینکه گام پرش به اندازه s خواهد بود. بنابراین، خط football.*.ppm [001-130+4] به فایل‌های football.001.ppm، football.005.ppm، football.009.ppm، football.013.ppm و غیره اشاره دارد.

علاوه بر این، یک خط می‌تواند یک دستور شل را برای اجرا مشخص کند تا خطوطی تولید شوند که به شیوه شرح‌داده‌شده در بالا تفسیر گردند؛ گویی که آن خطوط به جای دستور مستقیماً در فایل پارامتر قرار داشتند. مانند Bourne Shell، از بک‌تیک‌ها استفاده کنید، به این صورت:

`cat myfilelist`

اگر ورودی از ورودی استاندارد باشد (طبق دستور INPUT_DIR)، ppmtompeg بلوک INPUT/END_INPUT را نادیده می‌گیرد، اما این بلوک همچنان باید وجود داشته باشد.


JPEG | JMOVIE} ppmtompeg باید در نخستین گام پردازش، تمام فایل‌های ورودی را به یکی از فرمت‌های زیر تبدیل کند: PNM، YUV، JPEG(v4) یا JMOVIE. (اگر فایل‌های ورودی شما از پیش در یکی از این فرمت‌ها باشند، تبدیل ممکن است بسیار ناچیز یا بدون تغییر باشد). این خط مشخص می‌کند کدام‌یک از این چهار فرمت مد نظر است. PPM در واقع زیرمجموعه‌ای از PNM است. مشخص‌سازی جداگانه آن به جهت سازگاری با گذشته مجاز است. در برنامه‌های جدید به جای PPM از PNM استفاده کنید.
باید نحوه تبدیل یک فایل به فرمت پایه فایل را مشخص کنید. اگر هیچ تبدیلی لازم نباشد، صرفاً می‌نویسید:
INPUT_CONVERT *

در غیر این صورت، conversion_command یک دستور شل است که باعث می‌شود تصویری با فرمت مشخص‌شده توسط BASE_FILE_FORMAT در خروجی استاندارد نوشته شود. ppmtompeg این دستور را به ازای هر خط بین INPUT و END_INPUT (که معمولاً، ولی نه لزوماً، نام یک فایل است) یک بار اجرا می‌کند. در دستور تبدیل، ppmtompeg هر '*' را با محتوای آن خط جایگزین می‌کند.


اگر تعدادی فایل gif داشتید، می‌توانید بنویسید:

INPUT_CONVERT giftopnm *


اگر تعدادی فایل جداگانه a.Y، a.U و a.V دارید (که در آن‌ها نمونه‌برداری فرعی یا subsample از U و V از پیش انجام شده است)، می‌توانید بنویسید:

     INPUT_CONVERT cat *.Y *.U *.V
تبدیل ورودی هنگام دریافت ورودی از stdin مجاز نیست، بنابراین همان‌طور که در بالا توضیح داده شد از
     INPUT_CONVERT *

استفاده کنید.

مقادیر width و height پهنا و ارتفاع هر فریم را بر حسب پیکسل مشخص می‌کنند.

هنگامی که ppmtompeg بتواند این اطلاعات را از فایل‌های تصویر ورودی به دست آورد، پارامتر SIZE را نادیده می‌گیرد و می‌توانید آن را حذف کنید.

هنگامی که فایل‌های تصویر در قالب YUV باشند، فایل‌ها حاوی اطلاعات ابعاد نیستند، بنابراین SIZE الزامی است.

هنگامی که ppmtompeg در حالت موازی اجرا می‌شود، همهٔ فرایندها در شبکه به فایل‌های تصویر دسترسی ندارند، بنابراین SIZE الزامی است و باید ابعادی مشابه با فایل‌های تصویر ورودی مشخص کند.

این یک مترادف منسوخ برای SIZE است.

EYUV | pattern} این دستور تنها زمانی معنا دارد که BASE_FILE_FORMAT قالب YUV را تعیین کرده باشد، و در آن صورت الزامی است. این گزینه زیرقالب ردهٔ YUV را مشخص می‌کند.
مقدار n تعداد فریم‌ها در یک گروه تصاویر (Group of Pictures یا GOP) است. با این استثنا که چون یک GOP باید با یک فریم I شروع شود، ppmtompeg تا جای ممکن طول GOP را از n بیشتر می‌کند تا GOP بعدی بتواند با یک فریم I آغاز گردد.

به‌طور معمول، منطقی است که اندازهٔ GOP خود را مضربی از طول الگوی خود قرار دهید (طول الگو توسط دستور PATTERN در فایل پارامتر تعیین می‌شود).

ببینید Group Of Pictures .

مقدار n تقریباً تعداد برش‌ها در هر فریم است. توجه داشته باشید که حداقل یک پخش‌کنندهٔ MPEG در صورتی که برش‌ها از سمت چپ تصویر شروع نشوند ممکن است خطا دهد. برای اطمینان از رخ ندادن این مشکل، مطمئن شوید که تعداد سطرها بر SLICES_PER_FRAME بخش‌پذیر باشد.
استفاده از بردارهای حرکتی نیم‌پیکسلی، یا صرفاً تمام‌پیکسلی. معمولاً مهم است که از بردارهای حرکتی نیم‌پیکسلی استفاده کنید، زیرا هم به کیفیت بهتر و هم به فشرده‌سازی بهتری می‌انجامد.
استفاده از محدودهٔ جستجوی n پیکسل در هر یک از چهار جهت از پیکسل مورد نظر. (بنابراین پنجرهٔ جستجو مربعی با ضلع n*2 پیکسل است).

SUBSAMPLE | LOGARITHMIC} این دستور به ppmtompeg می‌گوید که از چه نوع روش جستجویی (الگوریتم) برای فریم‌های P استفاده کند. شما ترکیب مورد نظر خود از سرعت و فشرده‌سازی را انتخاب می‌کنید. گزینهٔ EXHAUSTIVE بهترین فشرده‌سازی را ارائه می‌دهد، اما LOGARITHMIC سریع‌ترین است. TWOLEVEL یک جستجوی تمام‌پیکسلی همه‌جانبه است که به دنبال آن یک جستجوی محلی نیم‌پیکسلی در اطراف بهترین بردار تمام‌پیکسلی انجام می‌شود (گزینهٔ PIXEL برای این روش جستجو نادیده گرفته می‌شود).
این دستور به ppmtompeg می‌گوید که از چه نوع روش جستجویی (الگوریتم) برای فریم‌های B استفاده کند. روش SIMPLE به معنای یافتن بهترین بردارهای رو به جلو و رو به عقب، و سپس درون‌یابی است. روش CROSS2 به این معناست که آن دو بردار را پیدا کرده، سپس بررسی کند کدام بردار رو به عقب بیشترین همخوانی را با بهترین بردار رو به جلو دارد، و برعکس. گزینهٔ EXHAUSTIVE یک جستجوی n به توان دو (n-squared) انجام می‌دهد و در مقایسه با روش‌های دیگر بسیار کند است (سرعت CROSS2 حدود نصف سرعت SIMPLE است).
استفاده از n به عنوان qscale برای فریم‌های I.
ببینید Qscale .
استفاده از n به عنوان qscale برای فریم‌های P.
ببینید Qscale .
استفاده از n به عنوان qscale برای فریم‌های B.
ببینید Qscale .
این دستور مشخص می‌کند که ppmtompeg هنگام محاسبهٔ بردارهای حرکتی از تصاویر اصلی استفاده کند یا از تصاویر دیکودشده. استفاده از تصاویر دیکودشده دقیق‌تر است و باید کیفیت پخش خروجی را افزایش دهد، اما باعث طولانی‌تر شدن زمان کدگذاری می‌شود و به نظر می‌رسد فشرده‌سازی ضعیف‌تری ارائه دهد. همچنین پیچیدگی‌هایی در کدگذاری موازی ایجاد می‌کند (به بخش مربوط به کدگذاری موازی مراجعه کنید). یک راه‌حل میانه این است که در اینجا ORIGINAL را انتخاب کنید و اگر کیفیت به اندازهٔ کافی مناسب نیست، qscale را کاهش دهید (به QSCALE مراجعه کنید).

اصلی یا دیکودشده؟ (نرمال‌شده)

Reference Compression Speed Quality I Quality P Quality B
Decoded 1000 1000 1000 969 919
Original 885 1373 1000 912 884

خطوط زیر اختیاری هستند:

این دستور منسوخ شده است و هیچ کاری انجام نمی‌دهد.

پیش از Netpbm 10.26 (ژانویهٔ ۲۰۰۵)، ppmtompeg فریم‌های B انتهایی فیلم را حذف می‌کرد، زیرا یک فیلم نمی‌تواند با یک فریم B به پایان برسد. (ببینید I Frames, P Frames, B Frames .) برای جلوگیری از رخ دادن این اتفاق و دستیابی به همان عملکردی که ppmtompeg امروزه دارد، باید FORCE_ENCODE_LAST_FRAME را مشخص می‌کردید.

این دستور یک جدول کوانتیزاسیون غیردرون‌فریمی (non-intra) سفارشی را مشخص می‌کند. اگر این دستور را مشخص نکنید، ppmtompeg از جدول کوانتیزاسیون غیردرون‌فریمی پیش‌فرض استفاده می‌کند.

۸ خطی که بلافاصله پس از NIQTABLE می‌آیند، جدول کوانتیزاسیون را مشخص می‌کنند. هر خط یک سطر جدول را تعریف کرده و شامل ۸ عدد صحیح جداشده با فاصله است که ستون‌های جدول را تشکیل می‌دهند..TP IQTABLE این عبارت مشابه NIQTABLE است، اما برای جدول کوانتیزاسیون درون‌فریمی (intra quantization table) کاربرد دارد.

این عبارت نسبت تصویر (aspect ratio) را تعیین می‌کند تا ppmtompeg آن را در خروجی MPEG درج کند. کاربرد دقیق این مورد مشخص نیست.

مقدار ratio باید یکی از مقادیر 1.0، 0.6735، 0.7031، 0.7615، 0.8055، 0.8437، 0.8935، 0.9157، 0.9815، 1.0255، 1.0695، 1.0950، 1.1575 یا 1.2015 باشد.

این عبارت نرخ فریم (frame rate) را مشخص می‌کند تا ppmtompeg آن را در خروجی MPEG درج کند. برخی پخش‌کننده‌ها از این مقدار برای تعیین نرخ پخش استفاده می‌کنند.

مقدار rate باید یکی از مقادیر 23.976، 24، 25، 29.97، 30، 50، 59.94 یا 60 باشد.

این عبارت نرخ بیت را برای کدگذاری با نرخ بیت ثابت (CBR یا Constant Bit Rate) تعیین می‌کند.

مقدار rate باید یک عدد صحیح باشد.

این عبارت مقداری را تعیین می‌کند که ppmtompeg در خروجی MPEG برای اندازه بافر Video Buffering Verifier (VBV) مورد نیاز جهت رمزگشایی دنباله مشخص می‌سازد.

بافر بازبینی ویدیو (Video Verifying Buffer) بافری است که رمزگشا بیت‌های کدگشایی‌شده را در آن نگه می‌دارد تا سرعت ناهموار رمزگشایی را با سرعت پخش ثابت و مورد نیاز هماهنگ کند.

هنگامی که ppmtompeg تصویر را کدگذاری می‌کند، فرایند رمزگشایی را با فرض بافر VBV به اندازه تعیین‌شده توسط شما، بر حسب این که با رمزگشایی هر فریم چند بیت در VBV خواهد بود شبیه‌سازی می‌کند.

اگر عبارت WARN_VBV_UNDERFLOW را تعیین کنید، ppmtompeg هر بار که در شبیه‌سازی کمبود بافر (underflow) رخ دهد هشداری صادر می‌کند؛ این امر نشان‌دهنده آن است که در هنگام پخش ممکن است کمبود بافر رخ دهد و بافر بیش از حد کوچک است.

اگر عبارت WARN_VBV_OVERFLOW را تعیین کنید، ppmtompeg هر بار که در شبیه‌سازی سرریز بافر (overflow) رخ دهد هشداری صادر می‌کند؛ این امر نشان‌دهنده آن است که در هنگام پخش ممکن است سرریز رخ دهد و بافر بیش از حد کوچک است.

بخش BUFFER_SIZE را ببینید.

این گزینه‌ها در Netpbm 10.26 (ژانویه ۲۰۰۵) اضافه شدند. پیش از آن، ppmtompeg همیشه این هشدارها را صادر می‌کرد.

عبارت‌های زیر تنها در عملکرد موازی (parallel) اعمال می‌شوند:

این عبارت، همراه با END PARALLEL، باعث می‌شود ppmtompeg در حالت موازی اجرا شود. بخش Parallel Operation را ببینید.
این عبارت همراه با PARALLEL به کار می‌رود.
گره اصلی (master) کار را با سنجش سرعت هر یک از گره‌های فرعی (slave) آغاز می‌کند. این کار با دادن n فریم به هر slave برای کدگذاری و اندازه‌گیری زمان پایان کار انجام می‌شود. این‌ها صرفاً فریم‌های آزمایشی نیستند، بلکه فریم‌های واقعی هستند و نتایج آن‌ها بخشی از خروجی نهایی را تشکیل می‌دهد. ppmtompeg قدیمی است و زمان را بر حسب ثانیه‌های کامل اندازه‌گیری می‌کند، بنابراین برای به دست آوردن زمان‌بندی مناسب، تعداد فریم‌ها را به‌اندازه‌ای تعیین کنید که پردازش آن‌ها دست‌کم ۵ ثانیه طول بکشد. مقدار پیش‌فرض ۱۰ است.

اگر FORCE_I_ALIGN را تعیین کنید، ppmtompeg مقدار فریم‌های آزمایشی را به اندازه کافی افزایش می‌دهد تا تراز فریم‌ها حفظ شود.

اگر فریم‌های کافی برای تخصیص به تمام slaveها به تعداد مشخص‌شده وجود نداشته باشد، ppmtompeg به برخی slaveها فریم‌های کمتری تخصیص خواهد داد.

با مشخص کردن این عبارت، گره اصلی (master) تلاش می‌کند کار را در بسته‌هایی به slaveها واگذار کند که پردازش آن‌ها t ثانیه زمان ببرد. master با استفاده از سنجش سرعتی که در ابتدا انجام داده است (بخش PARALLEL_TEST_FRAMES را ببینید) تصمیم می‌گیرد چه تعداد فریم در هر بسته قرار دهد. مسلماً این عبارت روی اولین بسته کاری ارسال‌شده به هر slave که برای سنجش سرعت استفاده شده تأثیری ندارد.

مقادیر کوچک‌تر t ارتباطات را افزایش می‌دهند، اما تعادل بار (load balancing) را بهبود می‌بخشند. مقدار پیش‌فرض ۳۰ ثانیه است.

شما تنها می‌توانید یکی از گزینه‌های PARALLEL_TIME_CHUNKS، PARALLEL_CHUNK_TAPER یا PARALLEL_PERFECT را مشخص کنید. معمولاً PARALLEL_CHUNK_TAPER بهترین گزینه است.

با مشخص کردن این عبارت، master کار را مشابه PARALLEL_TIME_CHUNKS توزیع می‌کند، با این تفاوت که master مدت‌زمان ثانیه‌ها برای بسته‌ها را خود تعیین می‌کند. ابتدا با عددی بزرگ شروع می‌کند و با نزدیک‌تر شدن به انتهای کار، آن را کاهش می‌دهد. بدین ترتیب، زمانی که زمان‌بندی دقیق مزیتی ندارد بار سربار زمان‌بندی را کاهش می‌دهد، اما هم‌زمان مانع از آن می‌شود که یک slave پس از تخصیص تمام کارها به سایر slaveها، کارش زودتر تمام شده و در حالی که هنوز کار باقی مانده است بیکار بماند.

شما تنها می‌توانید یکی از گزینه‌های PARALLEL_TIME_CHUNKS، PARALLEL_CHUNK_TAPER یا PARALLEL_PERFECT را مشخص کنید. معمولاً PARALLEL_CHUNK_TAPER بهترین گزینه است.

اگر این عبارت مشخص شده باشد، ppmtompeg با این فرض زمان‌بندی می‌کند که سرعت همه ماشین‌ها تقریباً برابر است. master صرفاً فریم‌ها را به‌طور یکنواخت بین slaveها تقسیم می‌کند و به هر slave تعداد فریم یکسانی می‌رسد. اگر برخی slaveها سریع‌تر از بقیه باشند، کار خود را زودتر تمام کرده و در حالی که slaveهای کندتر همچنان مشغول به کارند، بیکار باقی می‌مانند.

مزیت این حالت در به حداقل رسیدن بار سربار زمان‌بندی است. با این حال، در شرایطی که slaveها سرعت‌های متفاوتی دارند، استفاده از سیستم‌های سریع‌تر ناکارآمد خواهد بود. در مواردی هم که slaveها سرعت یکسانی دارند، این عیب وجود دارد که همگی هم‌زمان کار را به پایان می‌رسانند و خروجی خود را به‌صورت ناگهانی و هم‌زمان (burst) به تک سرور Combine Server ارسال می‌کنند که این امر کارایی Combine Server را کاهش داده و می‌تواند زمان کل فرایند را افزایش دهد.

شما تنها می‌توانید یکی از گزینه‌های PARALLEL_TIME_CHUNKS، PARALLEL_CHUNK_TAPER یا PARALLEL_PERFECT را مشخص کنید. معمولاً PARALLEL_CHUNK_TAPER بهترین گزینه است.

ppmtompeg دستور شل remote_shell_command را برای راه‌اندازی یک فرایند در ماشینی دیگر اجرا می‌کند. دستور پیش‌فرض rsh است، و هر دستوری که تعیین کنید باید از مفاهیم و دستور زبان سازگاری برخوردار باشد. دستور ssh معمولاً سازگار است. دستوری که ppmtompeg اجرا می‌کند شبیه این خواهد بود: ssh remote.host.com -l username shellcommand.

مطمئن شوید که فایل‌های .rhosts یا مجوزهای کلید SSH را در جاهای مورد نیاز پیکربندی کرده‌اید. در غیر این صورت، ناچار به تایپ دستی گذرواژه‌ها خواهید بود.

در برخی ماشین‌های HP، دستور rsh یک پوسته محدودشده (restricted shell) است و باید به جای آن remsh را تعیین کنید.

این عبارت هر slave را وادار می‌کند دسته‌ای از فریم‌ها را کدگذاری کند که مضربی از طول الگو باشد (بخش PATTERN را ببینید). از آنجا که اولین فریم در هر الگو یک فریم I است، این کار هر دسته کدگذاری‌شده توسط یک slave را مجبور می‌کند که با یک فریم I شروع شود.

پیش‌تر در این مستند گفته شده بود که FORCE_I_ALIGN آرگومانی دارد که تعداد فریم‌های مورد استفاده ppmtompeg را تعیین می‌کرد (و لازم بود مضربی از طول الگو باشد). اما ظاهراً ppmtompeg همیشه آن آرگومان را نادیده گرفته است و اکنون نیز آن را نادیده می‌گیرد.

این عبارت باعث می‌شود ppmtompeg فایل‌های موقتی را که برای ارسال فریم‌های کدگذاری‌شده به Combine Server استفاده می‌کند حذف نکند. این بدان معناست که برای هر فریم یک فایل مجزا باقی خواهد ماند، درست مانند آنچه با گزینه -frames به دست می‌آورید.

این گزینه بیشتر برای اشکال‌زدایی (debugging) کاربرد دارد..sp این ویژگی تنها در صورتی کار می‌کند که از یک فایل‌سیستم مشترک برای برقراری ارتباط بین سرورها استفاده کنید.

این گزینه در Netpbm 10.26 (ژانویه ۲۰۰۵) تازه اضافه شده بود.

اگر از گزینه -combine_gops استفاده کنید، تنها باید مقادیر SIZE و OUTPUT را در فایل پارامتر مشخص نمایید. علاوه بر این، فایل پارامتر می‌تواند فایل‌های GOP ورودی را به همان شیوه فایل‌های ورودی معمولی مشخص کند -- با این تفاوت که به جای استفاده از INPUT_DIR، INPUT و END_INPUT، از GOP_INPUT_DIR، GOP_INPUT و GOP_END_INPUT استفاده می‌شود. اگر هیچ فایل GOP ورودی مشخص نکنید، ppmtompeg به طور پیش‌فرض از نام فایل خروجی با پسوند .gop.gop_num، که در آن gop_num از 0 شروع می‌شود، به عنوان فایل‌های ورودی استفاده می‌کند.

اگر از گزینه -combine_frames استفاده کنید، تنها لازم است مقادیر SIZE، GOP_SIZE و OUTPUT را در فایل پارامتر مشخص کنید. علاوه بر این، فایل پارامتر می‌تواند فایل‌های فریم ورودی را به همان شیوه فایل‌های ورودی معمولی مشخص کند -- با این تفاوت که به جای استفاده از INPUT_DIR، INPUT و END_INPUT، از FRAME_INPUT_DIR، FRAME_INPUT و FRAME_END_INPUT استفاده می‌شود. در صورتی که هیچ فایل فریم ورودی تعیین نشده باشد، پیش‌فرض این است که از نام فایل خروجی با پسوند .frame.frame_num، که در آن frame_num از 0 شروع می‌شود، به عنوان فایل‌های ورودی استفاده شود.

هر تعداد فاصله و تب می‌تواند بین هر گزینه و مقدار آن قرار گیرد. خطوطی که با # شروع می‌شوند نادیده گرفته می‌شوند. سایر خطوط به جز موارد بین INPUT و END_INPUT نادیده گرفته می‌شوند. این قابلیت به شما امکان می‌دهد از یک فایل پارامتر یکسان برای استفاده عادی و همچنین برای -combine_gops و -combine_frames استفاده کنید.

فرمت فایل به بزرگی و کوچکی حروف حساس است (case-sensitive)، بنابراین تمامی کلمات کلیدی باید با حروف بزرگ نوشته شوند.

دستورها ممکن است به هر ترتیبی ظاهر شوند، به جز اینکه ترتیب درون یک بلوک دستوری (مانند INPUT ... END INPUT) دارای اهمیت است.

ابزار ppmtompeg طوری آماده شده است که هنگام کدگذاری با ورودی از stdin، تا ۱۶ فریم B را بین فریم‌های مرجع مدیریت کند. (برای ساخت نسخه دستکاری‌شده از ppmtompeg با محدودیت بالاتر، مقدار ثابت B_FRAME_RUN را در frame.c تغییر داده و مجدداً کامپایل کنید).

مقادیر مقیاس کوانتیزاسیون (qscale) یک مصالحه میان کیفیت و فشرده‌سازی ارائه می‌دهند. استفاده از مقادیر مختلف Qscale تأثیر بسیار ناچیزی بر سرعت دارد. مقادیر qscale را می‌توان به طور جداگانه برای فریم‌های I، P و B تنظیم کرد.

شما مقادیر qscale را با استفاده از گزاره‌های IQSCALE، PQSCALE و BSCALE در فایل پارامتر تعیین می‌کنید.

مقدار qscale یک عدد صحیح از 1 تا 31 است. اعداد بزرگ‌تر فشرده‌سازی بهتر، اما کیفیت نامناسب‌تری ارائه می‌دهند. در ادامه، ارقام کیفیت بر اساس نسبت بیشینه سیگنال به نویز (peak signal-to-noise ratio) هستند که به صورت زیر تعریف می‌شود: فرمول نسبت سیگنال به نویز (signal-to-noise formula) که در آن MSE نشان‌دهنده میانگین مربعات خطا (mean squared error) است.

آزمایش‌های Flower garden:

Qscale در برابر کیفیت (Quality)

Qscale I Frames P Frames B Frames
1 43.2 46.3 46.5
6 32.6 34.6 34.3
11 28.6 29.5 30.0
16 26.3 26.8 28.6
21 24.7 25.0 27.9
26 23.5 23.9 27.5
31 22.6 23.0 27.3

Qscale در برابر فشرده‌سازی (Compression)

Qscale I Frames P Frames B Frames
1 2 2 2
6 7 10 15
11 11 18 43
16 15 29 97
21 19 41 173
26 24 56 256
31 28 73 330

چندین تکنیک مختلف برای جستجوی بردار حرکت (motion vector) در دسترس است. تکنیک‌های متفاوتی برای جستجوی فریم‌های P و فریم‌های B وجود دارد. استفاده از تکنیک‌های جستجوی مختلف، تفاوت اندکی در کیفیت، اما تفاوت چشمگیری در فشرده‌سازی و سرعت ایجاد می‌کند.

۴ نوع جستجو برای فریم‌های P وجود دارد: Exhaustive، TwoLevel، SubSample و Logarithmic.

۳ نوع جستجو برای فریم‌های B وجود دارد: Exhaustive، Cross2 و Simple.

تکنیک‌های جستجوی توصیه‌شده، TwoLevel و Logarithmic برای جستجوی فریم‌های P، و Cross2 و Simple برای جستجوی فریم‌های B هستند. در ادامه اعدادی برای مقایسه روش‌های مختلف جستجو آورده شده است:

جستجوی بردار حرکت فریم‌های P (نرمال‌سازی‌شده)

تکنیک فشرده‌سازی #smallbetter 1 سرعت #largefaster 2 کیفیت #largebetter 3
Exhaustive 1000 1000 1000
SubSample 1008 2456 1000
TwoLevel 1009 3237 1000
Logarithmic 1085 8229 998

جستجوی بردار حرکت فریم‌های B (نرمال‌سازی‌شده)

تکنیک فشرده‌سازی #smallbetter 1 سرعت #largefaster 2 کیفیت #largebetter 3
Exhaustive 1000 1000 1000
Cross2 975 1000 996
Simple 938 1765 991

1اعداد کوچک‌تر بیانگر فشرده‌سازی بهتر هستند.

2اعداد بزرگ‌تر به معنی اجرای سریع‌تر هستند.

3اعداد بزرگ‌تر بیانگر کیفیت بهتر هستند.

به دلایلی، به‌نظر می‌رسد روش Simple فشرده‌سازی بهتری ارائه می‌دهد، اما این امر به توالی تصاویر بستگی دارد.

تکنیک‌های جستجو را با گزاره‌های PSEARCH_ALG و BSEARCH_ALG در فایل پارامتر انتخاب کنید.

یک «گروه تصاویر» (GOP یا Group of Pictures) توالی‌ای از فریم‌هاست که تقریباً به طور مستقل قابل رمزگشایی است. یک جریان ویدیویی MPEG از یک یا چند GOP تشکیل می‌شود. می‌توانید تعداد فریم‌های موجود در هر GOP را با دستور GOP_SIZE در فایل پارامتر مشخص کنید. یک GOP همواره با یک فریم I آغاز می‌شود.

به جای انکود کردن کل یک توالی، می‌توانید یک تک GOP را انکود کنید. برای این کار از گزینه دستوری -gop استفاده کنید. سپس می‌توانید در هر زمانی با اجرای ppmtompeg به همراه گزینه دستوری -combine_gops، فایل‌های GOP حاصل را به یکدیگر متصل کنید.

یک برش (slice) یک واحد مستقلِ قابل رمزگشایی در یک فریم است. اندازه آن می‌تواند به کوچکی یک ماکروبلاک یا به بزرگی کل فریم باشد. صرف نظر از خطاهای مخابره، افزودن برش‌ها تأثیری بر کیفیت یا سرعت ندارد؛ تنها اثر آن کاهش جزئی در کارایی فشرده‌سازی است. برش‌های بیشتر برای مخابره‌های دارای نویز استفاده می‌شوند تا بازیابی خطاها ممکن‌تر باشد. از آنجا که معمولاً خطاها چندان مشکل‌ساز نیستند، معمولاً تنها از یک برش در هر فریم استفاده می‌شود.

اندازه برش را با دستور SLICES_PER_FRAME در فایل پارامتر کنترل کنید.

برخی از سیستم‌های پخش MPEG نیازمند آن هستند که هر برش از سطرهای کاملی از ماکروبلاک‌ها تشکیل شده باشد. اگر برای این نوع پخش‌کننده‌ها انکود می‌کنید، در صورتی که ارتفاع تصویر H پیکسل باشد، باید SLICES_PER_FRAME را بر روی عددی تنظیم کنید که H/16 بر آن بخش‌پذیر باشد. به عنوان مثال، اگر ارتفاع تصویر ۲۴۰ پیکسل (۱۵ ماکروبلاک) باشد، باید تنها از ۱۵، ۵، ۳ یا ۱ برش در هر فریم استفاده کنید.

نکته: این سیستم‌های پخش MPEG واقعاً اشتباه عمل می‌کنند، زیرا استاندارد MPEG تصریح می‌کند که نیازی به چنین الزامی نیست.

پنجره جستجو پنجره‌ای است که در آن ppmtompeg به دنبال بردارهای حرکت (motion vectors) می‌گردد. این پنجره یک مربع است. می‌توانید اندازه این مربع و این که آیا بردارهای حرکت نیم‌پیکسلی مجاز باشند یا خیر را با دستورات RANGE و PIXEL در فایل پارامتر مشخص کنید.

در MPEG-1، یک فیلم به صورت توالی‌ای از فریم‌های MPEG نمایش داده می‌شود که هر یک از آنها یک فریم I، یک فریم P یا یک فریم B است. هر کدام نمایانگر یک فریم واقعی از فیلم هستند (استفاده دوگانه از کلمه «فریم» شما را به اشتباه نیندازد؛ فریم فیلم یک تصویر گرافیکی است، در حالی که فریم MPEG مجموعه‌ای از داده‌هاست که یک فریم فیلم را توصیف می‌کند).

یک فریم I (فریم «درون‌تصویری» یا intra) یک فریم فیلم را به صورت مجزا و بدون وابستگی به فریم‌های دیگر توصیف می‌کند. یک فریم P (فریم «پیش‌بینانه» یا predictive) یک فریم فیلم را با توصیف تفاوت‌های آن نسبت به فریم فیلمِ توصیف‌شده توسط آخرین فریم I یا P قبلی توصیف می‌کند. یک فریم B (فریم «دوجهته» یا bidirectional) یک فریم فیلم را با توصیف تفاوت‌های آن نسبت به فریم‌های توصیف‌شده توسط نزدیک‌ترین فریم‌های I یا P قبل و بعد از خود توصیف می‌کند.

توجه داشته باشید که نخستین فریم یک فیلم باید توسط یک فریم I توصیف شود (زیرا هیچ فریم قبلی در فیلم وجود ندارد) و آخرین فریم فیلم باید توسط یک فریم I یا P توصیف شود (زیرا هیچ فریم بعدی در فیلم وجود ندارد).

فراتر از آن، می‌توانید انتخاب کنید که کدام فریم‌ها با چه نوعی نمایش داده شوند. شما یک الگو مانند IBPBP را مشخص می‌کنید و ppmtompeg آن را در طول فیلم تکرار می‌کند. این الگو بر سرعت، کیفیت و اندازه جریان ویدیویی تأثیر می‌گذارد. در اینجا جدولی آورده شده است که برخی از این موازنه‌ها را نشان می‌دهد:

مقایسه فریم‌های I/P/B (نرمال‌شده)

نوع فریم اندازه سرعت کیفیت
فریم‌های I 1000 1000 1000
فریم‌های P 409 609 969
فریم‌های B 72 260 919

(این مقایسه با مقدار ثابت qscale انجام شده است)

یک توالی استاندارد IBBPBBPBBPBBPBB است.

توالی را با دستور PATTERN در فایل پارامتر انتخاب کنید.

از آنجا که آخرین فریم MPEG نمی‌تواند یک فریم B باشد (به موارد بالا مراجعه کنید)، اگر الگوی مشخص‌شده توسط شما برای آخرین فریم فیلم یک فریم B را مشخص کند، ppmtompeg به جای آن، آن را به یک فریم I تبدیل می‌کند.

پیش از Netpbm نسخه 10.26 (ژانویه ۲۰۰۵)، ppmtompeg به طور پیش‌فرض فریم‌های B انتهایی را حذف می‌کرد و برای انجام این کار نیاز به دستور FORCE_ENCODE_LAST_FRAME در فایل پارامتر بود.

فریم‌های MPEG در جریان MPEG-1 با همان ترتیبی که فریم‌های مربوطه در فیلم اصلی نمایش داده می‌شوند ظاهر نمی‌شوند؛ فریم‌های B پس از فریم‌های I و P که بر اساس آنها ساخته شده‌اند قرار می‌گیرند. به عنوان مثال، اگر فیلم دارای ۴ فریم باشد که با الگوی IBBP نمایش داده می‌شوند، جریان MPEG-1 با یک فریم I آغاز می‌شود که فریم ۰ فیلم را توصیف می‌کند. فریم بعدی در جریان MPEG-1 یک فریم P خواهد بود که فریم ۳ فیلم را توصیف می‌کند. دو فریم آخر در جریان MPEG-1 فریم‌های B خواهند بود که به ترتیب فریم‌های ۱ و ۲ فیلم را توصیف می‌کنند.

تصاویر فریم‌های ورودی را با استفاده از بیانیه‌های INPUT_DIR، INPUT، END_INPUT، BASE_FILE_FORMAT، SIZE، YUV_FORMAT و INPUT_CONVERT در فایل پارامتر مشخص کنید.

فایل خروجی را با استفاده از بیانیهٔ OUTPUT در فایل پارامتر مشخص نمایید.

ppmtompeg می‌تواند آمارهای گوناگونی را دربارهٔ کدگذاری تولید کند. گزینه‌های -stat، -snr، -mv_histogram، -quiet، -no_frame_summary و -bit_rate_info را ببینید.

شما می‌توانید ppmtompeg را هم‌زمان روی چندین ماشین اجرا کنید تا یک جریان MPEG واحد را کدگذاری کنند. در این حالت، ماشین‌ها همان‌طور که در نمودار زیر نشان داده شده است به کار گرفته می‌شوند. ما این را «حالت موازی» می‌نامیم.

ppmtompeg-par.gif

جهت انجام پردازش موازی، بیانیهٔ

PARALLEL

را در فایل پارامتر قرار دهید، و در ادامه فهرستی از ماشین‌ها را (هر ماشین در یک خط) و سپس

END_PARALLEL

را بنویسید. هر یک از خطوط ماشین‌ها باید به یکی از دو شکل زیر باشد. اگر ماشین دسترسی فایل‌سیستمی به فایل‌های ورودی دارد، خط به این صورت است:

machine user executable

فایل اجرایی معمولاً ppmtompeg است (اگر برنامه را برای معماری‌های متفاوتی کامپایل کرده‌اید، ممکن است نیاز باشد مسیر کامل را بدهید). اگر ماشین به فایل‌های ورودی دسترسی فایل‌سیستمی ندارد، خط به این صورت خواهد بود:

REMOTE machine user executable parameter file

گزینهٔ خط فرمان -max_machines تعداد ماشین‌هایی را که ppmtompeg استفاده خواهد کرد محدود می‌کند. اگر در فایل پارامتر ماشین‌های بیشتری نسبت به مقدار مجاز -max_machines مشخص کنید، ppmtompeg تنها از ماشین‌هایی استفاده می‌کند که ابتدا در فهرست آمده‌اند. این قابلیت برای مواقعی که می‌خواهید میزان موازی‌سازی متفاوتی را آزمایش کنید بسیار سودمند است.

به‌طور کلی، هنگام تعیین فایل‌های اجرایی و فایل‌های پارامتر باید از نام فایل با مسیر کامل استفاده کنید. این مورد شامل آرگومان فایل پارامتر در فراخوانی اولیهٔ ppmtompeg نیز می‌شود.

همهٔ نام‌های فایل باید در تمام سیستم‌ها یکسان باشند (بنابراین، برای مثال اگر از یک فایل‌سیستم NFS استفاده می‌کنید، باید مطمئن شوید که در یک نقطهٔ اتصال (mountpoint) یکسان در همهٔ سیستم‌ها سوار (mount) شده باشد).

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

ماشینی که در ابتدا ppmtompeg را روی آن فراخوانی می‌کنید، ماشین اصلی (master) است. این ماشین میزبان یک «سرور ادغام» (combine server)، یک «سرور رمزگشایی» (decode server) و چندین «سرور ورودی/خروجی» (i/o servers) به صورت فرایندهای مجزا است. ماشین‌های دیگر در شبکه (که در فایل پارامتر فهرست شده‌اند) ماشین‌های فرعی (slave) هستند. هر یک از آن‌ها میزبان یک فرایند منفرد است که پیوسته از ماشین اصلی درخواست کار کرده و آن را انجام می‌دهد. فرایند slave محاسبات لازم برای کدگذاری فریم‌های MPEG را به دوش می‌کشد. این فرایند، فریم‌ها را در دسته‌های مشخص‌شده توسط ماشین اصلی پردازش می‌کند.

ماشین اصلی از یک دستور پوستهٔ از راه دور (remote shell) برای آغاز فرایند در ماشین slave استفاده می‌کند. به طور پیش‌فرض، برای انجام این کار از دستور پوستهٔ rsh استفاده می‌کند؛ اما می‌توانید با بیانیهٔ RSH در فایل پارامتر این رفتار را کنترل کنید. دستور پوسته‌ای که ماشین اصلی از راه دور اجرا می‌کند همان ppmtompeg است، اما همراه با گزینه‌هایی که مشخص می‌کند باید وظایف slave را انجام دهد.

ماشین‌های مختلف از طریق اتصالات TCP با یکدیگر گفتگو می‌کنند. هر ماشین یک شماره درگاه (port) آزاد TCP را پیدا کرده و به آن متصل (bind) می‌شود و شماره پورت را به همتایان خود اطلاع می‌دهد. این شماره پورت‌ها حداقل ۲۰۴۸ هستند.

از بیانیه‌های PARALLEL_TEST_FRAMES، PARALLEL_TIME_CHUNKS و PARALLEL_PERFECT در فایل پارامتر برای کنترل نحوهٔ تقسیم کار توسط ماشین اصلی میان slaveها استفاده کنید.

از گزینهٔ خط فرمان -nice استفاده کنید تا همهٔ فرایندهای slave با اولویت پایین (nice) اجرا شوند. به این ترتیب، این بار پردازشی سنگین و طولانی‌مدت CPU کمترین تأثیر را روی سایر کاربران (احتمالاً تعاملی) سیستم‌ها خواهد گذاشت.

در اینجا نگاهی به سرعت ppmtompeg در عملکرد تک‌گره‌ای (غیرموازی) آمده است:

سرعت فشرده‌سازی

Machine Type Macroblocks per second1
HP 9000/755 280
DEC 3000/400 247
HP 9000/750 191
Sparc 10 104
DEC 5000 68
1یک ماکروبلاک، مربعی ۱۶×۱۶ پیکسلی است.

اندازه‌گیری‌های این جدول با ورودی‌ها و خروجی‌ها از طریق یک سیستم‌فایل محلی متصل مرسوم انجام شده است. اگر از یک سیستم‌فایل شبکه‌ای روی یک اتصال اترنت 10 MB/s استفاده می‌کنید، این موضوع بیشتر از سرعت پردازنده (CPU)، سرعت شما را محدود می‌کند. در این شرایط، صرف‌نظر از این‌که پردازنده‌های شما چقدر سریع باشند، انتظار بیش از ۴ یا ۵ فریم بر ثانیه را نداشته باشید.

سرعت شبکه در حالتی که کارگزارها (slaves) به فایل‌های ورودی دسترسی مستقیمِ سیستم‌فایلی ندارند -- یعنی آن‌ها را به‌صورت REMOTE اعلان کرده‌اید -- حتی بیشتر از این به یک گلوگاه تبدیل می‌شود.

در جایی که ورودی/خروجی (I/O) گلوگاه باشد، اندازهٔ فریم‌های ورودی می‌تواند تفاوت بزرگی ایجاد کند. بنابراین، ورودی YUV بهتر از PPM، و ورودی JPEG از هر دوی آن‌ها بهتر است.

هنگامی که برای نخستین بار قصد راه‌اندازی حالت موازی را دارید، حتماً از گزینهٔ -debug_machines استفاده کنید تا بتوانید روند رویدادها را مشاهده نمایید. همچنین گزینهٔ -debug_sockets می‌تواند به شما در عیب‌یابی مشکلات ارتباطی کمک کند.

  • Kevin Gong - دانشگاه کالیفرنیا، برکلی، keving@cs.berkeley.edu
  • Ketan Patel - دانشگاه کالیفرنیا، برکلی، kpatel@cs.berkeley.edu
  • Dan Wallach - دانشگاه کالیفرنیا، برکلی، dwallach@cs.berkeley.edu
  • Darryl Brown - دانشگاه کالیفرنیا، برکلی، darryl@cs.berkeley.edu
  • Eugene Hung - دانشگاه کالیفرنیا، برکلی، eyhung@cs.berkeley.edu
  • Steve Smoot - دانشگاه کالیفرنیا، برکلی، smoot@cs.berkeley.edu

این صفحهٔ راهنما توسط ابزار Netpbm به نام 'makeman' از روی منبع HTML تولید شده است. مستندات اصلی در آدرس زیر قرار دارد:

http://netpbm.sourceforge.net/doc/ppmtompeg.html
23 July 2006 netpbm documentation