OGMMERGE(1) دستورهای کاربری OGMMERGE(1)

ogmmerge - ادغام جریان‌های چندرسانه‌ای در یک فایل OGG/OGM

ogmmerge [گزینه‌های سراسری] -o out [گزینه‌ها] <file1> [[گزینه‌ها] <file2> ...]

این برنامه ورودی را از چند فایل رسانه‌ای گرفته و جریان‌های آن‌ها را (همه یا فقط انتخابی از آن‌ها) در یک OGM ادغام می‌کند. این ابزار پیش‌تر با نام 'oggmerge' شناخته می‌شد و بر پایه ماژول CVS با نام 'oggmerge' از مخزن Xiph توسعه یافته است (<http://www.xiph.org>)

گزینه‌های عمومی:

افزایش پرگویی (جزئیات خروجی).
بی‌صدا کردن خروجی وضعیت.
نوشتن در فایل 'out'.

گزینه‌هایی که می‌توان برای هر فایل ورودی استفاده کرد:

رونوشت از n-امین جریان صوتی، نه جریان با شماره سریال n. پیش‌فرض: رونوشت از تمام جریان‌های صوتی.
رونوشت از n-امین جریان ویدئویی، نه جریان با شماره سریال n. پیش‌فرض: رونوشت از تمام جریان‌های ویدئویی.
رونوشت از n-امین جریان متنی، نه جریان با شماره سریال n. پیش‌فرض: رونوشت از تمام جریان‌های متنی.
هیچ جریان صوتی از این فایل رونوشت نشود.
هیچ جریان ویدئویی از این فایل رونوشت نشود.
هیچ جریان متنی از این فایل رونوشت نشود.
همگام‌سازی دستی، تاخیر در جریان صوتی به میزان d میلی‌ثانیه.
d > 0: پر کردن با نمونه‌های بی‌صدا.
d < 0: حذف نمونه‌ها از ابتدا.
o/p: تنظیم برچسب‌های زمانی با نسبت o/p برای تصحیح انحراف خطی. در صورت عدم ذکر، مقدار پیش‌فرض p برابر 1000 است. هر دو مقدار o و p می‌توانند اعداد ممیز شناور باشند.
پیش‌فرض‌ها: بدون تصحیح دستی همگام‌سازی (که همانند d = 0 و o/p = 1.0 است).
فقط از start تا end پردازش شود. هر دو مقدار به قالب 'HH:MM:SS.mmm' یا 'SS.mmm' هستند، مانند '00:01:00.500' یا '60.500'. اگر یکی از مقادیر start یا end ذکر نشود، به‌ترتیب مقدار پیش‌فرض 0 یا انتهای فایل در نظر گرفته می‌شود.
اگر می‌خواهید فایلی را به بخش‌های کوچک‌تر تقسیم کنید، اکیداً پیشنهاد می‌شود از ogmsplit(1) استفاده کنید چرا که عملکرد بسیار بهتری نسبت به استفاده از گزینه -r ارائه می‌دهد.
تنظیم فیلدهای توضیحات اضافی برای جریان‌ها. مقادیر معنادار می‌تواند 'LANGUAGE=English' یا 'TITLE=Ally McBeal' باشد. اگر پارامتر با '@' شروع شود، توضیحات از فایلی با همان نام بدون علامت '@' ابتدایی خوانده خواهند شد. گزینه -c می‌تواند چندین بار برای هر فایل مشخص شود. تمام توضیحات به هم الحاق خواهند شد.
اجبار کردن FourCC به مقدار مشخص‌شده. فقط برای جریان‌های ویدئویی کار می‌کند. توجه داشته باشید که نمی‌توانید صرفاً با یک ویرایشگر هگز FourCC را دستی تغییر دهید، زیرا قالب فایل OGG از چکسام استفاده می‌کند که پس از چنین تغییری نادرست خواهد بود.
به‌طور معمول، هنگامی که یک مدخل زیرنویس باید حذف شود، یک بسته خالی ایجاد و با برچسب زمانی مناسب درج می‌شود. با این گزینه، این بسته‌های خالی به‌طور کامل نادیده گرفته می‌شوند.
فرض می‌کند که فایل ورودی با نسخه‌ای قدیمی‌تر از ogmmerge (کمتر از 1.1) ایجاد شده است. این گزینه ممکن است زمانی لازم باشد که ogmmerge نتواند چنین فایلی را به‌درستی بخواند.
استفاده از یک فایل نمایه خارجی AVI همان‌طور که توسط aviindex از بسته transcode تولید شده است. می‌توان در صورتی که یک فایل AVI نمایه خرابی داشته باشد از آن استفاده کرد.

سایر گزینه‌ها:

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

برای هر فایل، کاربر می‌تواند انتخاب کند که ogmmerge کدام تراک‌ها را بردارد. همه آن‌ها در فایلی که با '-o' مشخص شده قرار می‌گیرند. فهرستی از قالب‌های منبع شناخته‌شده (و پشتیبانی‌شده) را می‌توان با گزینه '-l' به دست آورد.

فرض کنید فایلی به نام MyMovie.avi و تراک صوتی آن را در یک فایل جداگانه، مثلاً MyMovie.wav در اختیار دارید. ابتدا می‌خواهید صدا را به OGG تبدیل (انکود) کنید:

$ oggenc -q4 -oMyMovie.ogg MyMovie.wav

پس از چند دقیقه می‌توانید تصویر و صدا را ادغام کنید:

$ ogmmerge -o MyMovie-with-sound.ogm MyMovie.avi MyMovie.ogg

اگر AVI شما از قبل حاوی یک تراک صوتی باشد، آن نیز رونوشت خواهد شد (در صورتی که ogmmerge از قالب صوتی آن پشتیبانی کند). برای جلوگیری از این کار، کافی است این دستور را اجرا کنید:

$ ogmmerge -o MyMovie-with-sound.ogm -A MyMovie.avi MyMovie.ogg

پس از اندکی بررسی، تصمیم می‌گیرید یک تراک صوتی دیگر، مثلاً توضیحات کارگردان یا زبانی دیگر را در MyMovie-add-audio.wav استخراج کنید. آن را دوباره انکود کرده و با فایل دیگر ادغام کنید:

$ oggenc -q4 -oMyMovie-add-audio.ogg MyMovie-add-audio.wav
$ ogmmerge -o MM-complete.ogm MyMovie-with-sound.ogm MyMovie-add-audio.ogg

همین نتیجه را می‌توان با دستور زیر نیز به دست آورد:

$ ogmmerge -o MM-complete.ogm -A MyMovie.avi MyMovie.ogg \
MyMovie-add-audio.ogg

اکنون mplayer را اجرا کرده و لذت ببرید. اگر چندین تراک صوتی (یا حتی تراک ویدئویی) دارید، می‌توانید با پارامترهای '-vid' و '-aid' به mplayer بگویید کدام تراک را پخش کند. این پارامترها مبتنی بر صفر هستند و تفاوتی بین ویدئو و صوت قائل نمی‌شوند.

اگر نیاز دارید یک تراک صوتی همگام شود، می‌توانید به‌سادگی این کار را با دستور زیر انجام دهید:

$ ogmmerge -o goodsync.ogm -A source.avi -s 200 outofsync.ogg

این دستور ۲۰۰ میلی‌ثانیه سکوت در ابتدای تراک‌های صوتی برگرفته از outofsync.ogg اضافه می‌کند. گزینه -s همیشه برای تمام تراک‌های صوتی در یک فایل منبع اعمال می‌شود. اگر می‌خواهید -s را فقط برای یک تراک خاص اعمال کنید، همان فایل منبع را بیش از یک بار وارد کرده و -a و -s را متناسب با آن اضافه کنید.

برخی فیلم‌ها در ابتدا به‌درستی همگام هستند اما به‌مرور زمان از همگامی خارج می‌شوند. برای این گونه فیلم‌ها می‌توانید ضریب تأخیری را مشخص کنید که بر تمام برچسب‌های زمانی اعمال شود - هیچ داده‌ای افزوده یا کاسته نمی‌شود. بنابراین اگر این ضریب را بیش از حد بزرگ یا بیش از حد کوچک انتخاب کنید، نتایج نامطلوبی دریافت خواهید کرد. به عنوان مثال، قسمتی که من تبدیل کردم در انتهای فیلم که ۷۷۳۴۰ فریم طول داشت، ۰.۲ ثانیه ناهماهنگ بود. در نرخ ۲۹.۹۷ فریم بر ثانیه، ۰.۲ ثانیه تقریباً معادل ۶ فریم است. بنابراین انجام دادم:

$ ogmmerge -o goodsync.ogm -s 0,77346/77340 outofsync.ogm

نتیجه عالی بود.

گزینه‌های همگام‌سازی را می‌توان به همین ترتیب برای زیرنویس‌ها نیز به کار برد.

برای زیرنویس‌های متنی می‌توانید از برخی نرم‌افزارهای ویندوز (مانند SubRipper) یا بسته subrip موجود در سورس‌های transcode(1) (در contrib/subrip) استفاده کنید. روند کلی به این صورت است:

1.
استخراج یک جریان زیرنویس خام از منبع:
$ tccat -i /path/to/copied/dvd/ -T 1 -L | \
tcextract -x ps1 -t vob -a 0x20 | \
subtitle2pgm -o mymovie
2.
تبدیل تصاویر PGM حاصل به متن با gocr:
$ pgm2txt mymovie
3.
غلط‌یابی املایی فایل‌های متنی حاصل:
$ ispell -d american *txt
4.
تبدیل فایل‌های متنی به یک فایل SRT:
$ srttool -s -w -i mymovie.srtx -o mymovie.srt

فایل حاصل می‌تواند به‌عنوان فایل ورودی دیگری برای ogmmerge استفاده شود:

$ ogmmerge -o mymovie.ogm -c 'TITLE=My Movie' mymovie.avi \
-c LANGUAGE=English mymovie.ogg -c LANGUAGE=English mymovie.srt

استفاده از OGG به عنوان قالب ظرف (container) مقداری سربار ایجاد می‌کند - هر بسته OGG دارای یک هدر است، و هر بسته OGG می‌تواند در یک یا چند صفحه OGG جای گیرد، که خود آن‌ها نیز مجدداً حاوی هدر هستند. آزمایش‌های متعدد نشان می‌دهد که این سربار از سربار ایجادشده توسط AVI بیشتر است (در مقایسه فایل‌های فقط ویدئویی و فایل‌های حاوی ویدئو و صدای MP3).

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

در اغلب موارد می‌خواهید سربار را پیش از انکود محاسبه کنید تا بیت‌ریت را بر همان اساس تنظیم نمایید. متأسفانه سربار به ازای هر فریم ثابت نیست - تنها درصد آن ثابت است. این درصد به‌صورت 100 * (اندازه OGG - اندازه خام) / اندازه خام محاسبه می‌شود و به‌نظر می‌رسد مقداری بین 1.1% و 1.2% باشد. این مقدار به تعداد جریان‌ها و انواع جریان‌های به‌کاررفته بستگی دارد.

خود اندازه خام را می‌توان به‌صورت تقریبی محاسبه کرد:

             frames * vbitrate
raw size = ( -----------------  + length * abitrate ) / 8 * 1000 * 1024
              frames per sec
با این فرض که vbitrate و abitrate بر حسب kbit/s = 1000 bit/s داده شده‌اند، و length بر حسب ثانیه است.

آنچه کار می‌کند:

*
AVI به‌عنوان منبع ویدئو و صدا (در حال حاضر تنها تراک‌های صوتی خام PCM، MP3 و AC3)
*
OGG به‌عنوان منبع برای ویدئو، صدا (صوت Vorbis، صدای خام PCM، MP3 و AC3) و جریان‌های متنی (زیرنویس‌ها).
*
WAV به‌عنوان منبع صوتی
*
فایل‌های صوتی MP3
*
فایل‌های صوتی AC3
*
انتخاب تراک
*
همگام‌سازی دستی صدا با افزودن سکوت/حذف بسته‌ها برای صدای Vorbis و برای جریان‌های متنی با تنظیم نقطه شروع و مدت‌زمان.
*
همگام‌سازی دستی صدا برای صوت AC3 و MP3 با تکرار/حذف بسته‌ها در ابتدا.
*
افزودن توضیحات کاربر به هدرهای توضیحات الزامی (تنها هدرها الزامی هستند؛ خود توضیحات الزامی نیستند.)
*
زیرنویس‌های متنی را می‌توان از فایل‌های SRT (SubRipper / subrip) و MicroDVD خواند یا از سایر فایل‌های OGM دریافت کرد.
*
صدای PCM، AC3 و MP3 اکنون در ویندوز و با MPlayer به‌خوبی کار می‌کنند.
*
اطلاعات فصل‌ها که توسط dvdxchap تولید می‌شود پشتیبانی می‌شوند.

آنچه کار نمی‌کند:

*
همگام‌سازی دستی صدا برای صدای PCM (به‌هر‌حال چه کسی به آن نیاز دارد؟)

قابلیت‌های برنامه‌ریزی‌شده:

*
پشتیبانی از سایر قالب‌های زیرنویس

ogmmerge از اطلاعات فصل‌ها که توسط dvdxchap(1) تولید می‌شود پشتیبانی می‌کند. قالب آن بسیار ساده است:

CHAPTER01=HH:MM:SS.sss
CHAPTER01NAME=the first chapter
CHAPTER02=HH:MM:SS.sss
CHAPTER02NAME=another chapter

که در آن HH = ساعت، MM = دقیقه، SS = ثانیه و sss = میلی‌ثانیه است.

اطلاعات فصل‌ها در توضیحات جریان ویدئویی ذخیره می‌شود. بنابراین می‌توانید فصل‌ها را با -c CHAPTER01=... نیز مشخص کنید. استفاده از یک فایل فصل مزیتی دارد: اگر توضیحات جریان ویدئویی پیش‌تر حاوی اطلاعات فصل باشد و در خط فرمان نیز یک فایل اطلاعات فصل مشخص شده باشد، اطلاعات فصل پیشین به‌طور کامل جایگزین خواهد شد.

این بخش برای کاربران عادی مورد نیاز نیست.

ogmmerge از سه بخش تشکیل شده است:

*
دی‌مالتی‌پلکسرها (که خواننده یا reader نامیده می‌شوند) فایل‌های ورودی مشخص‌شده در خط فرمان را باز کرده و می‌خوانند و تراک‌های مشخصی را استخراج می‌کنند.
*
بسته‌بندها (یا ماژول‌های خروجی / packetizers) داده‌ها را از دی‌مالتی‌پلکسر گرفته و آن‌ها را در صفحات OGG بسته‌بندی (کپسوله‌سازی) می‌کنند. این صفحات در صف‌ها ذخیره می‌شوند.
*
برنامه اصلی از هر دی‌مالتی‌پلکسر شناخته‌شده درخواست می‌کند تا مقداری داده بخواند. سپس صفحه OGG با کوچک‌ترین برچسب زمانی را از تمام صف‌های بسته‌بند دریافت می‌کند. این صفحه در فایل خروجی نوشته می‌شود.

تعاریف عمومی کلاس‌ها برای خواننده‌ها و بسته‌بندها را می‌توان در ogmmerge.h یافت.

حلقه اصلی انتظار دارد صف‌هایی که توسط بسته‌بندهای دی‌ماکسر مدیریت می‌شوند، پس از یک فراخوانی تابع read() دی‌ماکسر، دست‌کم با یک صفحه پر شده باشند. دی‌ماکسر باید مطمئن شود داده‌های کافی به هر یک از بسته‌بندهای مرتبط با آن منتقل می‌شود. نگاهی به r_ogm.cpp بیندازید.

یک ساختار محتمل می‌تواند به این شکل باشد:

                        +->  p_video
           +->  r_avi  -+
           |            +->  p_pcm
           |
ogmmerge  -+->  r_ogm  --->  p_vorbis
           |
           |            +->  p_video
           |            |
           +->  r_ogm  -+->  p_vorbis
                        |
                        +->  p_vorbis

یک منبع AVI با یک تراک ویدئو و یک تراک صوت، یک منبع OGG/OGM فقط با یک تراک Vorbis، و یک منبع OGG/OGM دیگر با یک تراک ویدئو و دو تراک Vorbis.

ogmmerge توسط Moritz Bunkus <moritz@bunkus.org> نوشته شده است.

ogmdemux(1), ogmsplit(1), ogminfo(1), ogmcat(1), dvdxchap(1)

جدیدترین نسخه را همیشه می‌توان در این نشانی یافت: <http://www.bunkus.org/videotools/ogmtools>

نوامبر 2004 ogmmerge v1.5