| Ppmtompeg User Manual(0) | Ppmtompeg User Manual(0) |
نام (NAME)
ppmtompeg - کدگذاری یک جریان بیتی MPEG-1
خلاصه دستور (SYNOPSIS)
ppmtompeg [options] parameter-file
توضیحات (DESCRIPTION)
این برنامه بخشی از 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 است.
گزینهها (OPTIONS)
گزینههای -gop، -combine_gops، -frames و -combine_frames همگی مانعةالجمع هستند.
- -stat stat_file
- این گزینه
باعث
میشود ppmtompeg
آماری را که
در خروجی
استاندارد
مینویسد،
به انتهای
فایل stat_file نیز
اضافه کند.
این آمار از
اختصارات
زیر
استفاده
میکند: بیت
بر بلوک (bpb)،
بیت بر فریم
(bpf)، ثانیه بر
فریم (spf) و بیت
بر ثانیه (bps).
این آمار شامل تعداد فریمهای I، P و B و اطلاعاتی درباره فشردهسازی و کیفیت است.
- -quiet num_seconds
- باعث میشود ppmtompeg زمان باقیمانده را زودتر از هر num_seconds ثانیه یکبار گزارش نکند (مگر اینکه تخمین زمان افزایش یابد، که نزدیک به شروع اجرا رخ خواهد داد). مقدار منفی به ppmtompeg میگوید که اصلاً گزارش ندهد. مقدار 0 پیشفرض است (یکبار پس از هر فریم گزارش میدهد). توجه داشته باشید که زمان باقیمانده یک تخمین است و زمان صرفشده برای خواندن فریمها را در نظر نمیگیرد.
- -realquiet
- باعث میشود ppmtompeg کاملاً بیصدا اجرا شود، به طوری که تنها خروجی صفحه، خطاها باشند. این گزینه بهویژه هنگام خواندن ورودی از stdin مفید است. معادل گزینه مشترک -quiet در اکثر برنامههای دیگر Netpbm است.
- -no_frame_summary
- این گزینه از چاپ خط خلاصه برای هر فریم توسط ppmtompeg جلوگیری میکند.
- -float_dct
- ppmtompeg را وادار میکند تا از نسخه دقیقتر، اما از نظر محاسباتی سنگینتر DCT استفاده کند.
- -gop gop_num
- باعث میشود ppmtompeg تنها GOP شمارهگذاریشده را کدگذاری کند (اولین GOP عدد 0 است). فایل پارامتر همانند استفاده معمولی است. فایل خروجی همان فایل خروجی معمولی با پسوند .gop.gop_num خواهد بود. ppmtompeg هیچ اطلاعات توالی خروجی نمیدهد.
- -combine_gops
- باعث
میشود 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) استفاده کنید.
- -frames first_frame last_frame
- این گزینه
باعث
میشود ppmtompeg
تنها
فریمهای
شمارهگذاریشده
از first_frame تا last_frame
(شامل هر دو)
را کدگذاری
کند. فایل
پارامتر
همانند
حالت
استفاده
معمولی است.
خروجی در
فایلهای
جداگانه
قرار خواهد
گرفت، یک
فایل برای
هر فریم، با
نام فایل
خروجی
معمولی
همراه با
پسوند .frame.frame_num.
هیچ
اطلاعات
سرآیند GOP
خروجی داده
نمیشود.
(بنابراین،
فایل
پارامتر
نیازی به
داشتن
مقدار GOP_SIZE
ندارد).
بعداً برای ترکیب این فریمها در یک جریان MPEG از ppmtompeg -combine_frames استفاده کنید.
- -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، به عنوان فایلهای ورودی است.
- -nice
- این گزینه باعث میشود ppmtompeg هر فرایند دوردست (remote) را با اولویت پایین (nice) اجرا کند. (این مورد تنها در صورتی مرتبط است که ppmtompeg را در حالت موازی اجرا کنید. در غیر این صورت، هیچ فرایند دوردستی وجود ندارد). به “man nice” مراجعه کنید..TP -max_machines num_machines این گزینه باعث میشود ppmtompeg حداکثر از num_machines ماشین به عنوان خدمتگزار (slave) برای استفاده در کدگذاری موازی بهره ببرد.
- -snr
- این گزینه باعث میشود ppmtompeg نسبت سیگنال به نویز (SNR) را در آمار گزارششده لحاظ کند. برای هر فریم SNR (Y U V) و اوج SNR (Y U V) را چاپ میکند. در بخش خلاصه، تنها میانگینهای روشنایی (Y) را چاپ میکند. مقدار SNR به صورت 10*log(واریانس اصلی/واریانس خطا) تعریف میشود. مقدار اوج SNR به صورت 20*log(255/RMSE) تعریف میشود. توجه داشته باشید که با استفاده از این گزینه، سرعت اجرای ppmtompeg کمی کاهش مییابد.
- -mse
- این گزینه باعث میشود ppmtompeg میانگین مربعات خطا (MSE) را به ازای هر بلوک گزارش کند. همچنین کیفیت تصاویر نیز بهطور خودکار گزارش میشود، بنابراین دیگر نیازی به مشخص کردن -snr نخواهد بود.
- -bit_rate_info rate_file
- این گزینه باعث میشود ppmtompeg اطلاعات نرخ بیت را در فایل rate_file بنویسد. اطلاعات نرخ بیت شامل بیت بر فریم و همچنین بیت در بازه فریم I تا فریم I بعدی است.
- -mv_histogram
- این گزینه
باعث
میشود ppmtompeg
هیستوگرامی
از
بردارهای
حرکت را به
عنوان بخشی
از آمار چاپ
کند. سه
هیستوگرام
وجود دارد --
یکی برای
فریمهای P،
یکی برای
بردارهای
حرکت رو به
جلوی فریم
B، و یکی
برای
بردارهای
حرکت رو به
عقب فریم B.
خروجی به صورت یک ماتریس است که هر مدخل آن متناظر با یک بردار حرکت در پنجره جستجو است. مرکز ماتریس نشاندهنده بردارهای حرکت (0,0) است.
- -debug_sockets
- این گزینه باعث میشود ppmtompeg پیامهایی را که ارتباط بین ماشینها را هنگام اجرای ppmtompeg در حالت موازی شرح میدهند، در خروجی استاندارد چاپ کند.
- -debug_machines
- این گزینه باعث میشود ppmtompeg پیامهایی را که روند پیشرفت تبدیل در ماشینهای مختلف را هنگام اجرای ppmtompeg در حالت موازی شرح میدهند، در خروجی استاندارد چاپ کند.
فایل پارامتر (PARAMETER FILE)
فایل پارامتر باید حاوی خطوط زیر باشد (مگر در هنگام استفاده از گزینههای -combine_gops یا -combine_frames):
- PATTERN pattern
- این عبارت
الگو
(توالی)
فریمهای I،
فریمهای P
و فریمهای
B را مشخص
میکند. pattern
صرفاً
توالیای
از حروف I، P و B
بدون هیچ
فاصلهای
بین آنها
است. مثال:
PATTERN IBBPBBPBBPBBPBB
ببینید: فریمهای I، فریمهای P، فریمهای B .
- OUTPUT output file
- نام فایلی را مشخص میکند که جریان MPEG خروجی در آن قرار میگیرد.
- INPUT_DIR directory
- این عبارت
مشخص
میکند
تصاویر
ورودی
(فریمها)
از کجا
میآیند.
اگر هر فریم
در یک فایل
جداگانه
باشد، directory
پوشهای
است که همه
آنها در آن
قرار دارند.
برای اشاره
به
دایرکتوری
جاری
میتوانید
از .
استفاده
کنید. یک directory
تهی (null) به
دایرکتوری
ریشه درخت
فایلهای
سیستم
اشاره دارد.
برای اینکه ppmtompeg همه فریمها را به صورت ترتیبی از ورودی استاندارد بخواند، مشخص کنید:
INPUT_DIR stdin
- INPUT
- پس از این
خط باید
فهرستی از
فایلهای
ورودی (به
ترتیب
نمایش) و
سپس خط 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 را نادیده میگیرد، اما این بلوک همچنان باید وجود داشته باشد.
- BASE_FILE_FORMAT {PPM | PNM | YUV |
-
JPEG | JMOVIE} ppmtompeg باید در نخستین گام پردازش، تمام فایلهای ورودی را به یکی از فرمتهای زیر تبدیل کند: PNM، YUV، JPEG(v4) یا JMOVIE. (اگر فایلهای ورودی شما از پیش در یکی از این فرمتها باشند، تبدیل ممکن است بسیار ناچیز یا بدون تغییر باشد). این خط مشخص میکند کدامیک از این چهار فرمت مد نظر است. PPM در واقع زیرمجموعهای از PNM است. مشخصسازی جداگانه آن به جهت سازگاری با گذشته مجاز است. در برنامههای جدید به جای PPM از PNM استفاده کنید. - INPUT_CONVERT conversion_command
- باید نحوه
تبدیل یک
فایل به
فرمت پایه
فایل را
مشخص کنید.
اگر هیچ
تبدیلی
لازم
نباشد،
صرفاً
مینویسید:
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 *استفاده کنید.
- SIZE widthxheight
-
مقادیر width و height پهنا و ارتفاع هر فریم را بر حسب پیکسل مشخص میکنند.
هنگامی که ppmtompeg بتواند این اطلاعات را از فایلهای تصویر ورودی به دست آورد، پارامتر SIZE را نادیده میگیرد و میتوانید آن را حذف کنید.
هنگامی که فایلهای تصویر در قالب YUV باشند، فایلها حاوی اطلاعات ابعاد نیستند، بنابراین SIZE الزامی است.
هنگامی که ppmtompeg در حالت موازی اجرا میشود، همهٔ فرایندها در شبکه به فایلهای تصویر دسترسی ندارند، بنابراین SIZE الزامی است و باید ابعادی مشابه با فایلهای تصویر ورودی مشخص کند.
- YUV_SIZE widthxheight
- این یک مترادف منسوخ برای SIZE است.
- YUV_FORMAT {ABEKAS | PHILLIPS | UCB |
-
EYUV | pattern} این دستور تنها زمانی معنا دارد که BASE_FILE_FORMAT قالب YUV را تعیین کرده باشد، و در آن صورت الزامی است. این گزینه زیرقالب ردهٔ YUV را مشخص میکند. - GOP_SIZE n
- مقدار n
تعداد
فریمها در
یک گروه
تصاویر (Group of Pictures
یا GOP) است. با
این استثنا
که چون یک GOP
باید با یک
فریم I شروع
شود، ppmtompeg تا
جای ممکن
طول GOP را از n
بیشتر
میکند تا GOP
بعدی
بتواند با
یک فریم I
آغاز گردد.
بهطور معمول، منطقی است که اندازهٔ GOP خود را مضربی از طول الگوی خود قرار دهید (طول الگو توسط دستور PATTERN در فایل پارامتر تعیین میشود).
ببینید Group Of Pictures .
- SLICES_PER_FRAME n
- مقدار n تقریباً تعداد برشها در هر فریم است. توجه داشته باشید که حداقل یک پخشکنندهٔ MPEG در صورتی که برشها از سمت چپ تصویر شروع نشوند ممکن است خطا دهد. برای اطمینان از رخ ندادن این مشکل، مطمئن شوید که تعداد سطرها بر SLICES_PER_FRAME بخشپذیر باشد.
- PIXEL {FULL | HALF}
- استفاده از بردارهای حرکتی نیمپیکسلی، یا صرفاً تمامپیکسلی. معمولاً مهم است که از بردارهای حرکتی نیمپیکسلی استفاده کنید، زیرا هم به کیفیت بهتر و هم به فشردهسازی بهتری میانجامد.
- RANGE n
- استفاده از محدودهٔ جستجوی n پیکسل در هر یک از چهار جهت از پیکسل مورد نظر. (بنابراین پنجرهٔ جستجو مربعی با ضلع n*2 پیکسل است).
- PSEARCH_ALG {EXHAUSTIVE | TWOLEVEL |
-
SUBSAMPLE | LOGARITHMIC} این دستور به ppmtompeg میگوید که از چه نوع روش جستجویی (الگوریتم) برای فریمهای P استفاده کند. شما ترکیب مورد نظر خود از سرعت و فشردهسازی را انتخاب میکنید. گزینهٔ EXHAUSTIVE بهترین فشردهسازی را ارائه میدهد، اما LOGARITHMIC سریعترین است. TWOLEVEL یک جستجوی تمامپیکسلی همهجانبه است که به دنبال آن یک جستجوی محلی نیمپیکسلی در اطراف بهترین بردار تمامپیکسلی انجام میشود (گزینهٔ PIXEL برای این روش جستجو نادیده گرفته میشود). - BSEARCH_ALG {SIMPLE | CROSS2 | EXHAUSTIVE}
- این دستور به ppmtompeg میگوید که از چه نوع روش جستجویی (الگوریتم) برای فریمهای B استفاده کند. روش SIMPLE به معنای یافتن بهترین بردارهای رو به جلو و رو به عقب، و سپس درونیابی است. روش CROSS2 به این معناست که آن دو بردار را پیدا کرده، سپس بررسی کند کدام بردار رو به عقب بیشترین همخوانی را با بهترین بردار رو به جلو دارد، و برعکس. گزینهٔ EXHAUSTIVE یک جستجوی n به توان دو (n-squared) انجام میدهد و در مقایسه با روشهای دیگر بسیار کند است (سرعت CROSS2 حدود نصف سرعت SIMPLE است).
- IQSCALE n
- استفاده از
n به عنوان qscale
برای
فریمهای I.
ببینید Qscale . - PQSCALE n
- استفاده از
n به عنوان qscale
برای
فریمهای P.
ببینید Qscale . - BQSCALE n
- استفاده از
n به عنوان qscale
برای
فریمهای B.
ببینید Qscale . - REFERENCE_FRAME {ORIGINAL | DECODED}
- این دستور
مشخص
میکند که
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
خطوط زیر اختیاری هستند:
- FORCE_ENCODE_LAST_FRAME
- این دستور
منسوخ شده
است و هیچ
کاری انجام
نمیدهد.
پیش از Netpbm 10.26 (ژانویهٔ ۲۰۰۵)، ppmtompeg فریمهای B انتهایی فیلم را حذف میکرد، زیرا یک فیلم نمیتواند با یک فریم B به پایان برسد. (ببینید I Frames, P Frames, B Frames .) برای جلوگیری از رخ دادن این اتفاق و دستیابی به همان عملکردی که ppmtompeg امروزه دارد، باید FORCE_ENCODE_LAST_FRAME را مشخص میکردید.
- NIQTABLE
- این دستور
یک جدول
کوانتیزاسیون
غیردرونفریمی
(non-intra) سفارشی
را مشخص
میکند. اگر
این دستور
را مشخص
نکنید، ppmtompeg
از جدول
کوانتیزاسیون
غیردرونفریمی
پیشفرض
استفاده
میکند.
۸ خطی که بلافاصله پس از NIQTABLE میآیند، جدول کوانتیزاسیون را مشخص میکنند. هر خط یک سطر جدول را تعریف کرده و شامل ۸ عدد صحیح جداشده با فاصله است که ستونهای جدول را تشکیل میدهند..TP IQTABLE این عبارت مشابه NIQTABLE است، اما برای جدول کوانتیزاسیون درونفریمی (intra quantization table) کاربرد دارد.
- ASPECT_RATIO ratio
- این عبارت
نسبت تصویر
(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 rate
- این عبارت
نرخ فریم (frame rate)
را مشخص
میکند تا
ppmtompeg آن را در
خروجی MPEG درج
کند. برخی
پخشکنندهها
از این
مقدار برای
تعیین نرخ
پخش
استفاده
میکنند.
مقدار rate باید یکی از مقادیر 23.976، 24، 25، 29.97، 30، 50، 59.94 یا 60 باشد.
- BIT_RATE rate
- این عبارت
نرخ بیت را
برای
کدگذاری با
نرخ بیت
ثابت (CBR یا Constant Bit Rate)
تعیین
میکند.
مقدار rate باید یک عدد صحیح باشد.
- BUFFER_SIZE size
- این عبارت
مقداری را
تعیین
میکند که
ppmtompeg در خروجی
MPEG برای
اندازه
بافر Video Buffering Verifier (VBV)
مورد نیاز
جهت
رمزگشایی
دنباله
مشخص
میسازد.
بافر بازبینی ویدیو (Video Verifying Buffer) بافری است که رمزگشا بیتهای کدگشاییشده را در آن نگه میدارد تا سرعت ناهموار رمزگشایی را با سرعت پخش ثابت و مورد نیاز هماهنگ کند.
هنگامی که ppmtompeg تصویر را کدگذاری میکند، فرایند رمزگشایی را با فرض بافر VBV به اندازه تعیینشده توسط شما، بر حسب این که با رمزگشایی هر فریم چند بیت در VBV خواهد بود شبیهسازی میکند.
اگر عبارت WARN_VBV_UNDERFLOW را تعیین کنید، ppmtompeg هر بار که در شبیهسازی کمبود بافر (underflow) رخ دهد هشداری صادر میکند؛ این امر نشاندهنده آن است که در هنگام پخش ممکن است کمبود بافر رخ دهد و بافر بیش از حد کوچک است.
اگر عبارت WARN_VBV_OVERFLOW را تعیین کنید، ppmtompeg هر بار که در شبیهسازی سرریز بافر (overflow) رخ دهد هشداری صادر میکند؛ این امر نشاندهنده آن است که در هنگام پخش ممکن است سرریز رخ دهد و بافر بیش از حد کوچک است.
- WARN_VBV_UNDERFLOW
- WARN_VBV_OVERFLOW
- بخش BUFFER_SIZE را
ببینید.
این گزینهها در Netpbm 10.26 (ژانویه ۲۰۰۵) اضافه شدند. پیش از آن، ppmtompeg همیشه این هشدارها را صادر میکرد.
عبارتهای زیر تنها در عملکرد موازی (parallel) اعمال میشوند:
- PARALLEL
- این عبارت، همراه با END PARALLEL، باعث میشود ppmtompeg در حالت موازی اجرا شود. بخش Parallel Operation را ببینید.
- END PARALLEL
- این عبارت همراه با PARALLEL به کار میرود.
- PARALLEL_TEST_FRAMES n
- گره اصلی (master)
کار را با
سنجش سرعت
هر یک از
گرههای
فرعی (slave) آغاز
میکند. این
کار با دادن
n فریم به
هر slave برای
کدگذاری و
اندازهگیری
زمان پایان
کار انجام
میشود.
اینها
صرفاً
فریمهای
آزمایشی
نیستند،
بلکه
فریمهای
واقعی
هستند و
نتایج
آنها بخشی
از خروجی
نهایی را
تشکیل
میدهد. ppmtompeg
قدیمی است و
زمان را بر
حسب
ثانیههای
کامل
اندازهگیری
میکند،
بنابراین
برای به دست
آوردن
زمانبندی
مناسب،
تعداد
فریمها را
بهاندازهای
تعیین کنید
که پردازش
آنها
دستکم ۵
ثانیه طول
بکشد. مقدار
پیشفرض ۱۰
است.
اگر FORCE_I_ALIGN را تعیین کنید، ppmtompeg مقدار فریمهای آزمایشی را به اندازه کافی افزایش میدهد تا تراز فریمها حفظ شود.
اگر فریمهای کافی برای تخصیص به تمام slaveها به تعداد مشخصشده وجود نداشته باشد، ppmtompeg به برخی slaveها فریمهای کمتری تخصیص خواهد داد.
- PARALLEL_TIME_CHUNKS t
- با مشخص
کردن این
عبارت، گره
اصلی (master) تلاش
میکند کار
را در
بستههایی
به slaveها
واگذار کند
که پردازش
آنها t
ثانیه زمان
ببرد. master با
استفاده از
سنجش سرعتی
که در ابتدا
انجام داده
است (بخش PARALLEL_TEST_FRAMES
را ببینید)
تصمیم
میگیرد چه
تعداد فریم
در هر بسته
قرار دهد.
مسلماً این
عبارت روی
اولین بسته
کاری
ارسالشده
به هر slave که
برای سنجش
سرعت
استفاده
شده تأثیری
ندارد.
مقادیر کوچکتر t ارتباطات را افزایش میدهند، اما تعادل بار (load balancing) را بهبود میبخشند. مقدار پیشفرض ۳۰ ثانیه است.
شما تنها میتوانید یکی از گزینههای PARALLEL_TIME_CHUNKS، PARALLEL_CHUNK_TAPER یا PARALLEL_PERFECT را مشخص کنید. معمولاً PARALLEL_CHUNK_TAPER بهترین گزینه است.
- PARALLEL_CHUNK_TAPER
- با مشخص
کردن این
عبارت، master
کار را
مشابه PARALLEL_TIME_CHUNKS
توزیع
میکند، با
این تفاوت
که master
مدتزمان
ثانیهها
برای
بستهها را
خود تعیین
میکند.
ابتدا با
عددی بزرگ
شروع
میکند و با
نزدیکتر
شدن به
انتهای
کار، آن را
کاهش
میدهد.
بدین
ترتیب،
زمانی که
زمانبندی
دقیق مزیتی
ندارد بار
سربار
زمانبندی
را کاهش
میدهد،
اما
همزمان
مانع از آن
میشود که
یک slave پس از
تخصیص تمام
کارها به
سایر slaveها،
کارش زودتر
تمام شده و
در حالی که
هنوز کار
باقی مانده
است بیکار
بماند.
شما تنها میتوانید یکی از گزینههای PARALLEL_TIME_CHUNKS، PARALLEL_CHUNK_TAPER یا PARALLEL_PERFECT را مشخص کنید. معمولاً PARALLEL_CHUNK_TAPER بهترین گزینه است.
- PARALLEL_PERFECT
- اگر این
عبارت مشخص
شده باشد،
ppmtompeg با این
فرض
زمانبندی
میکند که
سرعت همه
ماشینها
تقریباً
برابر است. master
صرفاً
فریمها را
بهطور
یکنواخت
بین slaveها
تقسیم
میکند و به
هر slave تعداد
فریم
یکسانی
میرسد. اگر
برخی slaveها
سریعتر از
بقیه
باشند، کار
خود را
زودتر تمام
کرده و در
حالی که
slaveهای کندتر
همچنان
مشغول به
کارند،
بیکار باقی
میمانند.
مزیت این حالت در به حداقل رسیدن بار سربار زمانبندی است. با این حال، در شرایطی که slaveها سرعتهای متفاوتی دارند، استفاده از سیستمهای سریعتر ناکارآمد خواهد بود. در مواردی هم که slaveها سرعت یکسانی دارند، این عیب وجود دارد که همگی همزمان کار را به پایان میرسانند و خروجی خود را بهصورت ناگهانی و همزمان (burst) به تک سرور Combine Server ارسال میکنند که این امر کارایی Combine Server را کاهش داده و میتواند زمان کل فرایند را افزایش دهد.
شما تنها میتوانید یکی از گزینههای PARALLEL_TIME_CHUNKS، PARALLEL_CHUNK_TAPER یا PARALLEL_PERFECT را مشخص کنید. معمولاً PARALLEL_CHUNK_TAPER بهترین گزینه است.
- RSH remote_shell_command
- ppmtompeg دستور شل
remote_shell_command را
برای
راهاندازی
یک فرایند
در ماشینی
دیگر اجرا
میکند.
دستور
پیشفرض rsh
است، و هر
دستوری که
تعیین کنید
باید از
مفاهیم و
دستور زبان
سازگاری
برخوردار
باشد. دستور
ssh معمولاً
سازگار است.
دستوری که
ppmtompeg اجرا
میکند
شبیه این
خواهد بود: ssh
remote.host.com -l username shellcommand.
مطمئن شوید که فایلهای .rhosts یا مجوزهای کلید SSH را در جاهای مورد نیاز پیکربندی کردهاید. در غیر این صورت، ناچار به تایپ دستی گذرواژهها خواهید بود.
در برخی ماشینهای HP، دستور rsh یک پوسته محدودشده (restricted shell) است و باید به جای آن remsh را تعیین کنید.
- FORCE_I_ALIGN
- این عبارت
هر slave را
وادار
میکند
دستهای از
فریمها را
کدگذاری
کند که
مضربی از
طول الگو
باشد (بخش PATTERN
را ببینید).
از آنجا که
اولین فریم
در هر الگو
یک فریم I
است، این
کار هر دسته
کدگذاریشده
توسط یک slave را
مجبور
میکند که
با یک فریم I
شروع شود.
پیشتر در این مستند گفته شده بود که FORCE_I_ALIGN آرگومانی دارد که تعداد فریمهای مورد استفاده ppmtompeg را تعیین میکرد (و لازم بود مضربی از طول الگو باشد). اما ظاهراً ppmtompeg همیشه آن آرگومان را نادیده گرفته است و اکنون نیز آن را نادیده میگیرد.
- KEEP_TEMP_FILES
- این عبارت
باعث
میشود ppmtompeg
فایلهای
موقتی را که
برای ارسال
فریمهای
کدگذاریشده
به Combine Server
استفاده
میکند حذف
نکند. این
بدان
معناست که
برای هر
فریم یک
فایل مجزا
باقی خواهد
ماند، درست
مانند آنچه
با گزینه -frames
به دست
میآورید.
این گزینه بیشتر برای اشکالزدایی (debugging) کاربرد دارد..sp این ویژگی تنها در صورتی کار میکند که از یک فایلسیستم مشترک برای برقراری ارتباط بین سرورها استفاده کنید.
این گزینه در Netpbm 10.26 (ژانویه ۲۰۰۵) تازه اضافه شده بود.
نکات فایل پارامتر (Parameter File Notes)
اگر از گزینه -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 تغییر داده و مجدداً کامپایل کنید).
اطلاعات عمومی استفاده (GENERAL USAGE INFORMATION)
Qscale
مقادیر مقیاس کوانتیزاسیون (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 حاصل را به یکدیگر متصل کنید.
برشها (Slices)
یک برش (slice) یک واحد مستقلِ قابل رمزگشایی در یک فریم است. اندازه آن میتواند به کوچکی یک ماکروبلاک یا به بزرگی کل فریم باشد. صرف نظر از خطاهای مخابره، افزودن برشها تأثیری بر کیفیت یا سرعت ندارد؛ تنها اثر آن کاهش جزئی در کارایی فشردهسازی است. برشهای بیشتر برای مخابرههای دارای نویز استفاده میشوند تا بازیابی خطاها ممکنتر باشد. از آنجا که معمولاً خطاها چندان مشکلساز نیستند، معمولاً تنها از یک برش در هر فریم استفاده میشود.
اندازه برش را با دستور SLICES_PER_FRAME در فایل پارامتر کنترل کنید.
برخی از سیستمهای پخش MPEG نیازمند آن هستند که هر برش از سطرهای کاملی از ماکروبلاکها تشکیل شده باشد. اگر برای این نوع پخشکنندهها انکود میکنید، در صورتی که ارتفاع تصویر H پیکسل باشد، باید SLICES_PER_FRAME را بر روی عددی تنظیم کنید که H/16 بر آن بخشپذیر باشد. به عنوان مثال، اگر ارتفاع تصویر ۲۴۰ پیکسل (۱۵ ماکروبلاک) باشد، باید تنها از ۱۵، ۵، ۳ یا ۱ برش در هر فریم استفاده کنید.
نکته: این سیستمهای پخش MPEG واقعاً اشتباه عمل میکنند، زیرا استاندارد MPEG تصریح میکند که نیازی به چنین الزامی نیست.
پنجره جستجو (Search Window)
پنجره جستجو پنجرهای است که در آن ppmtompeg به دنبال بردارهای حرکت (motion vectors) میگردد. این پنجره یک مربع است. میتوانید اندازه این مربع و این که آیا بردارهای حرکت نیمپیکسلی مجاز باشند یا خیر را با دستورات RANGE و PIXEL در فایل پارامتر مشخص کنید.
فریمهای I، فریمهای P و فریمهای B
در 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 در فایل پارامتر مشخص نمایید.
آمارها (Statistics)
ppmtompeg میتواند آمارهای گوناگونی را دربارهٔ کدگذاری تولید کند. گزینههای -stat، -snr، -mv_histogram، -quiet، -no_frame_summary و -bit_rate_info را ببینید.
عملیات موازی (PARALLEL OPERATION)
شما میتوانید 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 |
اندازهگیریهای این جدول با ورودیها و خروجیها از طریق یک سیستمفایل محلی متصل مرسوم انجام شده است. اگر از یک سیستمفایل شبکهای روی یک اتصال اترنت 10 MB/s استفاده میکنید، این موضوع بیشتر از سرعت پردازنده (CPU)، سرعت شما را محدود میکند. در این شرایط، صرفنظر از اینکه پردازندههای شما چقدر سریع باشند، انتظار بیش از ۴ یا ۵ فریم بر ثانیه را نداشته باشید.
سرعت شبکه در حالتی که کارگزارها (slaves) به فایلهای ورودی دسترسی مستقیمِ سیستمفایلی ندارند -- یعنی آنها را بهصورت REMOTE اعلان کردهاید -- حتی بیشتر از این به یک گلوگاه تبدیل میشود.
در جایی که ورودی/خروجی (I/O) گلوگاه باشد، اندازهٔ فریمهای ورودی میتواند تفاوت بزرگی ایجاد کند. بنابراین، ورودی YUV بهتر از PPM، و ورودی JPEG از هر دوی آنها بهتر است.
هنگامی که برای نخستین بار قصد راهاندازی حالت موازی را دارید، حتماً از گزینهٔ -debug_machines استفاده کنید تا بتوانید روند رویدادها را مشاهده نمایید. همچنین گزینهٔ -debug_sockets میتواند به شما در عیبیابی مشکلات ارتباطی کمک کند.
نویسندگان (AUTHORS)
- 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
منبع سند (DOCUMENT SOURCE)
این صفحهٔ راهنما توسط ابزار Netpbm به نام 'makeman' از روی منبع HTML تولید شده است. مستندات اصلی در آدرس زیر قرار دارد:
| 23 July 2006 | netpbm documentation |