lavpipe(1) MJPEG tools manual lavpipe(1)

lavpipe - ایجاد جریان‌های خام YUV از اسکریپت‌های pipe list

lavpipe [-o num] [-n num] pipe-list

دستور lavpipe یک فایل اسکریپت موسوم به «pipe list» (فهرست لوله) را می‌خواند که ساختاری مشابه با فهرست‌های ویرایش (edit lists) ورودی lav2yuv دارد. برای اطلاعات بیشتر درباره قالب pipe list به بخش‌های زیر مراجعه کنید.

فهرست pipe list چندین منبع ویدیو و فیلتر را تعریف می‌کند که توسط lavpipe با یکدیگر ترکیب می‌شوند تا یک جریان خروجی YUV واحد روی stdout ایجاد کنند (که به عنوان نمونه می‌تواند از طریق mpeg2enc(1) یا yuv2lav(1) فشرده‌سازی شده و روی دیسک ذخیره گردد).

گزینه‌های خط فرمان برای خروجی گرفتن از بخش خاصی از جریان ویدیوی حاصل استفاده می‌شوند. این بدان معناست که می‌توانید به lavpipe مشخص کنید چه تعداد فریم نادیده گرفته شود و از آن نقطه به بعد چه تعداد فریم تحویل داده شود.

این گزینه آفست فریمِ (frame offset) ویدیوی خروجی است. تعداد num فریم نخست از ویدیوی حاصل، نه پردازش می‌شوند و نه در stdout نوشته می‌شوند. مقدار پیش‌فرض این گزینه 0 است.
این تعداد فریم‌ها را تعیین می‌کند. اگر فایل‌ها یا جریان‌های ورودی تعریف‌شده در اسکریپت pipe list به اندازه کافی بلند باشند، طول خروجی دقیقاً num فریم خواهد بود. مقدار 0 به این معنی است که تا زمان وجود ورودی، تمام فریم‌ها تا آخرین فریمِ مشخص‌شده در pipe list در خروجی نوشته خواهند شد (0 مقدار پیش‌فرض است).
نام فایل pipe list که lavpipe آن را «اجرا» خواهد کرد. برای اطلاعات بیشتر در مورد قالب این فایل به بخش زیر مراجعه کنید.
-?
نمایش خلاصه‌ای از ساختار و نحو دستور.

فریم‌های ۱۰۰ تا ۱۲۴ تعریف‌شده در film.pli را محاسبه کرده و در stdout خروجی می‌دهد (در سامانه PAL این بازه برابر با ثانیه پنجم فیلم خواهد بود).
فیلم مونتاژشده توسط lavpipe را به عنوان یک فایل AVI واحد ذخیره می‌کند.

در این بخش، قالب فایل‌های ورودی lavpipe یعنی اسکریپت‌های pipe list توضیح داده می‌شود. اگر به چند مثال یا یک راهنمای جامع‌تر نیاز دارید، لطفاً بخش CREATING MOVIE TRANSITIONS در صفحه راهنمای mjpegtools(1) و همچنین فایل README.lavpipe را که باید همراه این توزیع ارائه شده باشد مطالعه کنید. همچنین در صورت تمایل می‌توانید از طریق فهرست پستی با ما تماس بگیرید (به بخش زیر مراجعه کنید).

یک pipe list از دو بخش تشکیل شده است: فهرست منابع ( source list) YUV و پس از آن، هر تعداد توصیف توالی ( sequence descriptions) که نیاز باشد. این فایل همیشه با دو خط زیر شروع می‌شود:

این خط نخست در هر اسکریپت pipe list است. از آن به عنوان یک بررسی ساده استفاده می‌شود تا مشخص گردد آیا واقعاً یک اسکریپت pipe list به lavpipe داده شده است و نه پایان‌نامه دکترای شما!
این خط دوم در هر pipe list است و بسته به استاندارد ویدیویی مورد استفاده شما می‌تواند PAL یا NTSC باشد. مشخص نیست در حال حاضر از این خط استفاده می‌شود یا خیر.

اکنون نوبت به فهرست منابع (source list) می‌رسد:

تعداد دستورات ورودی است. lavpipe تعداد num خط بعدی را می‌خواند و آن‌ها را به عنوان دستورات جریان ورودی تفسیر می‌کند.
یک خط فرمان معتبر است که شامل دو متغیر $o و $n می‌باشد؛ این متغیرها توسط lavpipe با مقدار آفست و تعداد فریم‌هایی که برنامه باید خروجی دهد جایگزین می‌شوند. مثال:
lav2yuv -o $o -f $n input.avi

بنابراین، یک نمونه از source list می‌تواند به این شکل باشد:
2
lav2yuv -o $o -f $n scene1.avi
lav2yuv -o $o -f $n scene2.avi

