.\" This man page was generated by the Netpbm tool 'makeman' from HTML source. .\" Do not hand-hack it! If you have bug fixes or improvements, please find .\" the corresponding HTML page on the Netpbm website, generate a patch .\" against that, and send it to the Netpbm maintainer. .TH "Ppmtompeg User Manual" 0 "23 July 2006" "netpbm documentation" .SH "نام (NAME)" ppmtompeg \- کدگذاری یک جریان بیتی MPEG-1 .UN synopsis .SH "خلاصه دستور (SYNOPSIS)" \fBppmtompeg\fP [\fIoptions\fP] \fIparameter-file\fP .UN description .SH "توضیحات (DESCRIPTION)" .PP این برنامه بخشی از .BR "Netpbm" (1)\c \& است. .PP \fBppmtompeg\fP یک جریان ویدیویی MPEG-1 تولید می‌کند. MPEG-1 اولین روش بزرگ فشرده‌سازی ویدیو است، و همان چیزی است که در Video CDها (VCD) استفاده می‌شد. منشأ \fBppmtompeg\fP به سال ۱۹۹۵ بازمی‌گردد. DVD از روش پیشرفته‌تری یعنی MPEG-2 استفاده می‌کند. یک روش حتی جدیدتر نیز به نام MPEG-4 وجود دارد که Divx نیز نامیده می‌شود. نمی‌دانم کجا می‌توان کاربرد آن را یافت. .PP از نظر فنی میان یک روش فشرده‌سازی برای ویدیو و یک فرمت واقعی فایل (جریان) برای یک فیلم تفاوت وجود دارد، و نمی‌دانم آیا می‌توان به‌درستی گفت که فرمت جریانی که \fBppmtompeg\fP تولید می‌کند MPEG-1 است یا خیر. .PP ابزار Mencoder از بسته .UR http://www.mplayerhq.hu Mplayer .UE \& احتمالاً برای اکثر نیازهای تولید فرمت ویدیویی برتر است، اگر تنها به این دلیل نباشد که محبوب‌تر است. .PP کتابخانه برنامه‌نویسی .UR http://pm2v.free.fr \fBPM2V\fP .UE \& جریان‌های MPEG-2 تولید می‌کند. .PP از .UR http://www.mplayerhq.hu Mplayer .UE \& (که بخشی از Netpbm نیست) برای انجام تبدیل معکوس استفاده کنید: ایجاد مجموعه‌ای از فایل‌های PNM از یک جریان MPEG. .PP \fIparam_file\fP یک فایل پارامتر است که شامل فهرستی از فایل‌های ورودی و سایر پارامترها است. این فایل در زیر با جزئیات شرح داده شده است. .PP برای درک این برنامه، باید درباره فرمت پیچیده MPEG-1 اطلاعاتی داشته باشید. یکی از منابع اطلاعات درباره این فرمت استاندارد، بخش Introduction to MPEG در .UR http://www.faqs.org/faqs/compression-faq Compression FAQ .UE \& است. .UN options .SH "گزینه‌ها (OPTIONS)" .PP گزینه‌های \fB-gop\fP، \fB-combine_gops\fP، \fB-frames\fP و \fB-combine_frames\fP همگی مانعة‌الجمع هستند. .TP \fB-stat stat_file\fP این گزینه باعث می‌شود \fBppmtompeg\fP آماری را که در خروجی استاندارد می‌نویسد، به انتهای فایل \fIstat_file\fP نیز اضافه کند. این آمار از اختصارات زیر استفاده می‌کند: بیت بر بلوک (bpb)، بیت بر فریم (bpf)، ثانیه بر فریم (spf) و بیت بر ثانیه (bps). .sp این آمار شامل تعداد فریم‌های I، P و B و اطلاعاتی درباره فشرده‌سازی و کیفیت است. .TP \fB-quiet\fP \fInum_seconds\fP باعث می‌شود \fBppmtompeg\fP زمان باقی‌مانده را زودتر از هر \fInum_seconds\fP ثانیه یک‌بار گزارش نکند (مگر اینکه تخمین زمان افزایش یابد، که نزدیک به شروع اجرا رخ خواهد داد). مقدار منفی به \fBppmtompeg\fP می‌گوید که اصلاً گزارش ندهد. مقدار 0 پیش‌فرض است (یک‌بار پس از هر فریم گزارش می‌دهد). توجه داشته باشید که زمان باقی‌مانده یک تخمین است و زمان صرف‌شده برای خواندن فریم‌ها را در نظر نمی‌گیرد. .TP \fB-realquiet\fP باعث می‌شود \fBppmtompeg\fP کاملاً بی‌صدا اجرا شود، به طوری که تنها خروجی صفحه، خطاها باشند. این گزینه به‌ویژه هنگام خواندن ورودی از stdin مفید است. معادل گزینه مشترک \fB-quiet\fP در اکثر برنامه‌های دیگر Netpbm است. .TP \fB-no_frame_summary\fP این گزینه از چاپ خط خلاصه برای هر فریم توسط \fBppmtompeg\fP جلوگیری می‌کند. .TP \fB-float_dct\fP \fBppmtompeg\fP را وادار می‌کند تا از نسخه دقیق‌تر، اما از نظر محاسباتی سنگین‌تر DCT استفاده کند. .TP \fB-gop\fP \fIgop_num\fP باعث می‌شود \fBppmtompeg\fP تنها GOP شماره‌گذاری‌شده را کدگذاری کند (اولین GOP عدد 0 است). فایل پارامتر همانند استفاده معمولی است. فایل خروجی همان فایل خروجی معمولی با پسوند \fB.gop.\fP\fIgop_num\fP خواهد بود. \fBppmtompeg\fP هیچ اطلاعات توالی خروجی نمی‌دهد. .TP \fB-combine_gops\fP باعث می‌شود \fBppmtompeg\fP صرفاً تعدادی فایل GOP را در یک جریان خروجی واحد MPEG ترکیب کند. \fBppmtompeg\fP یک سرآیند و پس‌آیند توالی درج می‌کند. در این حالت، فایل پارامتر تنها نیاز دارد شامل مقدار SIZE، یک فایل خروجی و شاید فهرستی از فایل‌های GOP ورودی باشد (به زیر مراجعه کنید). اگر فهرستی از فایل‌های GOP ورودی ارائه ندهید، آنگاه \fBppmtompeg\fP فرض می‌کند که از همان فایل پارامتری استفاده می‌کنید که هنگام ایجاد ورودی (با گزینه \fB-gop\fP) استفاده کرده‌اید و نام‌های فایل gop متناظر را خودش محاسبه می‌کند. اگر این‌طور نیست، می‌توانید فایل‌های GOP ورودی را به همان روش فایل‌های ورودی معمولی مشخص کنید -- جز اینکه به جای استفاده از INPUT_DIR، INPUT و END_INPUT، از GOP_INPUT_DIR، GOP_INPUT و GOP_END_INPUT استفاده کنید. اگر هیچ فایل ورودی GOP مشخص نشده باشد، پیش‌فرض استفاده از نام فایل خروجی با پسوند \fB.gop.\fP\fIgop_num\fP، با شروع \fIgop_num\fP از 0، به عنوان فایل‌های ورودی است. .sp بنابراین، مگر اینکه فایل‌های GOP را از منابع مختلف ترکیب و جور کنید، می‌توانید به‌سادگی از همان فایل پارامتر برای ایجاد فایل‌های GOP (\fB-gop\fP) و سپس تبدیل آن‌ها به یک جریان MPEG (\fB-combine_gops\fP) استفاده کنید. .TP \fB-frames \fIfirst_frame\fP \fIlast_frame\fP\fP این گزینه باعث می‌شود \fBppmtompeg\fP تنها فریم‌های شماره‌گذاری‌شده از \fIfirst_frame\fP تا \fIlast_frame\fP (شامل هر دو) را کدگذاری کند. فایل پارامتر همانند حالت استفاده معمولی است. خروجی در فایل‌های جداگانه قرار خواهد گرفت، یک فایل برای هر فریم، با نام فایل خروجی معمولی همراه با پسوند \fB.frame.\fP\fIframe_num\fP. هیچ اطلاعات سرآیند GOP خروجی داده نمی‌شود. (بنابراین، فایل پارامتر نیازی به داشتن مقدار GOP_SIZE ندارد). .sp بعداً برای ترکیب این فریم‌ها در یک جریان MPEG از \fBppmtompeg -combine_frames\fP استفاده کنید. .TP \fB-combine_frames\fP این گزینه باعث می‌شود \fBppmtompeg\fP صرفاً برخی فریم‌های مجزای MPEG (مانند فریم‌هایی که ممکن است در اجرای قبلی \fBppmtompeg -frames\fP ایجاد کرده باشید) را در یک جریان MPEG واحد ترکیب کند. سرآیندهای توالی و GOP به طور مناسب درج می‌شوند. در این حالت، فایل پارامتر تنها نیاز دارد شامل مقدار SIZE، مقدار GOP_SIZE، یک فایل خروجی و شاید فهرستی از فایل‌های فریم باشد (به زیر مراجعه کنید). .sp فایل پارامتر می‌تواند فایل‌های فریم ورودی را به همان روش فایل‌های ورودی معمولی مشخص کند -- جز اینکه به جای استفاده از INPUT_DIR، INPUT و END_INPUT، از FRAME_INPUT_DIR، FRAME_INPUT و FRAME_END_INPUT استفاده کنید. اگر هیچ فایل فریم ورودی مشخص نشده باشد، پیش‌فرض استفاده از نام فایل خروجی با پسوند \fB.frame.\fP\fIframe_num\fP، با شروع \fIframe_num\fP از 0، به عنوان فایل‌های ورودی است. .TP \fB-nice\fP این گزینه باعث می‌شود \fBppmtompeg\fP هر فرایند دوردست (remote) را با اولویت پایین (nice) اجرا کند. (این مورد تنها در صورتی مرتبط است که \fBppmtompeg\fP را در حالت موازی اجرا کنید. در غیر این صورت، هیچ فرایند دوردستی وجود ندارد). به \(lqman nice\(rq مراجعه کنید..TP \fB-max_machines \fInum_machines\fP\fP این گزینه باعث می‌شود \fBppmtompeg\fP حداکثر از \fInum_machines\fP ماشین به عنوان خدمتگزار (slave) برای استفاده در کدگذاری موازی بهره ببرد. .TP \fB-snr\fP این گزینه باعث می‌شود \fBppmtompeg\fP نسبت سیگنال به نویز (SNR) را در آمار گزارش‌شده لحاظ کند. برای هر فریم SNR (Y U V) و اوج SNR (Y U V) را چاپ می‌کند. در بخش خلاصه، تنها میانگین‌های روشنایی (Y) را چاپ می‌کند. مقدار SNR به صورت 10*log(واریانس اصلی/واریانس خطا) تعریف می‌شود. مقدار اوج SNR به صورت 20*log(255/RMSE) تعریف می‌شود. توجه داشته باشید که با استفاده از این گزینه، سرعت اجرای \fBppmtompeg\fP کمی کاهش می‌یابد. .TP \fB-mse\fP این گزینه باعث می‌شود \fBppmtompeg\fP میانگین مربعات خطا (MSE) را به ازای هر بلوک گزارش کند. همچنین کیفیت تصاویر نیز به‌طور خودکار گزارش می‌شود، بنابراین دیگر نیازی به مشخص کردن \fB-snr\fP نخواهد بود. .TP \fB-bit_rate_info\fP \fIrate_file\fP این گزینه باعث می‌شود \fBppmtompeg\fP اطلاعات نرخ بیت را در فایل \fIrate_file\fP بنویسد. اطلاعات نرخ بیت شامل بیت بر فریم و همچنین بیت در بازه فریم I تا فریم I بعدی است. .TP \fB-mv_histogram\fP این گزینه باعث می‌شود \fBppmtompeg\fP هیستوگرامی از بردارهای حرکت را به عنوان بخشی از آمار چاپ کند. سه هیستوگرام وجود دارد -- یکی برای فریم‌های P، یکی برای بردارهای حرکت رو به جلوی فریم B، و یکی برای بردارهای حرکت رو به عقب فریم B. .sp خروجی به صورت یک ماتریس است که هر مدخل آن متناظر با یک بردار حرکت در پنجره جستجو است. مرکز ماتریس نشان‌دهنده بردارهای حرکت (0,0) است. .TP \fB-debug_sockets\fP این گزینه باعث می‌شود \fBppmtompeg\fP پیام‌هایی را که ارتباط بین ماشین‌ها را هنگام اجرای \fBppmtompeg\fP در .UR #parallel حالت موازی .UE \& شرح می‌دهند، در خروجی استاندارد چاپ کند. .TP \fB-debug_machines\fP این گزینه باعث می‌شود \fBppmtompeg\fP پیام‌هایی را که روند پیشرفت تبدیل در ماشین‌های مختلف را هنگام اجرای \fBppmtompeg\fP در .UR #parallel حالت موازی .UE \& شرح می‌دهند، در خروجی استاندارد چاپ کند. .UN parmfile .SH "فایل پارامتر (PARAMETER FILE)" .PP فایل پارامتر \fBباید\fP حاوی خطوط زیر باشد (مگر در هنگام استفاده از گزینه‌های \fB-combine_gops\fP یا \fB-combine_frames\fP): .TP \fBPATTERN\fP \fIpattern\fP این عبارت الگو (توالی) فریم‌های I، فریم‌های P و فریم‌های B را مشخص می‌کند. \fIpattern\fP صرفاً توالی‌ای از حروف I، P و B بدون هیچ فاصله‌ای بین آن‌ها است. مثال: .nf PATTERN IBBPBBPBBPBBPBB .fi .sp ببینید: .UR #ipb فریم‌های I، فریم‌های P، فریم‌های B .UE \&. .TP \fBOUTPUT\fP \fIoutput file\fP نام فایلی را مشخص می‌کند که جریان MPEG خروجی در آن قرار می‌گیرد. .TP \fBINPUT_DIR\fP \fIdirectory\fP این عبارت مشخص می‌کند تصاویر ورودی (فریم‌ها) از کجا می‌آیند. اگر هر فریم در یک فایل جداگانه باشد، \fIdirectory\fP پوشه‌ای است که همه آن‌ها در آن قرار دارند. برای اشاره به دایرکتوری جاری می‌توانید از \fB.\fP استفاده کنید. یک \fIdirectory\fP تهی (null) به دایرکتوری ریشه درخت فایل‌های سیستم اشاره دارد. .sp برای اینکه \fBppmtompeg\fP همه فریم‌ها را به صورت ترتیبی از ورودی استاندارد بخواند، مشخص کنید: .nf INPUT_DIR stdin .fi .TP \fBINPUT\fP پس از این خط باید فهرستی از فایل‌های ورودی (به ترتیب نمایش) و سپس خط \fBEND_INPUT\fP قرار گیرد. .sp سه نوع خط بین INPUT و END_INPUT می‌تواند قرار گیرد. نخست، یک خط ممکن است صرفاً نام یک فایل ورودی باشد. دوم، خط می‌تواند به شکل \fIsingle_star_expr\fP \fB[\fP\fIx\fP\fB-\fP\fIy\fP\fB]\fP باشد. \fIsingle_star_expr\fP می‌تواند یک نویسه \fB*\fP در خود داشته باشد. این نویسه با تمامی اعداد بین x و y (شامل هر دو) جایگزین می‌شود. برای مثال، خط \fBtennis*.ppm [12-15]\fP به فایل‌های tennis12.ppm، tennis13.ppm، tennis14.ppm و tennis15.ppm اشاره دارد. .sp همچنین پر کردن یکنواخت با صفر (zero-padding) نیز اعمال می‌شود. برای مثال، خط \fBfootball.*.ppm [001-130]\fP به فایل‌های football.001.ppm، football.002.ppm، ...، football.009.ppm، football.010.ppm، ... و football.130.ppm اشاره دارد. .sp نوع سوم خط به این صورت است: \fIsingle_star_expr\fP \fB[\fP\fIx\fP\fB-\fP\fIy\fP\fB+\fP\fIs\fP\fB]\fP، که در آن با خط دقیقاً مشابه بالا رفتار می‌شود، به جز اینکه گام پرش به اندازه \fIs\fP خواهد بود. بنابراین، خط \fBfootball.*.ppm [001-130+4]\fP به فایل‌های football.001.ppm، football.005.ppm، football.009.ppm، football.013.ppm و غیره اشاره دارد. .sp علاوه بر این، یک خط می‌تواند یک دستور شل را برای اجرا مشخص کند تا خطوطی تولید شوند که به شیوه شرح‌داده‌شده در بالا تفسیر گردند؛ گویی که آن خطوط به جای دستور مستقیماً در فایل پارامتر قرار داشتند. مانند Bourne Shell، از بک‌تیک‌ها استفاده کنید، به این صورت: .nf `cat myfilelist` .fi .sp اگر ورودی از ورودی استاندارد باشد (طبق دستور \fBINPUT_DIR\fP)، \fBppmtompeg\fP بلوک \fBINPUT\fP/\fBEND_INPUT\fP را نادیده می‌گیرد، اما این بلوک همچنان باید وجود داشته باشد. .TP \fBBASE_FILE_FORMAT\fP {\fBPPM\fP | \fBPNM\fP | \fBYUV\fP | \fBJPEG\fP | \fBJMOVIE\fP} \fBppmtompeg\fP باید در نخستین گام پردازش، تمام فایل‌های ورودی را به یکی از فرمت‌های زیر تبدیل کند: PNM، YUV، JPEG(v4) یا JMOVIE. (اگر فایل‌های ورودی شما از پیش در یکی از این فرمت‌ها باشند، تبدیل ممکن است بسیار ناچیز یا بدون تغییر باشد). این خط مشخص می‌کند کدام‌یک از این چهار فرمت مد نظر است. PPM در واقع زیرمجموعه‌ای از PNM است. مشخص‌سازی جداگانه آن به جهت سازگاری با گذشته مجاز است. در برنامه‌های جدید به جای PPM از PNM استفاده کنید. .TP \fBINPUT_CONVERT\fP \fIconversion_command\fP باید نحوه تبدیل یک فایل به فرمت پایه فایل را مشخص کنید. اگر هیچ تبدیلی لازم نباشد، صرفاً می‌نویسید: .nf INPUT_CONVERT * .fi .sp در غیر این صورت، \fIconversion_command\fP یک دستور شل است که باعث می‌شود تصویری با فرمت مشخص‌شده توسط \fBBASE_FILE_FORMAT\fP در خروجی استاندارد نوشته شود. \fBppmtompeg\fP این دستور را به ازای هر خط بین \fBINPUT\fP و \fBEND_INPUT\fP (که معمولاً، ولی نه لزوماً، نام یک فایل است) یک بار اجرا می‌کند. در دستور تبدیل، \fBppmtompeg\fP هر '*' را با محتوای آن خط جایگزین می‌کند. اگر تعدادی فایل gif داشتید، می‌توانید بنویسید: .nf INPUT_CONVERT giftopnm * .fi اگر تعدادی فایل جداگانه a.Y، a.U و a.V دارید (که در آن‌ها نمونه‌برداری فرعی یا subsample از U و V از پیش انجام شده است)، می‌توانید بنویسید: .nf INPUT_CONVERT cat *.Y *.U *.V .fi.sp تبدیل ورودی هنگام دریافت ورودی از stdin مجاز نیست، بنابراین همان‌طور که در بالا توضیح داده شد از .nf INPUT_CONVERT * .fi استفاده کنید. .TP \fBSIZE\fP \fIwidth\fP\fBx\fP\fIheight\fP .sp مقادیر \fIwidth\fP و \fIheight\fP پهنا و ارتفاع هر فریم را بر حسب پیکسل مشخص می‌کنند. .sp هنگامی که \fBppmtompeg\fP بتواند این اطلاعات را از فایل‌های تصویر ورودی به دست آورد، پارامتر \fBSIZE\fP را نادیده می‌گیرد و می‌توانید آن را حذف کنید. .sp هنگامی که فایل‌های تصویر در قالب YUV باشند، فایل‌ها حاوی اطلاعات ابعاد نیستند، بنابراین \fBSIZE\fP الزامی است. .sp هنگامی که \fBppmtompeg\fP در حالت موازی اجرا می‌شود، همهٔ فرایندها در شبکه به فایل‌های تصویر دسترسی ندارند، بنابراین \fBSIZE\fP الزامی است و باید ابعادی مشابه با فایل‌های تصویر ورودی مشخص کند. .TP \fBYUV_SIZE\fP \fIwidth\fP\fBx\fP\fIheight\fP این یک مترادف منسوخ برای \fBSIZE\fP است. .TP \fBYUV_FORMAT\fP {\fBABEKAS\fP | \fBPHILLIPS\fP | \fBUCB\fP | \fBEYUV\fP | \fIpattern\fP} این دستور تنها زمانی معنا دارد که \fBBASE_FILE_FORMAT\fP قالب YUV را تعیین کرده باشد، و در آن صورت الزامی است. این گزینه زیرقالب ردهٔ YUV را مشخص می‌کند. .TP \fBGOP_SIZE\fP \fIn\fP مقدار \fIn\fP تعداد فریم‌ها در یک گروه تصاویر (Group of Pictures یا GOP) است. با این استثنا که چون یک GOP باید با یک فریم I شروع شود، \fBppmtompeg\fP تا جای ممکن طول GOP را از \fIn\fP بیشتر می‌کند تا GOP بعدی بتواند با یک فریم I آغاز گردد. .sp به‌طور معمول، منطقی است که اندازهٔ GOP خود را مضربی از طول الگوی خود قرار دهید (طول الگو توسط دستور PATTERN در فایل پارامتر تعیین می‌شود). .sp ببینید .UR #gop Group Of Pictures .UE \&. .TP \fBSLICES_PER_FRAME\fP \fIn\fP مقدار \fIn\fP تقریباً تعداد برش‌ها در هر فریم است. توجه داشته باشید که حداقل یک پخش‌کنندهٔ MPEG در صورتی که برش‌ها از سمت چپ تصویر شروع نشوند ممکن است خطا دهد. برای اطمینان از رخ ندادن این مشکل، مطمئن شوید که تعداد سطرها بر SLICES_PER_FRAME بخش‌پذیر باشد. .TP \fBPIXEL\fP {\fBFULL\fP | \fBHALF\fP} استفاده از بردارهای حرکتی نیم‌پیکسلی، یا صرفاً تمام‌پیکسلی. معمولاً مهم است که از بردارهای حرکتی نیم‌پیکسلی استفاده کنید، زیرا هم به کیفیت بهتر و هم به فشرده‌سازی بهتری می‌انجامد. .TP \fBRANGE\fP \fIn\fP استفاده از محدودهٔ جستجوی \fIn\fP پیکسل در هر یک از چهار جهت از پیکسل مورد نظر. (بنابراین پنجرهٔ جستجو مربعی با ضلع \fIn\fP*2 پیکسل است). .TP \fBPSEARCH_ALG\fP {\fBEXHAUSTIVE\fP | \fBTWOLEVEL\fP | \fBSUBSAMPLE\fP | \fBLOGARITHMIC\fP} این دستور به \fBppmtompeg\fP می‌گوید که از چه نوع روش جستجویی (الگوریتم) برای فریم‌های P استفاده کند. شما ترکیب مورد نظر خود از سرعت و فشرده‌سازی را انتخاب می‌کنید. گزینهٔ \fBEXHAUSTIVE\fP بهترین فشرده‌سازی را ارائه می‌دهد، اما \fBLOGARITHMIC\fP سریع‌ترین است. \fBTWOLEVEL\fP یک جستجوی تمام‌پیکسلی همه‌جانبه است که به دنبال آن یک جستجوی محلی نیم‌پیکسلی در اطراف بهترین بردار تمام‌پیکسلی انجام می‌شود (گزینهٔ PIXEL برای این روش جستجو نادیده گرفته می‌شود). .TP \fBBSEARCH_ALG\fP {\fBSIMPLE\fP | \fBCROSS2\fP | \fBEXHAUSTIVE\fP} این دستور به \fBppmtompeg\fP می‌گوید که از چه نوع روش جستجویی (الگوریتم) برای فریم‌های B استفاده کند. روش \fBSIMPLE\fP به معنای یافتن بهترین بردارهای رو به جلو و رو به عقب، و سپس درون‌یابی است. روش \fBCROSS2\fP به این معناست که آن دو بردار را پیدا کرده، سپس بررسی کند کدام بردار رو به عقب بیشترین همخوانی را با بهترین بردار رو به جلو دارد، و برعکس. گزینهٔ \fBEXHAUSTIVE\fP یک جستجوی n به توان دو (n-squared) انجام می‌دهد و در مقایسه با روش‌های دیگر \fIبسیار\fP کند است (سرعت \fBCROSS2\fP حدود نصف سرعت \fBSIMPLE\fP است). .TP \fBIQSCALE\fP \fIn\fP استفاده از \fIn\fP به عنوان qscale برای فریم‌های I. ببینید .UR #qscale Qscale .UE \&. .TP \fBPQSCALE\fP \fIn\fP استفاده از \fIn\fP به عنوان qscale برای فریم‌های P. ببینید .UR #qscale Qscale .UE \&. .TP \fBBQSCALE\fP \fIn\fP استفاده از \fIn\fP به عنوان qscale برای فریم‌های B. ببینید .UR #qscale Qscale .UE \&. .TP \fBREFERENCE_FRAME\fP {\fBORIGINAL\fP | \fBDECODED\fP} این دستور مشخص می‌کند که \fBppmtompeg\fP هنگام محاسبهٔ بردارهای حرکتی از تصاویر اصلی استفاده کند یا از تصاویر دیکودشده. استفاده از تصاویر دیکودشده دقیق‌تر است و باید کیفیت پخش خروجی را افزایش دهد، اما باعث طولانی‌تر شدن زمان کدگذاری می‌شود و به نظر می‌رسد فشرده‌سازی ضعیف‌تری ارائه دهد. همچنین پیچیدگی‌هایی در کدگذاری موازی ایجاد می‌کند (به بخش مربوط به کدگذاری موازی مراجعه کنید). یک راه‌حل میانه این است که در اینجا \fBORIGINAL\fP را انتخاب کنید و اگر کیفیت به اندازهٔ کافی مناسب نیست، qscale را کاهش دهید (به \fBQSCALE\fP مراجعه کنید). .B اصلی یا دیکودشده؟ (نرمال‌شده) .TS r c c c c c. _ Reference Compression Speed Quality I Quality P Quality B Decoded 1000 1000 1000 969 919 Original 885 1373 1000 912 884 .TE .PP خطوط زیر اختیاری هستند: .TP \fBFORCE_ENCODE_LAST_FRAME\fP این دستور منسوخ شده است و هیچ کاری انجام نمی‌دهد. .sp پیش از Netpbm 10.26 (ژانویهٔ ۲۰۰۵)، \fBppmtompeg\fP فریم‌های B انتهایی فیلم را حذف می‌کرد، زیرا یک فیلم نمی‌تواند با یک فریم B به پایان برسد. (ببینید .UR #ipb I Frames, P Frames, B Frames .UE \&.) برای جلوگیری از رخ دادن این اتفاق و دستیابی به همان عملکردی که \fBppmtompeg\fP امروزه دارد، باید \fBFORCE_ENCODE_LAST_FRAME\fP را مشخص می‌کردید. .TP \fBNIQTABLE\fP این دستور یک جدول کوانتیزاسیون غیردرون‌فریمی (non-intra) سفارشی را مشخص می‌کند. اگر این دستور را مشخص نکنید، \fBppmtompeg\fP از جدول کوانتیزاسیون غیردرون‌فریمی پیش‌فرض استفاده می‌کند. .sp ۸ خطی که بلافاصله پس از \fBNIQTABLE\fP می‌آیند، جدول کوانتیزاسیون را مشخص می‌کنند. هر خط یک سطر جدول را تعریف کرده و شامل ۸ عدد صحیح جداشده با فاصله است که ستون‌های جدول را تشکیل می‌دهند..TP \fBIQTABLE\fP این عبارت مشابه NIQTABLE است، اما برای جدول کوانتیزاسیون درون‌فریمی (intra quantization table) کاربرد دارد. .TP \fBASPECT_RATIO\fP \fIratio\fP این عبارت نسبت تصویر (aspect ratio) را تعیین می‌کند تا \fBppmtompeg\fP آن را در خروجی MPEG درج کند. کاربرد دقیق این مورد مشخص نیست. .sp مقدار \fIratio\fP باید یکی از مقادیر 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 باشد. .TP \fBFRAME_RATE\fP \fIrate\fP این عبارت نرخ فریم (frame rate) را مشخص می‌کند تا \fBppmtompeg\fP آن را در خروجی MPEG درج کند. برخی پخش‌کننده‌ها از این مقدار برای تعیین نرخ پخش استفاده می‌کنند. .sp مقدار \fIrate\fP باید یکی از مقادیر 23.976، 24، 25، 29.97، 30، 50، 59.94 یا 60 باشد. .TP \fBBIT_RATE\fP \fIrate\fP این عبارت نرخ بیت را برای کدگذاری با نرخ بیت ثابت (CBR یا Constant Bit Rate) تعیین می‌کند. .sp مقدار \fIrate\fP باید یک عدد صحیح باشد. .TP \fBBUFFER_SIZE\fP \fIsize\fP این عبارت مقداری را تعیین می‌کند که \fBppmtompeg\fP در خروجی MPEG برای اندازه بافر Video Buffering Verifier (VBV) مورد نیاز جهت رمزگشایی دنباله مشخص می‌سازد. .sp بافر بازبینی ویدیو (Video Verifying Buffer) بافری است که رمزگشا بیت‌های کدگشایی‌شده را در آن نگه می‌دارد تا سرعت ناهموار رمزگشایی را با سرعت پخش ثابت و مورد نیاز هماهنگ کند. .sp هنگامی که \fBppmtompeg\fP تصویر را کدگذاری می‌کند، فرایند رمزگشایی را با فرض بافر VBV به اندازه تعیین‌شده توسط شما، بر حسب این که با رمزگشایی هر فریم چند بیت در VBV خواهد بود شبیه‌سازی می‌کند. .sp اگر عبارت \fBWARN_VBV_UNDERFLOW\fP را تعیین کنید، \fBppmtompeg\fP هر بار که در شبیه‌سازی کمبود بافر (underflow) رخ دهد هشداری صادر می‌کند؛ این امر نشان‌دهنده آن است که در هنگام پخش ممکن است کمبود بافر رخ دهد و بافر بیش از حد کوچک است. .sp اگر عبارت \fBWARN_VBV_OVERFLOW\fP را تعیین کنید، \fBppmtompeg\fP هر بار که در شبیه‌سازی سرریز بافر (overflow) رخ دهد هشداری صادر می‌کند؛ این امر نشان‌دهنده آن است که در هنگام پخش ممکن است سرریز رخ دهد و بافر بیش از حد کوچک است. .TP \fBWARN_VBV_UNDERFLOW\fP .TP \fBWARN_VBV_OVERFLOW\fP بخش \fBBUFFER_SIZE\fP را ببینید. .sp این گزینه‌ها در Netpbm 10.26 (ژانویه ۲۰۰۵) اضافه شدند. پیش از آن، \fBppmtompeg\fP همیشه این هشدارها را صادر می‌کرد. عبارت‌های زیر تنها در عملکرد موازی (parallel) اعمال می‌شوند: .TP \fBPARALLEL\fP این عبارت، همراه با \fBEND PARALLEL\fP، باعث می‌شود \fBppmtompeg\fP در حالت موازی اجرا شود. بخش .UR #parallel Parallel Operation .UE \& را ببینید. .TP \fBEND PARALLEL\fP این عبارت همراه با \fBPARALLEL\fP به کار می‌رود. .TP \fBPARALLEL_TEST_FRAMES\fP \fIn\fP گره اصلی (master) کار را با سنجش سرعت هر یک از گره‌های فرعی (slave) آغاز می‌کند. این کار با دادن \fIn\fP فریم به هر slave برای کدگذاری و اندازه‌گیری زمان پایان کار انجام می‌شود. این‌ها صرفاً فریم‌های آزمایشی نیستند، بلکه فریم‌های واقعی هستند و نتایج آن‌ها بخشی از خروجی نهایی را تشکیل می‌دهد. \fBppmtompeg\fP قدیمی است و زمان را بر حسب ثانیه‌های کامل اندازه‌گیری می‌کند، بنابراین برای به دست آوردن زمان‌بندی مناسب، تعداد فریم‌ها را به‌اندازه‌ای تعیین کنید که پردازش آن‌ها دست‌کم ۵ ثانیه طول بکشد. مقدار پیش‌فرض ۱۰ است. .sp اگر \fBFORCE_I_ALIGN\fP را تعیین کنید، \fBppmtompeg\fP مقدار فریم‌های آزمایشی را به اندازه کافی افزایش می‌دهد تا تراز فریم‌ها حفظ شود. .sp اگر فریم‌های کافی برای تخصیص به تمام slaveها به تعداد مشخص‌شده وجود نداشته باشد، \fBppmtompeg\fP به برخی slaveها فریم‌های کمتری تخصیص خواهد داد. .TP \fBPARALLEL_TIME_CHUNKS\fP \fIt\fP با مشخص کردن این عبارت، گره اصلی (master) تلاش می‌کند کار را در بسته‌هایی به slaveها واگذار کند که پردازش آن‌ها \fIt\fP ثانیه زمان ببرد. master با استفاده از سنجش سرعتی که در ابتدا انجام داده است (بخش PARALLEL_TEST_FRAMES را ببینید) تصمیم می‌گیرد چه تعداد فریم در هر بسته قرار دهد. مسلماً این عبارت روی اولین بسته کاری ارسال‌شده به هر slave که برای سنجش سرعت استفاده شده تأثیری ندارد. .sp مقادیر کوچک‌تر \fIt\fP ارتباطات را افزایش می‌دهند، اما تعادل بار (load balancing) را بهبود می‌بخشند. مقدار پیش‌فرض ۳۰ ثانیه است. .sp شما تنها می‌توانید یکی از گزینه‌های PARALLEL_TIME_CHUNKS، PARALLEL_CHUNK_TAPER یا PARALLEL_PERFECT را مشخص کنید. معمولاً PARALLEL_CHUNK_TAPER بهترین گزینه است. .TP \fBPARALLEL_CHUNK_TAPER\fP با مشخص کردن این عبارت، master کار را مشابه PARALLEL_TIME_CHUNKS توزیع می‌کند، با این تفاوت که master مدت‌زمان ثانیه‌ها برای بسته‌ها را خود تعیین می‌کند. ابتدا با عددی بزرگ شروع می‌کند و با نزدیک‌تر شدن به انتهای کار، آن را کاهش می‌دهد. بدین ترتیب، زمانی که زمان‌بندی دقیق مزیتی ندارد بار سربار زمان‌بندی را کاهش می‌دهد، اما هم‌زمان مانع از آن می‌شود که یک slave پس از تخصیص تمام کارها به سایر slaveها، کارش زودتر تمام شده و در حالی که هنوز کار باقی مانده است بیکار بماند. .sp شما تنها می‌توانید یکی از گزینه‌های PARALLEL_TIME_CHUNKS، PARALLEL_CHUNK_TAPER یا PARALLEL_PERFECT را مشخص کنید. معمولاً PARALLEL_CHUNK_TAPER بهترین گزینه است. .TP \fBPARALLEL_PERFECT\fP اگر این عبارت مشخص شده باشد، \fBppmtompeg\fP با این فرض زمان‌بندی می‌کند که سرعت همه ماشین‌ها تقریباً برابر است. master صرفاً فریم‌ها را به‌طور یکنواخت بین slaveها تقسیم می‌کند و به هر slave تعداد فریم یکسانی می‌رسد. اگر برخی slaveها سریع‌تر از بقیه باشند، کار خود را زودتر تمام کرده و در حالی که slaveهای کندتر همچنان مشغول به کارند، بیکار باقی می‌مانند. .sp مزیت این حالت در به حداقل رسیدن بار سربار زمان‌بندی است. با این حال، در شرایطی که slaveها سرعت‌های متفاوتی دارند، استفاده از سیستم‌های سریع‌تر ناکارآمد خواهد بود. در مواردی هم که slaveها سرعت یکسانی دارند، این عیب وجود دارد که همگی هم‌زمان کار را به پایان می‌رسانند و خروجی خود را به‌صورت ناگهانی و هم‌زمان (burst) به تک سرور Combine Server ارسال می‌کنند که این امر کارایی Combine Server را کاهش داده و می‌تواند زمان کل فرایند را افزایش دهد. .sp شما تنها می‌توانید یکی از گزینه‌های PARALLEL_TIME_CHUNKS، PARALLEL_CHUNK_TAPER یا PARALLEL_PERFECT را مشخص کنید. معمولاً PARALLEL_CHUNK_TAPER بهترین گزینه است. .TP \fBRSH\fP \fIremote_shell_command\fP \fBppmtompeg\fP دستور شل \fIremote_shell_command\fP را برای راه‌اندازی یک فرایند در ماشینی دیگر اجرا می‌کند. دستور پیش‌فرض \fBrsh\fP است، و هر دستوری که تعیین کنید باید از مفاهیم و دستور زبان سازگاری برخوردار باشد. دستور \fBssh\fP معمولاً سازگار است. دستوری که \fBppmtompeg\fP اجرا می‌کند شبیه این خواهد بود: \fBssh remote.host.com -l username shellcommand\fP. .sp مطمئن شوید که فایل‌های \fB.rhosts\fP یا مجوزهای کلید SSH را در جاهای مورد نیاز پیکربندی کرده‌اید. در غیر این صورت، ناچار به تایپ دستی گذرواژه‌ها خواهید بود. .sp در برخی ماشین‌های HP، دستور \fBrsh\fP یک پوسته محدودشده (restricted shell) است و باید به جای آن \fBremsh\fP را تعیین کنید. .TP \fBFORCE_I_ALIGN\fP این عبارت هر slave را وادار می‌کند دسته‌ای از فریم‌ها را کدگذاری کند که مضربی از طول الگو باشد (بخش \fBPATTERN\fP را ببینید). از آنجا که اولین فریم در هر الگو یک فریم I است، این کار هر دسته کدگذاری‌شده توسط یک slave را مجبور می‌کند که با یک فریم I شروع شود. .sp پیش‌تر در این مستند گفته شده بود که \fBFORCE_I_ALIGN\fP آرگومانی دارد که تعداد فریم‌های مورد استفاده \fBppmtompeg\fP را تعیین می‌کرد (و لازم بود مضربی از طول الگو باشد). اما ظاهراً \fBppmtompeg\fP همیشه آن آرگومان را نادیده گرفته است و اکنون نیز آن را نادیده می‌گیرد. .TP \fBKEEP_TEMP_FILES\fP این عبارت باعث می‌شود \fBppmtompeg\fP فایل‌های موقتی را که برای ارسال فریم‌های کدگذاری‌شده به Combine Server استفاده می‌کند حذف نکند. این بدان معناست که برای هر فریم یک فایل مجزا باقی خواهد ماند، درست مانند آنچه با گزینه \fB-frames\fP به دست می‌آورید. .sp این گزینه بیشتر برای اشکال‌زدایی (debugging) کاربرد دارد..sp این ویژگی تنها در صورتی کار می‌کند که از یک فایل‌سیستم مشترک برای برقراری ارتباط بین سرورها استفاده کنید. .sp این گزینه در Netpbm 10.26 (ژانویه ۲۰۰۵) تازه اضافه شده بود. .UN parameterfile .SS "نکات فایل پارامتر (Parameter File Notes)" .PP اگر از گزینه \fB-combine_gops\fP استفاده کنید، تنها باید مقادیر SIZE و OUTPUT را در فایل پارامتر مشخص نمایید. علاوه بر این، فایل پارامتر می‌تواند فایل‌های GOP ورودی را به همان شیوه فایل‌های ورودی معمولی مشخص کند \-\- با این تفاوت که به جای استفاده از INPUT_DIR، INPUT و END_INPUT، از GOP_INPUT_DIR، GOP_INPUT و GOP_END_INPUT استفاده می‌شود. اگر هیچ فایل GOP ورودی مشخص نکنید، \fBppmtompeg\fP به طور پیش‌فرض از نام فایل خروجی با پسوند \fB.gop.\fP\fIgop_num\fP، که در آن \fIgop_num\fP از 0 شروع می‌شود، به عنوان فایل‌های ورودی استفاده می‌کند. .PP اگر از گزینه \fB-combine_frames\fP استفاده کنید، تنها لازم است مقادیر SIZE، GOP_SIZE و OUTPUT را در فایل پارامتر مشخص کنید. علاوه بر این، فایل پارامتر می‌تواند فایل‌های فریم ورودی را به همان شیوه فایل‌های ورودی معمولی مشخص کند \-\- با این تفاوت که به جای استفاده از INPUT_DIR، INPUT و END_INPUT، از FRAME_INPUT_DIR، FRAME_INPUT و FRAME_END_INPUT استفاده می‌شود. در صورتی که هیچ فایل فریم ورودی تعیین نشده باشد، پیش‌فرض این است که از نام فایل خروجی با پسوند \fB.frame.\fP\fIframe_num\fP، که در آن \fIframe_num\fP از 0 شروع می‌شود، به عنوان فایل‌های ورودی استفاده شود. .PP هر تعداد فاصله و تب می‌تواند بین هر گزینه و مقدار آن قرار گیرد. خطوطی که با \fB#\fP شروع می‌شوند نادیده گرفته می‌شوند. سایر خطوط به جز موارد بین INPUT و END_INPUT نادیده گرفته می‌شوند. این قابلیت به شما امکان می‌دهد از یک فایل پارامتر یکسان برای استفاده عادی و همچنین برای \fB-combine_gops\fP و \fB-combine_frames\fP استفاده کنید. .PP فرمت فایل به بزرگی و کوچکی حروف حساس است (case-sensitive)، بنابراین تمامی کلمات کلیدی باید با حروف بزرگ نوشته شوند. .PP دستورها ممکن است به هر ترتیبی ظاهر شوند، به جز اینکه ترتیب درون یک بلوک دستوری (مانند INPUT ... END INPUT) دارای اهمیت است. .PP ابزار \fBppmtompeg\fP طوری آماده شده است که هنگام کدگذاری با ورودی از stdin، تا ۱۶ فریم B را بین فریم‌های مرجع مدیریت کند. (برای ساخت نسخه دستکاری‌شده از \fBppmtompeg\fP با محدودیت بالاتر، مقدار ثابت B_FRAME_RUN را در frame.c تغییر داده و مجدداً کامپایل کنید). .UN general .SH "اطلاعات عمومی استفاده (GENERAL USAGE INFORMATION)" .UN qscale .SS Qscale .PP مقادیر مقیاس کوانتیزاسیون (qscale) یک مصالحه میان کیفیت و فشرده‌سازی ارائه می‌دهند. استفاده از مقادیر مختلف Qscale تأثیر بسیار ناچیزی بر سرعت دارد. مقادیر qscale را می‌توان به طور جداگانه برای فریم‌های I، P و B تنظیم کرد. .PP شما مقادیر qscale را با استفاده از گزاره‌های \fBIQSCALE\fP، \fBPQSCALE\fP و \fBBSCALE\fP در فایل پارامتر تعیین می‌کنید. .PP مقدار qscale یک عدد صحیح از 1 تا 31 است. اعداد بزرگ‌تر فشرده‌سازی بهتر، اما کیفیت نامناسب‌تری ارائه می‌دهند. در ادامه، ارقام کیفیت بر اساس نسبت بیشینه سیگنال به نویز (peak signal-to-noise ratio) هستند که به صورت زیر تعریف می‌شود: .B فرمول نسبت سیگنال به نویز (signal-to-noise formula) .IMG -C ppmtompeg-snr.gif که در آن MSE نشان‌دهنده میانگین مربعات خطا (mean squared error) است. .PP آزمایش‌های Flower garden: .B Qscale در برابر کیفیت (Quality) .TS r r r r. _ 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 .TE .B Qscale در برابر فشرده‌سازی (Compression) .TS r r r r. _ 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 .TE .UN searchtech.SS "تکنیک‌های جستجو (Search Techniques)" .PP چندین تکنیک مختلف برای جستجوی بردار حرکت (motion vector) در دسترس است. تکنیک‌های متفاوتی برای جستجوی فریم‌های P و فریم‌های B وجود دارد. استفاده از تکنیک‌های جستجوی مختلف، تفاوت اندکی در کیفیت، اما تفاوت چشمگیری در فشرده‌سازی و سرعت ایجاد می‌کند. .PP ۴ نوع جستجو برای فریم‌های P وجود دارد: Exhaustive، TwoLevel، SubSample و Logarithmic. .PP ۳ نوع جستجو برای فریم‌های B وجود دارد: Exhaustive، Cross2 و Simple. تکنیک‌های جستجوی توصیه‌شده، TwoLevel و Logarithmic برای جستجوی فریم‌های P، و Cross2 و Simple برای جستجوی فریم‌های B هستند. در ادامه اعدادی برای مقایسه روش‌های مختلف جستجو آورده شده است: .B جستجوی بردار حرکت فریم‌های P (نرمال‌سازی‌شده) .TS r c c c. _ تکنیک T{ فشرده‌سازی .UR #smallbetter \u1\d .UE T} T{ سرعت .UR #largefaster \u2\d .UE T} T{ کیفیت .UR #largebetter \u3\d .UE T} Exhaustive 1000 1000 1000 SubSample 1008 2456 1000 TwoLevel 1009 3237 1000 Logarithmic 1085 8229 998 .TE .B جستجوی بردار حرکت فریم‌های B (نرمال‌سازی‌شده) .TS r c c c. _ تکنیک T{ فشرده‌سازی .UR #smallbetter \u1\d .UE T} T{ سرعت .UR #largefaster \u2\d .UE T} T{ کیفیت .UR #largebetter \u3\d .UE T} Exhaustive 1000 1000 1000 Cross2 975 1000 996 Simple 938 1765 991 .TE .UN smallbetter \u1\dاعداد کوچک‌تر بیانگر فشرده‌سازی بهتر هستند. .UN largefaster \u2\dاعداد بزرگ‌تر به معنی اجرای سریع‌تر هستند. .UN largebetter \u3\dاعداد بزرگ‌تر بیانگر کیفیت بهتر هستند. .PP به دلایلی، به‌نظر می‌رسد روش Simple فشرده‌سازی بهتری ارائه می‌دهد، اما این امر به توالی تصاویر بستگی دارد. .PP تکنیک‌های جستجو را با گزاره‌های \fBPSEARCH_ALG\fP و \fBBSEARCH_ALG\fP در فایل پارامتر انتخاب کنید. .UN gop.SS گروه تصاویر (GOP) .PP یک «گروه تصاویر» (GOP یا Group of Pictures) توالی‌ای از فریم‌هاست که تقریباً به طور مستقل قابل رمزگشایی است. یک جریان ویدیویی MPEG از یک یا چند GOP تشکیل می‌شود. می‌توانید تعداد فریم‌های موجود در هر GOP را با دستور \fBGOP_SIZE\fP در فایل پارامتر مشخص کنید. یک GOP همواره با یک فریم I آغاز می‌شود. .PP به جای انکود کردن کل یک توالی، می‌توانید یک تک GOP را انکود کنید. برای این کار از گزینه دستوری \fB-gop\fP استفاده کنید. سپس می‌توانید در هر زمانی با اجرای \fBppmtompeg\fP به همراه گزینه دستوری \fB-combine_gops\fP، فایل‌های GOP حاصل را به یکدیگر متصل کنید. .UN slices .SS برش‌ها (Slices) .PP یک برش (slice) یک واحد مستقلِ قابل رمزگشایی در یک فریم است. اندازه آن می‌تواند به کوچکی یک ماکروبلاک یا به بزرگی کل فریم باشد. صرف نظر از خطاهای مخابره، افزودن برش‌ها تأثیری بر کیفیت یا سرعت ندارد؛ تنها اثر آن کاهش جزئی در کارایی فشرده‌سازی است. برش‌های بیشتر برای مخابره‌های دارای نویز استفاده می‌شوند تا بازیابی خطاها ممکن‌تر باشد. از آنجا که معمولاً خطاها چندان مشکل‌ساز نیستند، معمولاً تنها از یک برش در هر فریم استفاده می‌شود. .PP اندازه برش را با دستور \fBSLICES_PER_FRAME\fP در فایل پارامتر کنترل کنید. .PP برخی از سیستم‌های پخش MPEG نیازمند آن هستند که هر برش از سطرهای کاملی از ماکروبلاک‌ها تشکیل شده باشد. اگر برای این نوع پخش‌کننده‌ها انکود می‌کنید، در صورتی که ارتفاع تصویر H پیکسل باشد، باید SLICES_PER_FRAME را بر روی عددی تنظیم کنید که H/16 بر آن بخش‌پذیر باشد. به عنوان مثال، اگر ارتفاع تصویر ۲۴۰ پیکسل (۱۵ ماکروبلاک) باشد، باید تنها از ۱۵، ۵، ۳ یا ۱ برش در هر فریم استفاده کنید. .PP نکته: این سیستم‌های پخش MPEG واقعاً اشتباه عمل می‌کنند، زیرا استاندارد MPEG تصریح می‌کند که نیازی به چنین الزامی نیست. .UN searchwindow .SS پنجره جستجو (Search Window) .PP پنجره جستجو پنجره‌ای است که در آن \fBppmtompeg\fP به دنبال بردارهای حرکت (motion vectors) می‌گردد. این پنجره یک مربع است. می‌توانید اندازه این مربع و این که آیا بردارهای حرکت نیم‌پیکسلی مجاز باشند یا خیر را با دستورات \fBRANGE\fP و \fBPIXEL\fP در فایل پارامتر مشخص کنید. .UN ipb .SS فریم‌های I، فریم‌های P و فریم‌های B .PP در MPEG-1، یک فیلم به صورت توالی‌ای از فریم‌های MPEG نمایش داده می‌شود که هر یک از آنها یک فریم I، یک فریم P یا یک فریم B است. هر کدام نمایانگر یک فریم واقعی از فیلم هستند (استفاده دوگانه از کلمه «فریم» شما را به اشتباه نیندازد؛ فریم فیلم یک تصویر گرافیکی است، در حالی که فریم MPEG مجموعه‌ای از داده‌هاست که یک فریم فیلم را توصیف می‌کند). .PP یک فریم I (فریم «درون‌تصویری» یا intra) یک فریم فیلم را به صورت مجزا و بدون وابستگی به فریم‌های دیگر توصیف می‌کند. یک فریم P (فریم «پیش‌بینانه» یا predictive) یک فریم فیلم را با توصیف تفاوت‌های آن نسبت به فریم فیلمِ توصیف‌شده توسط آخرین فریم I یا P قبلی توصیف می‌کند. یک فریم B (فریم «دوجهته» یا bidirectional) یک فریم فیلم را با توصیف تفاوت‌های آن نسبت به فریم‌های توصیف‌شده توسط نزدیک‌ترین فریم‌های I یا P قبل \fIو\fP بعد از خود توصیف می‌کند. .PP توجه داشته باشید که نخستین فریم یک فیلم باید توسط یک فریم I توصیف شود (زیرا هیچ فریم قبلی در فیلم وجود ندارد) و آخرین فریم فیلم باید توسط یک فریم I یا P توصیف شود (زیرا هیچ فریم بعدی در فیلم وجود ندارد). .PP فراتر از آن، می‌توانید انتخاب کنید که کدام فریم‌ها با چه نوعی نمایش داده شوند. شما یک الگو مانند IBPBP را مشخص می‌کنید و \fBppmtompeg\fP آن را در طول فیلم تکرار می‌کند. این الگو بر سرعت، کیفیت و اندازه جریان ویدیویی تأثیر می‌گذارد. در اینجا جدولی آورده شده است که برخی از این موازنه‌ها را نشان می‌دهد: .B مقایسه فریم‌های I/P/B (نرمال‌شده) .TS r c c c. _ نوع فریم اندازه سرعت کیفیت فریم‌های I 1000 1000 1000 فریم‌های P 409 609 969 فریم‌های B 72 260 919 .TE (این مقایسه با مقدار ثابت qscale انجام شده است) .PP یک توالی استاندارد IBBPBBPBBPBBPBB است. .PP توالی را با دستور \fBPATTERN\fP در فایل پارامتر انتخاب کنید. .PP از آنجا که آخرین فریم MPEG نمی‌تواند یک فریم B باشد (به موارد بالا مراجعه کنید)، اگر الگوی مشخص‌شده توسط شما برای آخرین فریم فیلم یک فریم B را مشخص کند، \fBppmtompeg\fP به جای آن، آن را به یک فریم I تبدیل می‌کند. .PP پیش از Netpbm نسخه 10.26 (ژانویه ۲۰۰۵)، \fBppmtompeg\fP به طور پیش‌فرض فریم‌های B انتهایی را حذف می‌کرد و برای انجام این کار نیاز به دستور \fBFORCE_ENCODE_LAST_FRAME\fP در فایل پارامتر بود. .PP فریم‌های MPEG در جریان MPEG-1 با همان ترتیبی که فریم‌های مربوطه در فیلم اصلی نمایش داده می‌شوند ظاهر نمی‌شوند؛ فریم‌های B پس از فریم‌های I و P که بر اساس آنها ساخته شده‌اند قرار می‌گیرند. به عنوان مثال، اگر فیلم دارای ۴ فریم باشد که با الگوی IBBP نمایش داده می‌شوند، جریان MPEG-1 با یک فریم I آغاز می‌شود که فریم ۰ فیلم را توصیف می‌کند. فریم بعدی در جریان MPEG-1 یک فریم P خواهد بود که فریم ۳ فیلم را توصیف می‌کند. دو فریم آخر در جریان MPEG-1 فریم‌های B خواهند بود که به ترتیب فریم‌های ۱ و ۲ فیلم را توصیف می‌کنند. .UN iofiles.SS "مشخص‌کردن فایل‌های ورودی و خروجی" .PP تصاویر فریم‌های ورودی را با استفاده از بیانیه‌های \fBINPUT_DIR\fP، \fBINPUT\fP، \fBEND_INPUT\fP، \fBBASE_FILE_FORMAT\fP، \fBSIZE\fP، \fBYUV_FORMAT\fP و \fBINPUT_CONVERT\fP در فایل پارامتر مشخص کنید. .PP فایل خروجی را با استفاده از بیانیهٔ \fBOUTPUT\fP در فایل پارامتر مشخص نمایید. .UN statistics .SS "آمارها (Statistics)" .PP \fBppmtompeg\fP می‌تواند آمارهای گوناگونی را دربارهٔ کدگذاری تولید کند. گزینه‌های \fB-stat\fP، \fB-snr\fP، \fB-mv_histogram\fP، \fB-quiet\fP، \fB-no_frame_summary\fP و \fB-bit_rate_info\fP را ببینید. .UN parallel .SH "عملیات موازی (PARALLEL OPERATION)" .PP شما می‌توانید \fBppmtompeg\fP را هم‌زمان روی چندین ماشین اجرا کنید تا یک جریان MPEG واحد را کدگذاری کنند. در این حالت، ماشین‌ها همان‌طور که در نمودار زیر نشان داده شده است به کار گرفته می‌شوند. ما این را «حالت موازی» می‌نامیم. .PP .B ppmtompeg-par.gif .IMG -C ppmtompeg-par.gif .PP جهت انجام پردازش موازی، بیانیهٔ .nf PARALLEL .fi را در فایل پارامتر قرار دهید، و در ادامه فهرستی از ماشین‌ها را (هر ماشین در یک خط) و سپس .nf END_PARALLEL .fi را بنویسید. هر یک از خطوط ماشین‌ها باید به یکی از دو شکل زیر باشد. اگر ماشین دسترسی فایل‌سیستمی به فایل‌های ورودی دارد، خط به این صورت است: .PP \fImachine\fP \fIuser\fP \fIexecutable\fP .PP فایل اجرایی معمولاً \fBppmtompeg\fP است (اگر برنامه را برای معماری‌های متفاوتی کامپایل کرده‌اید، ممکن است نیاز باشد مسیر کامل را بدهید). اگر ماشین به فایل‌های ورودی دسترسی فایل‌سیستمی ندارد، خط به این صورت خواهد بود: .PP \fBREMOTE\fP \fImachine\fP \fIuser\fP \fIexecutable\fP \fIparameter file\fP .PP گزینهٔ خط فرمان \fB-max_machines\fP تعداد ماشین‌هایی را که \fBppmtompeg\fP استفاده خواهد کرد محدود می‌کند. اگر در فایل پارامتر ماشین‌های بیشتری نسبت به مقدار مجاز \fB-max_machines\fP مشخص کنید، \fBppmtompeg\fP تنها از ماشین‌هایی استفاده می‌کند که ابتدا در فهرست آمده‌اند. این قابلیت برای مواقعی که می‌خواهید میزان موازی‌سازی متفاوتی را آزمایش کنید بسیار سودمند است. .PP به‌طور کلی، هنگام تعیین فایل‌های اجرایی و فایل‌های پارامتر باید از نام فایل با مسیر کامل استفاده کنید. این مورد \fIشامل\fP آرگومان فایل پارامتر در فراخوانی اولیهٔ \fBppmtompeg\fP نیز می‌شود. .PP همهٔ نام‌های فایل باید در تمام سیستم‌ها یکسان باشند (بنابراین، برای مثال اگر از یک فایل‌سیستم NFS استفاده می‌کنید، باید مطمئن شوید که در یک نقطهٔ اتصال (mountpoint) یکسان در همهٔ سیستم‌ها سوار (mount) شده باشد). .PP از آنجا که همهٔ فرایندهای درگیر در عملیات موازی دسترسی آسانی به فایل‌های ورودی ندارند، در صورت انجام عملیات موازی باید حتماً بیانیهٔ \fBSIZE\fP را در فایل پارامتر مشخص کنید. .PP ماشینی که در ابتدا \fBppmtompeg\fP را روی آن فراخوانی می‌کنید، ماشین اصلی (master) است. این ماشین میزبان یک «سرور ادغام» (combine server)، یک «سرور رمزگشایی» (decode server) و چندین «سرور ورودی/خروجی» (i/o servers) به صورت فرایندهای مجزا است. ماشین‌های دیگر در شبکه (که در فایل پارامتر فهرست شده‌اند) ماشین‌های فرعی (slave) هستند. هر یک از آن‌ها میزبان یک فرایند منفرد است که پیوسته از ماشین اصلی درخواست کار کرده و آن را انجام می‌دهد. فرایند slave محاسبات لازم برای کدگذاری فریم‌های MPEG را به دوش می‌کشد. این فرایند، فریم‌ها را در دسته‌های مشخص‌شده توسط ماشین اصلی پردازش می‌کند. .PP ماشین اصلی از یک دستور پوستهٔ از راه دور (remote shell) برای آغاز فرایند در ماشین slave استفاده می‌کند. به طور پیش‌فرض، برای انجام این کار از دستور پوستهٔ \fBrsh\fP استفاده می‌کند؛ اما می‌توانید با بیانیهٔ \fBRSH\fP در فایل پارامتر این رفتار را کنترل کنید. دستور پوسته‌ای که ماشین اصلی از راه دور اجرا می‌کند همان \fBppmtompeg\fP است، اما همراه با گزینه‌هایی که مشخص می‌کند باید وظایف slave را انجام دهد. .PP ماشین‌های مختلف از طریق اتصالات TCP با یکدیگر گفتگو می‌کنند. هر ماشین یک شماره درگاه (port) آزاد TCP را پیدا کرده و به آن متصل (bind) می‌شود و شماره پورت را به همتایان خود اطلاع می‌دهد. این شماره پورت‌ها حداقل ۲۰۴۸ هستند. .PP از بیانیه‌های PARALLEL_TEST_FRAMES، PARALLEL_TIME_CHUNKS و PARALLEL_PERFECT در فایل پارامتر برای کنترل نحوهٔ تقسیم کار توسط ماشین اصلی میان slaveها استفاده کنید. .PP از گزینهٔ خط فرمان \fB-nice\fP استفاده کنید تا همهٔ فرایندهای slave با اولویت پایین (nice) اجرا شوند. به این ترتیب، این بار پردازشی سنگین و طولانی‌مدت CPU کمترین تأثیر را روی سایر کاربران (احتمالاً تعاملی) سیستم‌ها خواهد گذاشت. .UN speed.SH "سرعت (SPEED)" .PP در اینجا نگاهی به سرعت \fBppmtompeg\fP در عملکرد تک‌گره‌ای (غیرموازی) آمده است: .B سرعت فشرده‌سازی .TS r c. _ Machine Type Macroblocks per second\u1\d HP 9000/755 280 DEC 3000/400 247 HP 9000/750 191 Sparc 10 104 DEC 5000 68 .TE \u1\dیک ماکروبلاک، مربعی ۱۶×۱۶ پیکسلی است. .PP اندازه‌گیری‌های این جدول با ورودی‌ها و خروجی‌ها از طریق یک سیستم‌فایل محلی متصل مرسوم انجام شده است. اگر از یک سیستم‌فایل شبکه‌ای روی یک اتصال اترنت 10 MB/s استفاده می‌کنید، این موضوع بیشتر از سرعت پردازنده (CPU)، سرعت شما را محدود می‌کند. در این شرایط، صرف‌نظر از این‌که پردازنده‌های شما چقدر سریع باشند، انتظار بیش از ۴ یا ۵ فریم بر ثانیه را نداشته باشید. .PP سرعت شبکه در حالتی که کارگزارها (slaves) به فایل‌های ورودی دسترسی مستقیمِ سیستم‌فایلی ندارند -- یعنی آن‌ها را به‌صورت REMOTE اعلان کرده‌اید -- حتی بیشتر از این به یک گلوگاه تبدیل می‌شود. .PP در جایی که ورودی/خروجی (I/O) گلوگاه باشد، اندازهٔ فریم‌های ورودی می‌تواند تفاوت بزرگی ایجاد کند. بنابراین، ورودی YUV بهتر از PPM، و ورودی JPEG از هر دوی آن‌ها بهتر است. .PP هنگامی که برای نخستین بار قصد راه‌اندازی حالت موازی را دارید، حتماً از گزینهٔ \fB-debug_machines\fP استفاده کنید تا بتوانید روند رویدادها را مشاهده نمایید. همچنین گزینهٔ \fB-debug_sockets\fP می‌تواند به شما در عیب‌یابی مشکلات ارتباطی کمک کند. .UN authors .SH "نویسندگان (AUTHORS)" .IP \(bu Kevin Gong - دانشگاه کالیفرنیا، برکلی، \fIkeving@cs.berkeley.edu\fP .IP \(bu Ketan Patel - دانشگاه کالیفرنیا، برکلی، \fIkpatel@cs.berkeley.edu\fP .IP \(bu Dan Wallach - دانشگاه کالیفرنیا، برکلی، \fIdwallach@cs.berkeley.edu\fP .IP \(bu Darryl Brown - دانشگاه کالیفرنیا، برکلی، \fIdarryl@cs.berkeley.edu\fP .IP \(bu Eugene Hung - دانشگاه کالیفرنیا، برکلی، \fIeyhung@cs.berkeley.edu\fP .IP \(bu Steve Smoot - دانشگاه کالیفرنیا، برکلی، \fIsmoot@cs.berkeley.edu\fP .SH "منبع سند (DOCUMENT SOURCE)" این صفحهٔ راهنما توسط ابزار Netpbm به نام 'makeman' از روی منبع HTML تولید شده است. مستندات اصلی در آدرس زیر قرار دارد: .IP .B http://netpbm.sourceforge.net/doc/ppmtompeg.html .PP