پس از این می‌توانید هر تعداد توصیف توالی (sequence descriptions) که نیاز دارید بیفزایید. هر یک از آن‌ها به صورت زیر ساخته می‌شود:

تعداد فریم‌هایی که این توالی طول خواهد کشید.
تعداد ورودی‌هایی که در این توالی استفاده خواهند شد. البته این عدد باید کمتر یا مساوی با تعداد ورودی‌های تعریف‌شده در بالا باشد.
این‌ها شناسه‌های منابعی هستند که در ابتدای فایل تعریف شده‌اند (اولین منبع 0 است) به همراه یک آفست فریم اختیاری (یعنی توالی با فریم شماره ofs از این ورودی آغاز می‌شود) - مقدار پیش‌فرض این مقدار 0 است. مثال:
0 150
این یک خط فرمان معتبر برای یک ابزار فیلتر YUV است که num جریان ورودی را خوانده و با ترکیب ورودی‌ها، یک جریان خروجی تولید می‌کند. در صورت تمایل می‌توان دو متغیر $o و $n را به ابزار فیلتر داد تا همانند دستورات منبع (بالا را ببینید) توسط lavpipe جایگزین شوند. برای اطلاعات بیشتر، فایل README.lavpipe یا مستندات برنامه‌های فیلتر را (در صورت در دسترس بودن) مطالعه کنید. یک فیلتر نمونه می‌تواند به شکل زیر باشد:
transist.flt -o 0 -O 255 -s $o -n $n -d 50
و اگر توالی تنها یک ورودی دارد که صرفاً باید در خروجی کپی شود، می‌توانید به جای خط فرمان از یک خط تیره استفاده کنید:
-

در ادامه مثالی از یک pipe list کامل ارائه شده است که یک گذار (انتقال) بین scene1.avi و scene2.avi را پیاده‌سازی می‌کند:

یادداشت‌های بعد از # را حذف کنید

LAV Pipe List
PAL
2
lav2yuv -o $o -f $n scene1.avi
lav2yuv -o $o -f $n scene2.avi
50 # توالی نخست: ۵۰ فریم
1 # شامل یک ورودی:
0 0 # scene1.avi، آفست 0
- # خروجی ساده
25 # توالی دوم: ۲۵ فریم
2 # شامل دو ورودی:
0 50 # scene1.avi، آفست 50
1 # scene2.avi، آفست 0
transist.flt -o 0 -O 255 -s $o -n $n -d 50 # گذار (انتقال)
50 # توالی سوم: ۵۰ فریم
1 # شامل یک ورودی:
1 25 # scene2.avi، آفست 25
- # خروجی ساده

مطمئناً به تعداد کافی باگ وجود دارد. lavpipe اغلب pipe listهای بدشکل و ناصحیح را می‌پذیرد و سپس بدون هیچ هشداری، ویدیویی تولید می‌کند که هر چیزی هست جز آنچه انتظار داشتید.

ذکر $n در بالا نادرست است. در گذشته دو پارامتر وجود داشت، اما اکنون به برنامه اجازه داده می‌شود هر تعداد فریمی که می‌خواهد تولید کند. نویسنده برنامه به دلایلی نامعلوم، مقدار $n را به صورت ثابت (hardcode) برابر 0 قرار داده است.

همچنین محدودیت‌های جدی در سامانه وجود دارد، مانند پردازش فریم‌به‌فریم. اما از آنجا که هدف هنگام نوشتن lavpipe سادگی خط لوله بوده است، ابزارهای دیگری باید برای انجام وظایف جذاب‌تر نوشته شوند.
اما ذکر این نکته ضروری است که کاملاً امکان‌پذیر است یک pipe list بنویسید که چندین فایل را ترکیب کند، و سپس از همان pipe list به عنوان ورودی برای یک pipe list دیگر استفاده کنید؛ برای این کار کافی است دستور lavpipe را در فهرست منابع (source list) قرار دهید (بالا را ببینید) - اگر فیلترهای مناسبی داشته باشید، همین قابلیت امکان انجام کارهای بسیار جالبی را فراهم می‌کند.

وجود یادداشت (کامنت) در فایل‌های pipelist مجاز نیست. یادداشت‌های (متن‌های پس از #) بالا صرفاً به منظور توضیح آورده شده‌اند.

این صفحه راهنما توسط Philipp Zabel نوشته شده است.
اگر سؤال، دیدگاه یا مشکلی دارید یا فقط می‌خواهید با توسعه‌دهندگان تماس بگیرید، فهرست پستی اصلی برای MJPEG-tools عبارت است از:
mjpeg-users@lists.sourceforge.net

برای اطلاعات بیشتر، وب‌سایت ما را ببینید:
http://mjpeg.sourceforge.net

lav2yuv(1), lavplay(1), lavrec(1), mpeg2enc(1), yuv2lav(1), yuvscaler(1)

2 June 2001 MJPEG Tools Team