| MKVMERGE(1) | User Commands | MKVMERGE(1) |
نام (NAME)
mkvmerge - ادغام جریانهای چندرسانهای در یک فایل Matroska(TM)
خلاصه دستور (SYNOPSIS)
mkvmerge [global options] {-o out} [options1] {file1} [[options2] {file2}] [@options-file.json]
توضیحات (DESCRIPTION)
این برنامه ورودی را از چندین فایل رسانهای دریافت کرده و جریانهای آنها را (تمامی آنها یا تنها مجموعهای گزینششده) درون یک فایل Matroska(TM) ادغام میکند؛ ببینید: وبسایت Matroska(TM)[1].
مهم
ترتیب گزینههای خط فرمان مهم است. لطفاً اگر در کار با این برنامه تازهکار هستید، بخش "Option order" (ترتیب گزینهها) را مطالعه کنید.
گزینههای عمومی (Global options)
-v, --verbose
-q, --quiet
-o, --output file-name
-w, --webm
برای فصلها (chapters) و برچسبها (tags) تنها زیرمجموعهای از عناصر مجاز هستند. mkvmerge(1) بهطور خودکار تمام عناصری را که طبق مشخصات فنی مجاز نیستند حذف خواهد کرد.
--title title
--default-language language-code
کد زبان پیشفرض 'und' برای 'undetermined' (نامشخص) است.
مدیریت اطلاعات قطعه (گزینههای عمومی)
--segmentinfo filename.xml
برای جزئیات بیشتر به بخش مربوط به فایلهای XML اطلاعات قطعه (segment info XML files) در ادامه مراجعه کنید.
--segment-uid SID1,SID2,...
اگر SID با علامت = آغاز شود، باقیمانده آن به عنوان نام یک فایل Matroska تفسیر میشود که segment UID آن خوانده شده و مورد استفاده قرار میگیرد.
هر فایل ایجادشده شامل یک قطعه (segment) است، و هر قطعه یک segment UID دارد. اگر تعداد segment UIDهای مشخصشده بیشتر از تعداد قطعههای ایجادشده باشد، UIDهای اضافی نادیده گرفته میشوند. اگر تعداد UIDهای مشخصشده کمتر از قطعههای ایجادشده باشد، UIDهای تصادفی برای آنها ایجاد خواهد شد.
--chapter-language language-code
این گزینه میتواند هم برای فایلهای فصل ساده و هم برای فایلهای مبدأ که حاوی فصل هستند اما اطلاعاتی دربارهی زبان فصلها ندارند (مانند فایلهای MP4 و OGM) استفاده شود.
زبانی که با این گزینه تعیین میشود، هنگام ایجاد فصلها با گزینهی --generate-chapters نیز به کار میرود.
--chapter-charset character-set
این سوئیچ همچنین برای فصلهایی که از انواع خاصی از کانتینرها، مانند فایلهای Ogg/OGM و MP4 کپی میشوند نیز اعمال میشود. برای جزئیات، بخش مربوط به فصلها را در ادامه ببینید.
--chapter-sync d[,o[/p]]
o/p: تنظیم مهرزمانیها به نسبت o/p برای رفع انحرافهای خطی. در صورت حذف، مقدار پیشفرض p برابر 1 است. هر دوی o و p میتوانند اعداد اعشاری ممیز شناور باشند.
پیشفرضها: بدون تصحیح دستی همگامسازی (که همانند d = 0 و o/p = 1.0 است).
این گزینه میتواند چندین بار برای یک فایل ورودی استفاده شود و با انتخاب شناسههای قطعهی مختلف در هر بار، روی چندین قطعه اعمال گردد.
--generate-chapters mode
این حالت همچنین با حالتهای تقسیم 'parts:' و 'parts-frames:' کار میکند. برای این حالتها، به ازای هر بازهی مهرزمانی پیوستشده (آنهایی که پیشوند مهرزمانی آغازینشان '+' است) یک فصل ایجاد خواهد شد.
نکته
mkvmerge(1) برای اینکه بتواند زمان پیوست شدن یک فایل جدید را تشخیص دهد، نیاز به وجود یک قطعهی ویدیویی یا صوتی دارد. اگر یک یا چند قطعهی ویدیویی میکس (mux) شوند، از اولین قطعه استفاده میشود؛ در غیر این صورت، از اولین قطعهی صوتی استفاده خواهد شد.
مثال: --generate-chapters interval:45s
نامهای فصلهای جدید توسط گزینهی --generate-chapters-name-template کنترل میشوند. زبان با --chapter-language تعیین میشود که باید پیش از --generate-chapters قرار گیرد.
--generate-chapters-name-template template
متغیرهای متعددی وجود دارند که میتوانند در الگو استفاده شوند و هنگام تولید یک فصل با مقادیر واقعی خود جایگزین میشوند. رشتهی '<NUM>' با شمارهی فصل جایگزین خواهد شد. رشتهی '<START>' با مهرزمانی آغاز فصل جایگزین خواهد شد.
رشتههای '<FILE_NAME>' و '<FILE_NAME_WITH_EXT>' تنها هنگام تولید فصلها برای فایلهای پیوستشده پر میشوند. آنها با نام فایل پیوستشده بهترتیب بدون پسوند و با پسوند جایگزین خواهند شد. توجه داشته باشید که تنها نام پایه و پسوند فایل درج میشوند، نه اجزای دایرکتوری یا درایو آن.
میتوانید حداقل تعداد ارقام را برای شمارهی فصل با '<NUM:places>'، مانند '<NUM:3>'، مشخص کنید. اگر تعداد ارقام کمتر از مقدار تعیینشده باشد، عدد حاصل با صفرهای پیشرو پر خواهد شد.
میتوانید قالبی را که توسط مهرزمانی آغازین استفاده میشود با <START:format> کنترل کنید. در صورت تعیین نشدن، قالب بهطور پیشفرض '%H:%M:%S' خواهد بود. کدهای قالب معتبر عبارتند از:
رشتهی '<TITLE>' تنها هنگام تولید فصلها برای فایلهای الحاقشده پر میشود. در صورت وجود، با عنوان فایل الحاقشده جایگزین خواهد شد.
--cue-chapter-name-format format
اگر این گزینه داده نشود، پیشفرض mkvmerge(1) قالب '%p - %t' خواهد بود (نام اجراکننده، به دنبال آن یک فاصله، یک خط تیره، فاصلهای دیگر و سپس عنوان).
اگر قالب مشخص شود، همهچیز به جز نویسههای متای زیر عیناً کپی شده و نویسههای متا بهصورت زیر جایگزین میشوند:
--chapters file-name
--global-tags file-name
--track-order FID1:TID1,FID2:TID2,...
اگر این گزینه داده نشود، تراکها ابتدا بر اساس نوعشان و سپس بر اساس ترتیب فایل مبدأ مرتب میشوند. تراکهای ویدیویی ابتدا میآیند و پس از آنها تراکهای صوتی و زیرنویس قرار میگیرند. سایر انواع تراک که به ندرت استفاده میشوند در انتها میآیند.
--cluster-length spec
اگر از هیچ واحدی استفاده نشود، mkvmerge(1) حداکثر n بلوک داده را در هر کلاستر قرار خواهد داد. حداکثر تعداد بلوکها ۶۵۵۳۵ است.
اگر عدد d با پسوند 'ms' همراه باشد، mkvmerge(1) حداکثر d میلیثانیه داده را در هر کلاستر قرار میدهد. کمینهٔ مقدار برای d برابر '100ms' و بیشینهٔ آن '32000ms' است.
mkvmerge(1) بهطور پیشفرض حداکثر ۶۵۵۳۵ بلوک داده و ۵۰۰۰ میلیثانیه داده را در یک کلاستر قرار میدهد.
برنامههایی که برای یافتن یک فریم خاص تلاش میکنند، تنها میتوانند مستقیماً به یک کلاستر پرش کنند و پس از آن باید کل کلاستر را بخوانند. بنابراین، ایجاد کلاسترهای بزرگتر ممکن است به پرشهای زمانی (seeking) نادقیق یا کند منجر شود.
--clusters-in-meta-seek
--timestamp-scale factor
بهطور معمول mkvmerge(1) از مقدار 1000000 استفاده میکند، به این معنی که برچسبهای زمانی و مدتزمانها دقتی معادل ۱ میلیثانیه خواهند داشت. برای فایلهایی که فاقد تراک ویدیویی بوده اما حداقل یک تراک صوتی دارند، mkvmerge(1) بهطور خودکار ضریب مقیاس برچسب زمانی را بهگونهای انتخاب میکند که همهٔ برچسبهای زمانی و مدتزمانها دقتی به اندازهٔ یک نمونهٔ صوتی (audio sample) داشته باشند. این کار باعث بار اضافی (overhead) بیشتری میشود، اما امکان پرش زمانی و استخراج دقیق را فراهم میسازد.
اگر مقدار ویژهٔ -1 استفاده شود، mkvmerge(1) حتی در صورت وجود تراک ویدیویی نیز از دقت نمونه استفاده خواهد کرد.
--enable-durations
--no-cues
--no-date
--date timestamp
--disable-lacing
--disable-track-statistics-tags
فعال کردن این گزینه مانع از نوشتن این برچسبها توسط mkvmerge(1) و تغییر برچسبهای موجود با همان نامها میشود.
--disable-language-ietf
--normalize-language-ietf mode
در شکل متعارف، تمام زیربرچسبهایی که مقادیر ارجح برای آنها وجود دارد، با آن مقادیر ارجح جایگزین میشوند. برای مثال این عمل 'zh-yue-jyutping' را به 'yue-jyutping' یا 'fr-FX' را به 'fr-FR' تبدیل میکند.
برای حالت زیربرچسبهای زبان گسترشیافته، ابتدا فرم متعارف ساخته میشود. سپس تمام زبانهای اصلی که یک زیربرچسب زبان گسترشیافته برای آنها وجود دارد، با آن زیربرچسب زبان گسترشیافته و پیشوند آن جایگزین میشوند. برای مثال، این کار 'yue-jyutping' را مجدداً به 'zh-yue-jyutping' تبدیل میکند، اما هیچ تأثیری روی 'fr-FR' ندارد زیرا 'fr' یک زیربرچسب زبان گسترشیافته نیست.
--stop-after-video-ends
--split specification
در حال حاضر mkvmerge(1) از حالتهای زیر پشتیبانی میکند:
نحو: --split [size:]d[k|m|g]
مثالها: --split size:700m یا --split 150000000
پارامتر d میتواند به 'k'، 'm' یا 'g' ختم شود تا نشان دهد اندازه به ترتیب بر حسب کیلوبایت، مگابایت یا گیگابایت است. در غیر این صورت، اندازه بر حسب بایت فرض میشود. پس از اینکه فایل خروجی فعلی به این حد نصاب اندازه رسید، فایل جدیدی آغاز خواهد شد.
پیشوند 'size:' به دلایل سازگاری میتواند حذف شود.
نحو: --split [duration:]HH:MM:SS.nnnnnnnnn|ds
مثالها: --split duration:00:60:00.000 یا --split 3600s
پارامتر یا باید به شکل HH:MM:SS.nnnnnnnnn برای تعیین مدت زمان با دقتی تا نانوثانیه باشد، یا عددی مانند d که به دنبال آن حرف 's' برای مدت زمان بر حسب ثانیه میآید. HH تعداد ساعتها، MM تعداد دقیقهها، SS تعداد ثانیهها و nnnnnnnnn تعداد نانوثانیهها است. هم تعداد ساعتها و هم تعداد نانوثانیهها را میتوان نادیده گرفت. بعد از ممیز اعشار میتواند تا نه رقم وجود داشته باشد. پس از اینکه مدت زمان محتوای خروجی فعلی به این حد رسید، یک فایل خروجی جدید آغاز خواهد شد.
پیشوند 'duration:' به دلایل سازگاری میتواند حذف شود.
نحو: --split timestamps:A[,B[,C...]]
مثال: --split timestamps:00:45:00.000,01:20:00.250,6300s
پارامترهای A، B، C و غیره همگی باید قالبی مشابه با موارد استفادهشده برای مدت زمان داشته باشند (بالا را ببینید). فهرست مهرهای زمانی با ویرگول از هم جدا میشود. پس از اینکه جریان ورودی به مهر زمانی نقطهٔ تقسیم فعلی رسید، فایل جدیدی ایجاد میشود. سپس از نقطهٔ تقسیم بعدیِ ارائهشده در این فهرست استفاده خواهد شد.
پیشوند 'timestamps:' نباید حذف شود.
نحو: --split parts:start1-end1[,[+]start2-end2[,[+]start3-end3...]]
مثالها:
حالت parts به mkvmerge(1) میگوید که بازههای مشخصی از مهرهای زمانی را نگه دارد و بقیه را دور بریزد. بازههایی که باید نگه داشته شوند باید بعد از کلیدواژهٔ parts: فهرست شده و با ویرگول جدا شوند. هر بازه به خودی خود شامل یک مهر زمانی آغاز و پایان در همان قالبی است که سایر گونههای --split میپذیرند (برای مثال، هر دو مقدار 00:01:20 و 80s به یک مهر زمانی یکسان اشاره دارند).
اگر مهر زمانی آغاز حذف شود، مقدار پیشفرض آن مهر زمانی پایانِ بازهٔ قبلی خواهد بود. اگر بازهٔ قبلی وجود نداشته باشد، به طور پیشفرض ابتدای فایل در نظر گرفته میشود (مثال ۳ را ببینید).
اگر مهر زمانی پایان حذف شود، مقدار پیشفرض آن انتهای فایلهای مبدأ خواهد بود که اساساً به mkvmerge(1) میگوید بقیه را نگه دارد (مثال ۳ را ببینید).
به طور معمول هر بازه در یک فایل جدید نوشته میشود. این رفتار را میتوان تغییر داد تا بازههای متوالی در همان فایل نوشته شوند. برای این منظور کاربر باید یک + را پیشوند مهر زمانی آغاز قرار دهد. این کار به mkvmerge(1) میگوید که فایل جدیدی ایجاد نکند و در عوض بازه را به همان فایلی که بازهٔ قبلی در آن نوشته شده بود الصاق کند. مهرهای زمانی طوری تنظیم خواهند شد که حتی در صورت وجود وقفه میان دو بازه در فایل ورودی، هیچ وقفهای در فایل خروجی وجود نداشته باشد.
در مثال ۱، mkvmerge(1) دو فایل ایجاد خواهد کرد. فایل اول شامل محتوای آغازشده از 00:01:20 تا 00:02:45 خواهد بود. فایل دوم شامل محتوای آغازشده از 00:05:50 تا 00:10:30 خواهد بود.
در مثال ۲، mkvmerge(1) تنها یک فایل ایجاد خواهد کرد. این فایل هم شامل محتوای آغازشده از 00:01:20 تا 00:02:45 و هم محتوای آغازشده از 00:05:50 تا 00:10:30 خواهد بود.
در مثال ۳، mkvmerge(1) دو فایل ایجاد خواهد کرد. فایل اول شامل محتوا از ابتدای فایلهای مبدأ تا 00:02:45 خواهد بود. فایل دوم شامل محتوای آغازشده از 00:05:50 تا انتهای فایلهای مبدأ خواهد بود.
نکته
توجه داشته باشید که mkvmerge(1) تنها در موقعیت فریمهای کلیدی دربارهٔ تقسیم تصمیمگیری میکند. این موضوع هم برای ابتدا و هم برای انتهای هر بازه صدق میکند. بنابراین حتی اگر یک مهر زمانی پایان بین دو فریم کلیدی باشد، mkvmerge(1) به خروجی دادن فریمها تا پیش از فریم کلیدی بعدی (بدون احتساب خود آن) ادامه خواهد داد.
نحو: --split parts-frames:start1-end1[,[+]start2-end2[,[+]start3-end3...]]
مثالها:
حالت parts-frames به mkvmerge(1) میگوید که محدودههای مشخصی از شماره فریمها/فیلدها را نگه داشته و بقیه را دور بریزد. محدودههایی که باید نگه داشته شوند، باید بعد از کلیدواژه parts-frames: فهرست شده و با کاما از هم جدا شوند. هر محدوده بهخودیخود شامل یک شماره فریم/فیلد آغازین و پایانی است. شمارهگذاری از ۱ شروع میشود.
اگر شماره آغازین حذف شود، پیشفرض آن شماره پایان محدوده قبلی خواهد بود. اگر محدوده قبلی وجود نداشته باشد، پیشفرض ابتدای فایل است (مثال ۳ را ببینید).
اگر شماره پایانی حذف شود، پیشفرض آن انتهای فایلهای مبدأ خواهد بود که در واقع به mkvmerge(1) میگوید بقیه را نگه دارد (مثال ۳ را ببینید).
بهطور معمول هر محدوده در یک فایل جدید نوشته میشود. این رفتار میتواند تغییر کند تا محدودههای متوالی در همان فایل نوشته شوند. برای این کار، کاربر باید پیشوند + را به ابتدای شماره آغازین اضافه کند. این به mkvmerge(1) میگوید که فایل جدیدی ایجاد نکند و در عوض، محدوده را به همان فایلی که محدوده قبلی در آن نوشته شده بود ضمیمه کند. برچسبهای زمانی بهگونهای تنظیم میشوند که هیچ وقفهای در فایل خروجی وجود نداشته باشد، حتی اگر بین دو محدوده در فایل ورودی وقفه وجود داشته باشد.
نکته
توجه داشته باشید که mkvmerge(1) تصمیمگیری درباره تفکیک را فقط در موقعیتهای فریم کلیدی (key frame) انجام میدهد. این موضوع هم در مورد شروع و هم در مورد پایان هر محدوده صدق میکند. بنابراین، حتی اگر شماره فریم/فیلد پایانی بین دو فریم کلیدی قرار گیرد، mkvmerge(1) به ارسال فریمها تا فریم کلیدی بعدی (بدون شامل کردن خود آن فریم کلیدی) ادامه خواهد داد.
در مثال ۲، mkvmerge(1) تنها یک فایل ایجاد خواهد کرد. این فایل هم شامل محتوای آغازشده از 733 تا 912 و هم محتوای آغازشده از 1592 تا 2730 خواهد بود.
در مثال ۳، mkvmerge(1) دو فایل ایجاد خواهد کرد. فایل اول شامل محتوا از ابتدای فایلهای مبدأ تا 430 خواهد بود. فایل دوم شامل محتوای آغازشده از 2512 تا انتهای فایلهای مبدأ خواهد بود.
این حالت تنها نخستین ترک ویدیویی را که خروجی داده میشود در نظر میگیرد. اگر هیچ ترک ویدیویی خروجی داده نشود، هیچ تفکیکی رخ نخواهد داد.
نکته
اعداد ارائهشده با این آرگومان بر اساس تعداد بلوکهای Matroska(TM) که خروجی داده میشوند تفسیر میگردند. یک بلوک واحد Matroska(TM) یا شامل یک فریم کامل (برای محتوای progressive) است یا یک فیلد منفرد (برای محتوای interlaced). برنامه mkvmerge بین این دو تمایزی قائل نمیشود و صرفاً تعداد بلوکها را میشمارد. برای مثال: اگر کسی بخواهد پس از بیستوپنجمین فریم کامل با محتوای interlaced تفکیک انجام دهد، باید از 50 (دو فیلد به ازای هر فریم کامل) بهعنوان نقطه تفکیک استفاده کند.
نحو: --split frames:A[,B[,C...]]
مثال: --split frames:120,237,891
پارامترهای A، B، C و غیره همگی باید اعداد صحیح مثبت باشند. شمارهگذاری از ۱ آغاز میشود. فهرست شماره فریمها/فیلدها با کاما از هم جدا میشود. پس از اینکه جریان ورودی به شماره فریم/فیلد نقطه تفکیک فعلی برسد، یک فایل جدید ایجاد میشود. سپس از نقطه تفکیک بعدی ارائهشده در این فهرست استفاده خواهد شد.
پیشوند 'frames:' نباید حذف شود.
این حالت تنها نخستین ترک ویدیویی را که خروجی داده میشود در نظر میگیرد. اگر هیچ ترک ویدیویی خروجی داده نشود، هیچ تفکیکی رخ نخواهد داد.
نکته
اعداد ارائهشده با این آرگومان بر اساس تعداد بلوکهای Matroska(TM) که خروجی داده میشوند تفسیر میگردند. یک بلوک واحد Matroska(TM) یا شامل یک فریم کامل (برای محتوای progressive) است یا یک فیلد منفرد (برای محتوای interlaced). برنامه mkvmerge بین این دو تمایزی قائل نمیشود و صرفاً تعداد بلوکها را میشمارد. برای مثال: اگر کسی بخواهد پس از بیستوپنجمین فریم کامل با محتوای interlaced تفکیک انجام دهد، باید از 50 (دو فیلد به ازای هر فریم کامل) بهعنوان نقطه تفکیک استفاده کند.
نحو: --split chapters:all یا --split chapters:A[,B[,C...]]
مثال: --split chapters:5,8
پارامترهای A، B، C و غیره همگی باید اعداد صحیح مثبت باشند. شمارهگذاری از ۱ آغاز میشود. فهرست شماره فصلها با کاما از هم جدا میشود. تفکیک دقیقاً پیش از اولین فریم کلیدی رخ میدهد که برچسب زمانی آن برابر یا بزرگتر از برچسب زمانی آغاز برای فصلهایی باشد که شمارهشان فهرست شده است. فصلی که در زمان 0s شروع میشود هرگز برای تفکیک در نظر گرفته نمیشود و بدون اخطار نادیده گرفته خواهد شد.
بهجای فهرست کردن دستی همه شماره فصلها، میتوان از کلیدواژه all استفاده کرد.
پیشوند 'chapters:' نباید حذف شود.
نکته
فرمت فایل Matroska(TM) از ساختارهای فصلی تودرتو با عمق دلخواه تحت عنوان 'edition entries' و 'chapter atoms' پشتیبانی میکند. با این وجود، این حالت تنها بالاترین سطح از فصلها را در میان تمام edition entryها در نظر میگیرد.
برای این حالت تفکیک، با نام فایل خروجی نسبت به حالت عملکرد عادی رفتار متفاوتی صورت میگیرد. نام فایل میتواند شامل یک عبارت شبیه به printf مانند '%d' شامل پهنای فیلد اختیاری، مثلاً '%02d' باشد. در این صورت، شماره فایل فعلی بهطور مناسب قالببندی شده و در آن نقطه از نام فایل درج خواهد شد. اگر چنین الگویی وجود نداشته باشد، الگوی '-%03d' دقیقاً پیش از پسوند فایل در نظر گرفته میشود: مثلاً '-o output.mkv' به 'output-001.mkv' و غیره منتج خواهد شد. اگر پسوندی وجود نداشته باشد، '-%03d' به انتهای نام پیوست خواهد شد.
الگوی ممکن دیگر '%c' است که با نام نخستین فصل درون فایل جایگزین خواهد شد. توجه داشته باشید در صورتی که '%c' وجود داشته باشد، الگوی '-%03d' بهطور خودکار اضافه نخواهد شد. --link
--link-to-previous segment-UID
اگر SID با = شروع شود، باقیمانده آن بهعنوان نام یک فایل Matroska تفسیر میشود که segment UID آن خوانده و استفاده میگردد.
--link-to-next segment-UID
اگر SID با = شروع شود، باقیمانده آن بهعنوان نام یک فایل Matroska تفسیر میشود که segment UID آن خوانده و استفاده میگردد.
--append-mode mode
هنگامی که mkvmerge ترکی (از این پس 'track2_1') از فایل دوم ('file2') را به ترکی (از این پس 'track1_1') از فایل اول ('file1') الحاق میکند، باید تمام برچسبهای زمانی 'track2_1' را به مقداری مشخص جابهجا (offset) کند. برای حالت 'file'، این مقدار برابر است با بالاترین برچسب زمانی دیدهشده در 'file1'، حتی اگر آن برچسب زمانی مربوط به ترکی غیر از 'track1_1' باشد. در حالت track، این مقدار جابهجایی برابر با بالاترین برچسب زمانی در 'track1_1' است.
متأسفانه mkvmerge نمیتواند بهطور قابلاطمینان تشخیص دهد که از کدام حالت استفاده کند. بنابراین بهطور پیشفرض از حالت 'file' استفاده میکند. حالت 'file' معمولاً برای فایلهایی که مستقل از یکدیگر ایجاد شدهاند بهتر عمل میکند؛ مانند هنگام الحاق فایلهای AVI یا MP4. حالت 'track' ممکن است برای منابعی که اساساً بخشهایی از یک فایل بزرگ هستند بهتر کار کند، مانند فایلهای VOB و EVO.
ترکهای زیرنویس همیشه بهگونهای پردازش میشوند که گویی حالت 'file' فعال است، حتی اگر حالت 'track' فعال باشد.
--append-to SFID1:STID1:DFID1:DTID1[,...]
اگر این گزینه قید نشود، از یک نگاشت استاندارد استفاده میشود. این نگاشت استاندارد هر ترک از فایل جاری را به ترکی از فایل قبلی با همان شناسه ترک الحاق میکند. این ویژگی الحاق آسان را ممکن میسازد، مثلاً هنگامی که یک فیلم به دو بخش تقسیم شده و هر دو فایل دارای تعداد ترکها و شناسههای ترک یکسانی باشند، با دستور mkvmerge -o output.mkv part1.mkv +part2.mkv.
+
$ mkvmerge -o full.mkv file1.mkv + file2.mkv $ mkvmerge -o full.mkv file1.mkv +file2.mkv
[ file1 file2 ]
این یک نحو جایگزین برای استفاده از '+' بین نام فایلها است. بنابراین دو دستور زیر معادل یکدیگرند:
$ mkvmerge -o full.mkv file1.mkv + file2.mkv $ mkvmerge -o full.mkv '[' file1.mkv file2.mkv ']'
=
همچنین میتوان '=' را در ابتدای نام فایل بعدی قرار داد. بنابراین دو دستور زیر معادل یکدیگرند:
$ mkvmerge -o full.mkv = file1.vob $ mkvmerge -o full.mkv =file1.vob
( file1 file2 )
این قابلیت میتواند برای مثال برای فایلهای VOB حاصل از DVD یا جریانهای انتقال MPEG استفاده شود. اگر هر فایل شامل مجموعهای از هدرهای مختص به خود باشد (که معمولاً در فایلهای مستقل مانند AVI یا MP4 چنین است)، این ویژگی قابل استفاده نیست.
قرار دادن نام فایل در پرانتز همچنین مانع از جستجوی mkvmerge(1) برای فایلهای اضافی با همان نام پایه میشود، همانطور که در گزینه = توضیح داده شد. بنابراین این دو خط فرمان معادل یکدیگرند:
$ mkvmerge -o out.mkv = file.mkv
$ mkvmerge -o out.mkv '(' file.mkv ')'
چند نکته باید مورد توجه قرار گیرد:
--attachment-description description
--attachment-mime-type MIME type
اگر هیچ نوع MIME برای یک پیوست مشخص نشود، نوع آن به طور خودکار شناسایی خواهد شد.
--attachment-name name
--attach-file file-name, --attach-file-once file-name
میتوان از mkvextract(1) برای استخراج فایلهای پیوست از یک فایل Matroska(TM) استفاده کرد.
--enable-legacy-font-mime-types
این امر هم بر پیوستهای جدید در صورتی که نوع MIME آنها به طور خودکار تشخیص داده شود اثر میگذارد و هم بر پیوستهای موجود که انواع MIME ذخیرهشدهٔ آنها به انواع قدیمی نگاشت مجدد خواهند شد.
انواع MIME تحت تأثیر عبارتاند از 'font/sfnt'، 'font/ttf' و 'font/collection' که همگی به 'application/x-truetype-fonts' نگاشت میشوند، و 'font/otf' که به 'application/vnd.ms-opentype' نگاشت میشود.
گزینههایی که میتوان برای هر فایل ورودی استفاده کرد
-a, --audio-tracks [!]n,m,...
به جای شناسههای ترک میتوانید کدهای زبان ISO 639-2 را نیز وارد کنید. این قابلیت تنها برای فایلهای مبدئی کار میکند که برچسبهای زبان را برای ترکهای خود ارائه میدهند.
پیشفرض: کپی کردن همهٔ ترکهای این نوع.
اگر پیش از شناسهها از ! استفاده شود، معنا معکوس میشود: همهٔ ترکهای این نوع به جز موارد فهرستشده پس از ! کپی میشوند.
-d, --video-tracks [!]n,m,...
به جای شناسههای ترک میتوانید کدهای زبان ISO 639-2 را نیز وارد کنید. این قابلیت تنها برای فایلهای مبدئی کار میکند که برچسبهای زبان را برای ترکهای خود ارائه میدهند.
اگر پیش از شناسهها از ! استفاده شود، معنا معکوس میشود: همهٔ ترکهای این نوع به جز موارد فهرستشده پس از ! کپی میشوند.
-s, --subtitle-tracks [!]n,m,...
به جای شناسههای ترک میتوانید کدهای زبان ISO 639-2 را نیز وارد کنید. این قابلیت تنها برای فایلهای مبدئی کار میکند که برچسبهای زبان را برای ترکهای خود ارائه میدهند.
اگر پیش از شناسهها از ! استفاده شود، معنا معکوس میشود: همهٔ ترکهای این نوع به جز موارد فهرستشده پس از ! کپی میشوند.
-b, --button-tracks [!]n,m,...
به جای شناسههای ترک میتوانید کدهای زبان ISO 639-2 را نیز وارد کنید. این قابلیت تنها برای فایلهای مبدئی کار میکند که برچسبهای زبان را برای ترکهای خود ارائه میدهند.
اگر پیش از شناسهها از ! استفاده شود، معنا معکوس میشود: همهٔ ترکهای این نوع به جز موارد فهرستشده پس از ! کپی میشوند.
--track-tags [!]n,m,...
اگر پیش از شناسهها از ! استفاده شود، معنا معکوس میشود: همه چیز به جز شناسههای فهرستشده پس از ! کپی میشود.
-m, --attachments [!]n[:all|first],m[:all|first],...
پیشفرض کپی کردن تمام پیوستها در تمام فایلهای خروجی است.
اگر پیش از شناسهها از ! استفاده شود، معنا معکوس میشود: همه چیز به جز شناسههای فهرستشده پس از ! کپی میشود.
-A, --no-audio
-D, --no-video
-S, --no-subtitles
-B, --no-buttons
-T, --no-track-tags
-M, --no-attachments
--no-global-tags
--regenerate-track-uids
این رفتار به صورت خودکار برای فایلهای Matroska ایجادشده توسط نرمافزار MakeMKV فعال میشود. دلیل آن این است که MakeMKV به جای ایجاد شناسههای تصادفی، از اعداد متوالی (۱، ۲، ۳...) به عنوان UID استفاده میکند.
-y, --sync TID:d[,o[/p]]
o/p: برچسبهای زمانی را به اندازهٔ o/p تنظیم میکند تا رانشهای خطی (linear drifts) تصحیح شوند. در صورت حذف، مقدار پیشفرض p برابر 1 است. هر دو مقدار o و p میتوانند اعداد ممیز شناور باشند.
پیشفرضها: بدون تصحیح دستی همگامسازی (که همان d = 0 و o/p = 1.0 است).
این گزینه میتواند چندین بار برای یک فایل ورودی استفاده شود تا با انتخاب شناسههای قطعهٔ متفاوت در هر بار، روی چندین قطعه اعمال گردد.
--cues TID:none|iframes|all
مقدار پیشفرض برای قطعههای ویدیویی و زیرنویس 'iframes' و برای قطعههای صوتی 'none' است. همچنین گزینهٔ --no-cues را ببینید که صرفنظر از گزینههای --cues استفادهشده، از ایجاد ورودیهای cue جلوگیری میکند.
این گزینه میتواند چندین بار برای یک فایل ورودی به کار رود تا با انتخاب شناسههای قطعهٔ متفاوت در هر بار، بر روی چندین قطعه اعمال شود.
--default-track-flag TID[:bool]
اگر کاربر هنگام پخش به طور صریح قطعهای را انتخاب نکند، پخشکننده باید یکی از قطعههایی را که پرچم «قطعهٔ پیشفرض» آنها فعال است، با در نظر گرفتن ترجیحات کاربر مانند زبان مورد نظر، برای پخش انتخاب کند.
این گزینه میتواند چندین بار برای یک فایل ورودی به کار رود تا با انتخاب شناسههای قطعهٔ متفاوت در هر بار، بر روی چندین قطعه اعمال گردد.
--track-enabled-flag TID[:bool]
تنها قطعههایی که پرچم «قطعهٔ فعال» آنها روشن است باید برای پخش در نظر گرفته شوند.
این گزینه میتواند چندین بار برای یک فایل ورودی به کار رود تا با انتخاب شناسههای قطعهٔ مختلف در هر بار، روی چندین قطعه اعمال شود.
--forced-display-flag TID[:bool]
این گزینه میتواند چندین بار برای یک فایل ورودی استفاده شود تا با انتخاب شناسههای قطعهٔ مختلف در هر بار، بر روی چند قطعه اعمال شود.
--hearing-impaired-flag TID[:bool]
این گزینه میتواند چندین بار برای یک فایل ورودی استفاده شود تا با انتخاب شناسههای قطعهٔ متفاوت در هر بار، بر روی چندین قطعه اعمال گردد.
--visual-impaired-flag TID[:bool]
این گزینه میتواند چندین بار برای یک فایل ورودی به کار رود تا با انتخاب شناسههای قطعهٔ مختلف در هر بار، بر روی چندین قطعه اعمال گردد.
--text-descriptions-flag TID[:bool]
این گزینه میتواند چندین بار برای یک فایل ورودی استفاده شود تا با انتخاب شناسههای قطعهٔ مختلف در هر بار، روی چندین قطعه اعمال گردد.
--original-flag TID[:bool]
این گزینه میتواند چندین بار برای یک فایل ورودی به کار رود تا با انتخاب شناسههای قطعهٔ مختلف در هر بار، روی چندین قطعه اعمال شود.
--commentary-flag TID[:bool]
این گزینه میتواند چندین بار برای یک فایل ورودی استفاده شود تا با انتخاب شناسههای قطعهٔ مختلف در هر بار، روی چندین قطعه اعمال گردد.
--track-name TID:name
--language TID:language
این گزینه میتواند چندین بار برای یک فایل ورودی به کار رود تا با انتخاب شناسههای قطعهٔ مختلف در هر بار، روی چندین قطعه اعمال گردد.
-t, --tags TID:file-name
--aac-is-sbr TID[:0|1]
اگر فایل مبدأ یک فایل Matroska(TM) باشد، مقدار CodecID باید برای تشخیص SBR AAC کافی باشد. با این حال، اگر CodecID نادرست باشد، میتوان از این سوئیچ برای اصلاح آن استفاده کرد.
اگر mkvmerge به اشتباه تشخیص دهد که یک فایل AAC از نوع SBR است، میتوانید مقدار ':0' را به شناسهٔ قطعه اضافه کنید. --audio-emphasis TID:n|symbolic-name
--reduce-to-core TID
در حال حاضر تنها ترکهای DTS تحت تأثیر این گزینه قرار میگیرند. ترکهای TrueHD که حاوی یک هسته تعبیهشدهٔ AC-3 هستند، در عوض به عنوان دو ترک جداگانه ارائه میشوند که کاربر میتواند انتخاب کند کدام ترک کپی شود. برای DTS چنین طرحی کارساز نخواهد بود، زیرا افزونههای HD برخلاف دادههای TrueHD نمیتوانند بهتنهایی رمزگشایی شوند.
--remove-dialog-normalization-gain TID
در حال حاضر تنها ترکهای AC-3، DTS و TrueHD تحت تأثیر این گزینه قرار میگیرند.
--timestamps TID:file-name
--default-duration TID:x
اگر مدتزمان پیشفرض تحمیل نشود، mkvmerge تلاش خواهد کرد مدتزمان پیشفرض ترک را برای انواع خاصی از ترکها مانند AVC/H.264 یا MPEG-2 از کانتینر و/یا جریان بیت کدگذاریشده به دست آورد.
این گزینه همچنین میتواند برای تغییر FPS ترکهای ویدیو بدون نیاز به استفاده از فایل برچسب زمانی خارجی استفاده شود.
--fix-bitstream-timing-information TID[:0|1]
نکته
این قابلیت تاکنون تنها برای ترکهای ویدیویی AVC/H.264 پیادهسازی شده است.
--compression TID:n
روش فشردهسازی 'mpeg4_p2'/'mpeg4p2' یک روش فشردهسازی ویژه به نام 'header removal' است که تنها برای ترکهای ویدیویی MPEG4 part 2 در دسترس است.
پیشفرض برای برخی از انواع زیرنویس، فشردهسازی 'zlib' است. این روش فشردهسازی همچنین روشی است که بیشتر (اگر نه همه) برنامههای پخش از آن پشتیبانی میکنند. پشتیبانی از روشهای فشردهسازی دیگر غیر از 'none' تضمین نمیشود.
گزینههای مختص ترکهای ویدیو (Options that only apply to video tracks)
-f, --fourcc TID:FourCC
--display-dimensions TID:widthxheight
راه دیگر برای تعیین مقادیر، استفاده از گزینهٔ --aspect-ratio یا --aspect-ratio-factor است (در زیر ببینید). این گزینهها مانعةالجمع هستند.
--aspect-ratio TID:ratio|width/height
راه دیگر برای تعیین مقادیر، استفاده از گزینههای --aspect-ratio-factor یا --display-dimensions است (در بالا و زیر ببینید). این گزینهها مانعةالجمع هستند.
--aspect-ratio-factor TID:factor|n/d
راه دیگر برای تعیین مقادیر، استفاده از گزینههای --aspect-ratio یا --display-dimensions است (در بالا ببینید). این گزینهها مانعةالجمع هستند.
--cropping TID:left,top,right,bottom
--color-matrix-coefficients TID:n
مقادیر معتبر و معنای آنها عبارتند از:
0: GBR، 1: BT709، 2: unspecified، 3: reserved، 4: FCC، 5: BT470BG، 6: SMPTE 170M، 7: SMPTE 240M، 8: YCOCG، 9: BT2020 non-constant luminance، 10: BT2020 constant luminance
--color-bits-per-channel TID:n
--chroma-subsample TID:hori,vert
مثال: برای ویدیویی با نمونهبرداری ثانویه رنگ 4:2:0، این پارامتر باید روی TID:1,1 تنظیم شود.
--cb-subsample TID:hori,vert
مثال: برای ویدیویی با نمونهبرداری ثانویه رنگ 4:2:1، پارامتر --chroma-subsample باید روی TID:1,0 و Cb-subsample باید روی TID:1,0 تنظیم شود. --chroma-siting TID:hori,vert
--color-range TID:n
--color-transfer-characteristics TID:n
مقادیر معتبر و مفهوم آنها عبارتند از:
0: رزروشده، 1: ITU-R BT.709، 2: مشخصنشده، 3: رزروشده، 4: منحنی گاما 2.2، 5: منحنی گاما 2.8، 6: SMPTE 170M، 7: SMPTE 240M، 8: خطی (linear)، 9: لگاریتمی (log)، 10: ریشهٔ دوم لگاریتمی (log sqrt)، 11: IEC 61966-2-4، 12: گاموت رنگی گسترشیافتهٔ ITU-R BT.1361، 13: IEC 61966-2-1، 14: ITU-R BT.2020 10 bit، 15: ITU-R BT.2020 12 bit، 16: SMPTE ST 2084، 17: SMPTE ST 428-1؛ 18: ARIB STD-B67 (HLG)
--color-primaries TID:n
مقادیر معتبر و مفهوم آنها عبارتند از:
0: رزروشده، 1: ITU-R BT.709، 2: مشخصنشده، 3: رزروشده، 4: ITU-R BT.470M، 5: ITU-R BT.470BG، 6: SMPTE 170M، 7: SMPTE 240M، 8: FILM، 9: ITU-R BT.2020، 10: SMPTE ST 428-1، 22: فسفرهای JEDEC P22
--max-content-light TID:n
--max-frame-light TID:n
--chromaticity-coordinates TID:red-x,red-y,green-x,green-y,blue-x,blue-y
--white-color-coordinates TID:x,y
--max-luminance TID:float
--min-luminance TID:float
--projection-type TID:method
--projection-private TID:data
--projection-pose-yaw TID:float
--projection-pose-pitch TID:float
--projection-pose-roll TID:float
--field-order TID:n
0: پیشرونده (progressive)؛ 1: درهمبافته با نمایش فیلد بالایی در ابتدا و ذخیرهٔ فیلد بالایی در ابتدا؛ 2: ترتیب فیلد نامشخص؛ 6: درهمبافته با نمایش فیلد پایینی در ابتدا و ذخیرهٔ فیلد پایینی در ابتدا؛ 9: درهمبافته با نمایش فیلد پایینی در ابتدا و ذخیرهٔ فیلد بالایی در ابتدا؛ 14: درهمبافته با نمایش فیلد بالایی در ابتدا و ذخیرهٔ فیلد پایینی در ابتدا
--stereo-mode TID:n|symbolic-name
--sub-charset TID:character-set
این گزینه میتواند چندین بار برای یک فایل ورودی استفاده شود و با انتخاب شناسههای قطعه متفاوت در هر بار، برای چندین قطعه اعمال گردد.
سایر گزینهها
-i, --identify file-name
قالب خروجی مورد استفاده برای نتیجه را میتوان با گزینه --identification-format تغییر داد.
-J file-name
-F, --identification-format format
این قالب برای تجزیه شدن در نظر گرفته نشده است. خروجی به زبانی که mkvmerge(1) استفاده میکند ترجمه خواهد شد (همچنین --ui-language را ببینید).
mkvmerge-identification-output-schema-v20.json[3]
تمامی نسخههای شمای JSON هم بهصورت برخط و هم در آرشیوهای کد منبع منتشرشده در دسترس هستند.
--probe-range-percentage percentage
اگر مشخص باشد قطعههایی وجود دارند اما پیدا نشوند، درصد بررسی را میتوان با این گزینه تغییر داد. مقدار حداقل 10 مگابایت به صورت پیشساخته است و قابل تغییر نیست.
--list-audio-emphasis
--list-languages
--list-stereo-modes
-l, --list-types
--priority priority
انتخاب 'lowest' همچنین باعث میشود mkvmerge(1) علاوه بر کمترین اولویت ممکن پردازش، اولویت ورودی/خروجی (I/O) بیاستفاده (idle) را نیز انتخاب کند.
--command-line-charset character-set
--output-charset character-set
-r, --redirect-output file-name
--no-bom
--flush-on-close
--ui-language code
--abort-on-warnings
--deterministic seed
مقدار seed میتواند یک رشته اختیاری باشد و نیازی نیست حتماً یک عدد باشد.
نتیجه فایلهای بایتبهبایت یکسان تنها تحت شرایط زیر تضمین میشود:
استفاده از سایر نسخههای mkvmerge(1) یا دیگر گزینههای خط فرمان ممکن است به فایلی با بایتهای یکسان منجر شود، اما تضمینی برای آن وجود ندارد.
--debug topic
--engage feature
--gui-mode
@options-file.json
اگر میخواهید از علامت @ بهعنوان نخستین نویسه در آرگومانِ یک گزینه مانند '--title' استفاده کنید، باید آن را با یک علامت @ دوم اِسکِیپ (escape) کنید. مثال:
$ mkvmerge -o midnight-s01e01.mkv --title @@midnight midnight-s01e01.mp4
--capabilities
-h, --help
-V, --version
نحوه استفاده (USAGE)
برای هر فایل، کاربر میتواند انتخاب کند که mkvmerge(1) کدام تِرَکها را بردارد. همهی آنها درون فایلی قرار میگیرند که با -o مشخص شده است. فهرستی از قالبهای منبع شناختهشده (و پشتیبانیشده) را میتوان با گزینه -l به دست آورد.
مهم
ترتیب گزینههای خط فرمان مهم است. لطفاً اگر در استفاده از این برنامه تازهکار هستید، بخش "Option order" را بخوانید.
ترتیب وارد کردن گزینهها برای برخی از آنها حائز اهمیت است. گزینهها به دو دسته تقسیم میشوند:
گزینهها از چپ به راست پردازش میشوند. اگر یک گزینه چندین بار در یک محدوده یکسان تکرار شود، آخرین مورد استفاده خواهد شد. بنابراین در مثال زیر، عنوان روی "Something else" تنظیم خواهد شد:
$ mkvmerge -o output.mkv --title 'This and that' input.avi --title 'Something else'
مثال زیر نشان میدهد که دو بار استفاده از گزینهٔ --language بلامانع است، زیرا در محدودههای متفاوتی استفاده شدهاند. با اینکه هر دو روی شناسه قطعه (track ID) یکسانی اعمال میشوند، اما مربوط به فایلهای ورودی متفاوتی هستند و در نتیجه محدودههای متفاوتی دارند:
$ mkvmerge -o output.mkv --language 0:fre français.ogg --language 0:deu deutsch.ogg
مثالها (EXAMPLES)
فرض کنید فایلی با نام MyMovie.avi و قطعه صوتی را در فایلی جداگانه، مثلاً 'MyMovie.wav' دارید. ابتدا میخواهید صدا را به فرمت OggVorbis(TM) کدگذاری کنید:
$ oggenc -q4 -oMyMovie.ogg MyMovie.wav
پس از چند دقیقه میتوانید ویدیو و صدا را با هم ادغام کنید:
$ mkvmerge -o MyMovie-with-sound.mkv MyMovie.avi MyMovie.ogg
اگر فایل AVI شما از قبل شامل یک قطعه صوتی باشد، آن قطعه نیز کپی خواهد شد (در صورتی که mkvmerge(1) از آن قالب صوتی پشتیبانی کند). برای جلوگیری از این کار، به سادگی دستور زیر را اجرا کنید:
$ mkvmerge -o MyMovie-with-sound.mkv -A MyMovie.avi MyMovie.ogg
پس از چند دقیقه تأمل، قطعه صوتی دیگری را، مثلاً توضیحات کارگردان یا زبان دیگری را در 'MyMovie-add-audio.wav' استخراج (rip) میکنید. دوباره آن را کدگذاری کرده و به فایل دیگر ملحق نمایید:
$ oggenc -q4 -oMyMovie-add-audio.ogg MyMovie-add-audio.wav $ mkvmerge -o MM-complete.mkv MyMovie-with-sound.mkv MyMovie-add-audio.ogg
همین نتیجه را میتوان با دستور زیر نیز به دست آورد:
$ mkvmerge -o MM-complete.mkv -A MyMovie.avi MyMovie.ogg MyMovie-add-audio.ogg
اکنون mplayer(TM) را اجرا کرده و لذت ببرید. اگر چندین قطعه صوتی (یا حتی قطعه ویدیویی) دارید، میتوانید با گزینههای '-vid' و '-aid' به mplayer(TM) بگویید که کدام قطعه را پخش کند. این گزینهها مبتنی بر صفر (0-based) هستند و تفاوتی میان ویدیو و صدا قائل نمیشوند.
اگر نیاز به همگامسازی یک قطعه صوتی دارید، به سادگی میتوانید این کار را انجام دهید. ابتدا با دستور زیر ببینید قطعه Vorbis چه شناسهای (track ID) دارد:
$ mkvmerge --identify outofsync.ogg
اکنون میتوانید از آن شناسه در خط فرمان زیر استفاده کنید:
$ mkvmerge -o goodsync.mkv -A source.avi -y 12345:200 outofsync.ogg
این دستور ۲۰۰ میلیثانیه سکوت به ابتدای قطعه صوتی با شناسهٔ 12345 که از 'outofsync.ogg' گرفته شده، اضافه میکند.
برخی فیلمها در ابتدا به درستی همگام هستند اما کمکم از حالت همگام خارج میشوند. برای این دسته از فیلمها میتوانید یک ضریب تأخیر تعیین کنید که بر تمام برچسبهای زمانی (timestamps) اعمال شود -- هیچ دادهای اضافه یا حذف نمیشود. بنابراین اگر این ضریب را بیش از حد بزرگ یا کوچک انتخاب کنید، نتایج نامطلوبی خواهید گرفت. به عنوان مثال، در یک قسمت که من تبدیل کد (transcode) کردم، در انتهای فیلم که 77340 فریم طول داشت، 0.2 ثانیه ناهمگامی وجود داشت. در نرخ 29.97fps، مقدار 0.2 ثانیه معادل تقریباً 6 فریم است. بنابراین دستور زیر را اجرا کردم:
$ mkvmerge -o goodsync.mkv -y 23456:0,77346/77340 outofsync.mkv
نتیجه رضایتبخش بود.
گزینههای همگامسازی را میتوان به همین شیوه برای زیرنویسها نیز به کار برد.
برای زیرنویسهای متنی میتوانید از برخی نرمافزارهای Windows (مانند SubRipper(TM)) یا بستهٔ subrip(TM) موجود در کدهای منبع transcode(1) در پوشهٔ 'contrib/subrip' استفاده کنید. روند کلی به این صورت است:
$ tccat -i /path/to/copied/dvd/ -T 1 -L | tcextract -x ps1 -t vob -a 0x20 | subtitle2pgm -o mymovie
$ pgm2txt mymovie
$ ispell -d american *txt
$ srttool -s -w -i mymovie.srtx -o mymovie.srt
فایل حاصل میتواند به عنوان یک فایل ورودی دیگر برای mkvmerge(1) استفاده شود:
$ mkvmerge -o mymovie.mkv mymovie.avi mymovie.srt
اگر میخواهید زبان را برای یک تراک مشخص تعیین کنید، این کار بهسادگی انجام میشود. ابتدا کد ISO 639-2 را برای زبان خود بیابید. mkvmerge(1) میتواند تمام آن کدها را برای شما فهرست کند:
$ mkvmerge --list-languages
فهرست را برای زبانهای مورد نیاز خود جستجو کنید. فرض کنید دو تراک صوتی را در یک فایل Matroska(TM) قرار دادهاید و میخواهید کدهای زبان آنها را تنظیم کنید و شناسههای تراک آنها 2 و 3 هستند. این کار با دستور زیر انجامپذیر است:
$ mkvmerge -o with-lang-codes.mkv --language 2:ger --language 3:dut without-lang-codes.mkv
همانطور که مشاهده میکنید، میتوانید از گزینهٔ --language چندین بار استفاده کنید.
شاید همچنین بخواهید پخشکننده از زبان هلندی به عنوان زبان پیشفرض استفاده کند. همچنین زیرنویسهای دیگری دارید، به عنوان مثال به زبانهای انگلیسی و فرانسوی، و میخواهید پخشکننده زیرنویس فرانسوی را بهطور پیشفرض نمایش دهد. این کار به این صورت انجامشدنی است:
$ mkvmerge -o with-lang-codes.mkv --language 2:ger --language 3:dut --default-track-flag 3 without-lang-codes.mkv --language 0:eng english.srt --default-track-flag 0 --language 0:fre french.srt
اگر زبان یا پرچمهای تراک پیشفرضی را که مشخص کردهاید در خروجی mkvinfo(1) مشاهده نمیکنید، لطفاً بخش مربوط به مقادیر پیشفرض را مطالعه کنید.
غیرفعال کردن فشردهسازی برای یک فایل ورودی.
$ mkvmerge -o no-compression.mkv --compression -1:none MyMovie.avi --compression -1:none mymovie.srt
شناسههای قطعه معمولی
برخی از گزینههای mkvmerge(1) برای مشخص کردن اینکه باید بر روی کدام قطعه اعمال شوند، به یک شناسه قطعه (track ID) نیاز دارند. این شناسههای قطعه هنگام تفکیک (demuxing) فایل ورودی جاری توسط خوانندهها، یا در صورتی که mkvmerge(1) با گزینهٔ --identify فراخوانی شود، چاپ میشوند. نمونهای از چنین خروجی:
$ mkvmerge -i v.mkv File 'v.mkv': container: Matroska(TM) Track ID 0: video (V_MS/VFW/FOURCC, DIV3) Track ID 1: audio (A_MPEG/L3)
شناسههای قطعهای را که به قطعههای قرار گرفته در فایل MKV خروجی اختصاص داده میشوند، با شناسههای قطعهٔ فایلهای ورودی اشتباه نگیرید. تنها شناسههای قطعهٔ فایل ورودی برای گزینههایی که به این مقادیر نیاز دارند استفاده میشوند.
همچنین توجه داشته باشید که هر فایل ورودی مجموعه شناسههای قطعهٔ مخصوص به خود را دارد. بنابراین شناسههای قطعه برای فایل 'file1.ext' همانطور که توسط 'mkvmerge --identify' گزارش شده است، صرفنظر از اینکه چند فایل ورودی دیگر وجود دارد یا 'file1.ext' در چه موقعیتی استفاده شده است، تغییر نمیکنند.
شناسههای قطعه به این صورت اختصاص مییابند:
گزینههایی که از شناسه قطعه استفاده میکنند آنهایی هستند که توضیحاتشان شامل 'TID' است. گزینههای زیر نیز از شناسههای قطعه استفاده میکنند: --audio-tracks، --video-tracks، --subtitle-tracks، --button-tracks و --track-tags.
شناسههای قطعه ویژه
چندین شناسه وجود دارند که معنای ویژهای داشته و در خروجی شناسایی ظاهر نمیشوند.
شناسه قطعهٔ ویژهٔ '-1' یک نویسه عام (wildcard) است و سوئیچ دادهشده را بر روی تمام قطعههایی که از یک فایل ورودی خوانده میشوند اعمال میکند.
شناسه قطعهٔ ویژهٔ '-2' به فصلهای موجود در یک فایل منبع اشاره دارد. در حال حاضر تنها گزینهٔ --sync از این شناسهٔ ویژه استفاده میکند. به عنوان جایگزینی برای --sync -2:... میتوان از گزینهٔ --chapter-sync ... استفاده کرد.
مدیریت زبان (LANGUAGE HANDLING)
قالب Matroska(TM) از دو نوع مختلف از عناصر زبان پشتیبانی میکند: عنصر قدیمی و منسوخشدهٔ «Language» حاوی کدهای ۳ حرفی ISO 639-2 و برچسبهای جدید «LanguageIETF» حاوی برچسبهای زبان IETF BCP 47. تمام گزینههای mkvmerge(1) که یک زبان را میپذیرند، برچسب زبان BCP 47 را قبول میکنند. mkvmerge(1) در هر کجا که ممکن باشد مقدار عنصر منسوخشدهٔ «Language» را از برچسبهای زبان BCP 47 مشتق میکند.
هنگام شناسایی یک فایل در حالت JSON، عناصر سرآیند قطعهٔ موجود از نوع «LanguageIETF» به عنوان ویژگی قطعهٔ language_ietf خروجی داده میشوند.
هنگام نوشتن یک فایل، mkvmerge(1) همواره عناصر «LanguageIETF»، «ChapLanguageIETF» و «TagLanguageIETF» را مینویسد (دو مورد آخر تنها در صورتی که به ترتیب فصلها یا برچسبها نوشته شوند). علاوه بر این عناصر، عناصر قدیمی متناظر نیز نوشته خواهند شد؛ آنها روی بخش کد ISO 639-2 از برچسب زبان BCP 47 تنظیم میشوند. به عنوان مثال، هنگامی که زبان قطعه روی sr-Cyrl-RS تنظیم شده باشد، «LanguageIETF» روی sr-Cyrl-RS و عنصر قدیمی «Language» روی srp تنظیم خواهد شد.
هنگام خواندن فایلهای موجود (فایلهای Matroska، فایلهای XML فصل یا برچسب و غیره) که از قبل حاوی عناصر «...LanguageIETF» هستند، عناصر موجود حفظ خواهند شد. در غیر این صورت عناصر «...LanguageIETF» بر اساس گزینههای خط فرمان و سایر عناصر منسوخشدهٔ موجود «...Language» اضافه خواهند شد.
ایجاد عناصر جدید را میتوان به طور کامل با گزینهٔ خط فرمان --disable-language-ietf که روی هر سه عنصر جدید عمل میکند، غیرفعال کرد.
میتوانید روش نرمالسازی اعمالشده بر زیربرچسبهای زبان گسترشیافته را با پارامتر --normalize-language-ietf انتخاب کنید.
فایلهای متنی و تبدیل مجموعهنویسه (TEXT FILES AND CHARACTER SET CONVERSIONS)
نکته
این بخش برای تمام برنامههای موجود در MKVToolNix صدق میکند، حتی اگر تنها به mkvmerge(1) اشاره کرده باشد.
تمام متنها در یک فایل Matroska(TM) با کدگذاری UTF-8 ذخیره میشوند. این بدان معناست که mkvmerge(1) باید هر فایل متنی را که میخواند و همچنین هر متنی را که در خط فرمان مشخص میشود، از یک مجموعه نویسه به UTF-8 تبدیل کند. در مقابل، این امر همچنین بدان معناست که خروجی mkvmerge(1) باید از UTF-8 دوباره به آن مجموعه نویسه تبدیل شود؛ برای نمونه اگر ترجمهای غیرانگلیسی با --ui-language به کار رود، یا برای متنی که از یک فایل Matroska(TM) سرچشمه میگیرد.
mkvmerge(1) این تبدیل را بهطور خودکار بر اساس وجود نشانگر ترتیب بایت (بهاختصار: BOM) یا لوکال کنونی سیستم انجام میدهد. نحوه استخراج مجموعه نویسه از لوکال به سیستمعاملی بستگی دارد که mkvmerge(1) روی آن اجرا میشود.
نشانگرهای ترتیب بایت (BOM)
فایلهای متنی که با یک BOM شروع میشوند، از پیش در یکی از قالبهای UTF کدگذاری شدهاند. mkvmerge(1) از پنج حالت زیر پشتیبانی میکند: UTF-8، UTF-16 لیتل و بیگ اندیان (Little and Big Endian)، UTF-32 لیتل و بیگ اندیان (Little and Big Endian). فایلهای متنی دارای BOM بهطور خودکار به UTF-8 تبدیل میشوند. هر یک از پارامترهایی که در غیر این صورت مجموعه نویسه را برای چنین فایلی تنظیم میکردند (مانند --sub-charset) بدون هیچ پیامی نادیده گرفته میشوند.
سیستمهای لینوکس و شبهیونیکس از جمله macOS
در سیستمهای شبهیونیکس، mkvmerge(1) از فراخوانی سیستمی setlocale(3) استفاده میکند که آن هم به نوبه خود متغیرهای محیطی LANG، LC_ALL و LC_CTYPE را به کار میگیرد. مجموعه نویسه حاصل اغلب یکی از UTF-8 یا خانواده ISO-8859-* است و برای تمام عملیاتهای فایل متنی، کدگذاری رشتهها در خط فرمان و خروجی به کنسول استفاده میشود.
ویندوز (Windows)
در ویندوز، مجموعه نویسه پیشفرضی که برای تبدیل فایلهای متنی استفاده میشود، با یک فراخوانی به فراخوانی سیستمی GetACP() تعیین میگردد.
خواندن خط فرمان با استفاده از تابع GetCommandLineW() انجام میشود که از پیش یک رشته یونیکد (Unicode) برمیگرداند. بنابراین گزینه --command-line-charset در ویندوز نادیده گرفته میشود.
خروجی به کنسول شامل سه حالت است:
گزینههای خط فرمان
گزینههای زیر وجود دارند که امکان تعیین مجموعههای نویسه را فراهم میکنند:
فایل گزینهها فایلی است که mkvmerge(1) میتواند آرگومانهای خط فرمان اضافی را از آن بخواند. این قابلیت میتواند برای دور زدن برخی محدودیتهای شل یا سیستمعامل هنگام اجرای برنامههای خارجی، مانند محدودیت در طول خط فرمان، به کار رود.
یک فایل گزینهها حاوی دادههای با قالب JSON است. محتوای آن باید یک آرایه معتبر JSON باشد که صرفاً از رشتههای JSON تشکیل شده است. کدگذاری (encoding) فایل باید UTF-8 باشد. فایل نباید با نشانگر ترتیب بایت (BOM) آغاز شود، اما در صورت وجود، نادیده گرفته خواهد شد.
قواعد گریز (escaping) نویسههای خاص درون JSON همان موارد مشخصشده در مشخصات رسمی JSON، یعنی RFC 7159[4] هستند.
نام خود فایل گزینهها باید به عنوان یک آرگومان خط فرمان همراه با پیشوند نویسه '@' مشخص شود.
خط فرمان 'mkvmerge -o "my file.mkv" -A "a movie.avi" sound.ogg' میتواند به فایل گزینههای JSON زیر، برای مثال به نام 'options.json' تبدیل شود:
[ "-o", "c:\\Matroska\\my file.mkv", "--title", "#65", "-A", "a movie.avi", "sound.ogg" ]
دستور معادل آن در این صورت 'mkvmerge @options.json' خواهد بود.
پیوند دادن فایلها (FILE LINKING)
فرمت Matroska(TM) از پیوند دادن فایلها (file linking) پشتیبانی میکند که بیانگر این است که یک فایل خاص، پیشین یا پسین فایل فعلی است. به بیان دقیقتر، در واقع این خود فایلها نیستند که پیوند داده میشوند، بلکه سگمنتهای Matroska(TM) هستند. از آنجا که احتمالاً بیشتر فایلها فقط حاوی یک سگمنت Matroska(TM) هستند، توضیحات زیر از اصطلاح 'پیوند فایل' استفاده میکنند، اگرچه 'پیوند سگمنت' مناسبتر است.
هر سگمنت با یک UID سگمنت ۱۲۸ بیتی یکتا شناسایی میشود. این UID به طور خودکار توسط mkvmerge(1) تولید میشود. پیوند دادن اساساً از طریق قرار دادن UIDهای سگمنت (به اختصار: SID) فایل قبلی/بعدی در اطلاعات سرایند (header) سگمنت انجام میپذیرد. mkvinfo(1) در صورت یافتن این SIDها آنها را چاپ میکند.
اگر یک فایل به چند فایل کوچکتر تقسیم شده و از پیوند استفاده شود، برچسبهای زمانی دوباره از ۰ شروع نخواهند شد، بلکه از جایی که فایل قبلی متوقف شده است ادامه مییابند. به این ترتیب زمان مطلق حتی در صورت در دسترس نبودن فایلهای قبلی (مثلاً هنگام پخش جریانی/استریم) حفظ میشود. در صورتی که از پیوند استفاده نشود، برچسبهای زمانی برای هر فایل باید از ۰ شروع شوند. به طور پیشفرض mkvmerge(1) از پیوند دادن فایلها استفاده نمیکند. در صورت نیاز میتوانید آن را با گزینه --link فعال کنید. این گزینه تنها در صورتی مفید است که تقسیم فایلها (splitting) نیز فعال باشد.
صرفنظر از اینکه تقسیم فایل فعال باشد یا خیر، کاربر میتواند به mkvmerge(1) دستور دهد تا فایلهای تولید شده را به SIDهای مشخصی پیوند دهد. این کار با استفاده از گزینههای --link-to-previous و --link-to-next انجام میشود. این گزینهها یک SID سگمنت را در قالبی که mkvinfo(1) خروجی میدهد میپذیرند: ۱۶ عدد در مبنای شانزده (هگزادسیمال) بین 0x00 و 0xff که هر کدام با '0x' شروع میشوند؛ مانند '0x41 0xda 0x73 0x66 0xd9 0xcf 0xb2 0x1e 0xae 0x78 0xeb 0xb4 0x5e 0xca 0xb3 0x93'. علاوه بر این میتوان از یک شکل کوتاهتر نیز استفاده کرد: ۱۶ عدد هگزادسیمال بین 0x00 و 0xff بدون پیشوند '0x' و بدون فاصله؛ مانند '41da7366d9cfb21eae78ebb45ecab393'.
اگر از تقسیم فایل استفاده شود، نخستین فایل به SID تعیینشده با --link-to-previous و آخرین فایل به SID تعیینشده با --link-to-next پیوند مییابد. اگر از تقسیم استفاده نشود، تکفایل خروجی به هر دوی این دو SID پیوند داده خواهد شد.
مقادیر پیشفرض (DEFAULT VALUES)
مشخصات Matroska(TM) بیان میکند که برخی از عناصر دارای یک مقدار پیشفرض هستند. معمولاً عنصری که مقدار آن با مقدار پیشفرض یکسان باشد، جهت صرفهجویی در فضا در فایل نوشته نمیشود. عناصری که ممکن است کاربر جای آنها را در خروجی mkvinfo(1) خالی ببیند، عناصر language و default track flag هستند. مقدار پیشفرض برای language برابر با انگلیسی ('eng') است و مقدار پیشفرض برای default track flag برابر با true میباشد. بنابراین اگر از --language 0:eng برای یک تِرَک استفاده کنید، در خروجی mkvinfo(1) نمایش داده نخواهد شد.
پیوستها (ATTACHMENTS)
شاید بخواهید تصاویری را همراه با فایل Matroska(TM) خود نگهداری کنید، یا از زیرنویسهای SSA استفاده میکنید و به یک قلم (فونت) TrueType(TM) خاص و نایاب نیاز دارید. در این موارد میتوانید آن فایلها را به فایل Matroska(TM) پیوست کنید. آنها تنها به انتهای فایل الحاق نمیشوند، بلکه درون آن تعبیه (embed) میگردند. پس از آن، یک پخشکننده میتواند آن فایلها را نمایش دهد (مورد 'تصاویر') یا از آنها برای رندر کردن زیرنویسها استفاده کند (مورد 'قلمهای TrueType(TM)').
در ادامه مثالی از نحوه پیوست کردن یک تصویر و یک قلم TrueType(TM) به فایل خروجی آمده است:
$ mkvmerge -o output.mkv -A video.avi sound.ogg \ --attachment-description "Me and the band behind the stage in a small get-together" \ --attachment-mime-type image/jpeg \ --attach-file me_and_the_band.jpg \ --attachment-description "The real rare and unbelievably good looking font" \ --attachment-mime-type application/octet-stream \ --attach-file really_cool_font.ttf
اگر یک فایل Matroska(TM) حاوی پیوست به عنوان فایل ورودی استفاده شود، mkvmerge(1) پیوستها را در فایل جدید کپی خواهد کرد. انتخاب اینکه کدام پیوستها کپی شوند و کدامیک کپی نشوند را میتوان با گزینههای --attachments و --no-attachments تغییر داد..SH "فصلها (CHAPTERS)"
سیستم فصلبندی Matroska(TM) بسیار قدرتمندتر از سیستم قدیمی و شناختهشده مورد استفاده در فایلهای OGM است. مشخصات کامل را میتوان در وبگاه Matroska(TM)[1] یافت.
mkvmerge(1) از دو نوع فایل فصلبندی به عنوان ورودی پشتیبانی میکند. قالب نخست، که 'قالب فصلبندی ساده' ('simple chapter format') نامیده میشود، همان قالبی است که ابزارهای OGM انتظار دارند. قالب دوم یک قالب فصلبندی مبتنی بر XML است که از تمام قابلیتهای فصلبندی Matroska(TM) پشتیبانی میکند.
علاوه بر فایلهای اختصاصی فصلبندی، mkvmerge(1) همچنین میتواند فصلها را از سایر قالبهای فایل (مانند MP4، Ogg، Blu-ray یا DVD) بخواند.
قالب فصلبندی ساده (The simple chapter format)
این قالب از جفتخطهایی تشکیل شده است که بهترتیب با 'CHAPTERxx=' و 'CHAPTERxxNAME=' آغاز میشوند. خط نخست حاوی مهرزمانی شروع است، در حالی که خط دوم عنوان را شامل میشود. در اینجا یک مثال آورده شده است:
CHAPTER01=00:00:00.000 CHAPTER01NAME=Intro CHAPTER02=00:02:30.000 CHAPTER02NAME=Baby prepares to rock CHAPTER03=00:02:42.300 CHAPTER03NAME=Baby rocks the house
دستور mkvmerge(1) هر جفت خط را به یک ChapterAtom در Matroska(TM) تبدیل خواهد کرد. این ابزار هیچ ChapterTrackNumber را تنظیم نمیکند، به این معنی که تمام فصلها برای همه ترکهای موجود در فایل اعمال میشوند.
از آنجا که این یک فایل متنی است، ممکن است نیاز به تبدیل مجموعه نویسهها (character set) باشد. برای توضیح در مورد چگونگی تبدیل بین مجموعههای نویسه توسط mkvmerge(1)، بخش مربوط به فایلهای متنی و مجموعههای نویسه (text files and character sets) را ببینید.
قالب فصلبندی مبتنی بر XML (The XML based chapter format)
قالب فصلبندی مبتنی بر XML شبیه به این مثال است:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Chapters SYSTEM "matroskachapters.dtd">
<Chapters>
<EditionEntry>
<ChapterAtom>
<ChapterTimeStart>00:00:30.000</ChapterTimeStart>
<ChapterTimeEnd>00:01:20.000</ChapterTimeEnd>
<ChapterDisplay>
<ChapterString>A short chapter</ChapterString>
<ChapterLanguage>eng</ChapterLanguage>
</ChapterDisplay>
<ChapterAtom>
<ChapterTimeStart>00:00:46.000</ChapterTimeStart>
<ChapterTimeEnd>00:01:10.000</ChapterTimeEnd>
<ChapterDisplay>
<ChapterString>A part of that short chapter</ChapterString>
<ChapterLanguage>eng</ChapterLanguage>
</ChapterDisplay>
</ChapterAtom>
</ChapterAtom>
</EditionEntry>
</Chapters>
با این قالب سه کار ممکن است که با قالب ساده فصلبندی امکانپذیر نیست:
توزیع mkvtoolnix شامل تعدادی فایل نمونه در زیردایرکتوری doc است که میتواند به عنوان پایه مورد استفاده قرار گیرد.
فهرست زیر برچسبهای پشتیبانیشدهٔ XML، نوع دادهٔ آنها و در صورت لزوم، محدودهٔ مجاز مقادیر آنها را نشان میدهد:
Chapters (master)
EditionEntry (master)
EditionUID (unsigned integer, valid range: 1 <= value)
EditionFlagHidden (unsigned integer, valid range: 0 <= value <= 1)
EditionFlagDefault (unsigned integer, valid range: 0 <= value <= 1)
EditionFlagOrdered (unsigned integer, valid range: 0 <= value <= 1)
ChapterAtom (master)
ChapterAtom (master)
ChapterUID (unsigned integer, valid range: 1 <= value)
ChapterTimeStart (unsigned integer)
ChapterTimeEnd (unsigned integer)
ChapterFlagHidden (unsigned integer, valid range: 0 <= value <= 1)
ChapterFlagEnabled (unsigned integer, valid range: 0 <= value <= 1)
ChapterSegmentUID (binary, valid range: 1 <= length in bytes)
ChapterSegmentEditionUID (unsigned integer, valid range: 1 <= value)
ChapterPhysicalEquiv (unsigned integer)
ChapterTrack (master)
ChapterTrackNumber (unsigned integer, valid range: 1 <= value)
ChapterDisplay (master)
ChapterString (UTF-8 string)
ChapterLanguage (UTF-8 string)
ChapterCountry (UTF-8 string)
ChapterProcess (master)
ChapterProcessCodecID (unsigned integer)
ChapterProcessPrivate (binary)
ChapterProcessCommand (master)
ChapterProcessTime (unsigned integer)
ChapterProcessData (binary)
mkvmerge(1) میتواند فصلها را از Blu-rayهای رمزگذارینشده بخواند. برای این کار میتوانید از مسیر یکی از فهرستهای پخش MPLS به همراه پارامتر --chapters استفاده کنید.
مثال: --chapters /srv/blurays/BigBuckBunny/BDMV/PLAYLIST/00001.mpls
خواندن فصلها از DVDها
هنگامی که MKVToolNix با کتابخانهٔ libdvdread(TM) کامپایل شده باشد، mkvmerge(1) میتواند فصلها را از DVDها بخواند. برای این کار میتوانید مسیر یکی از پوشهها یا فایلهای موجود در DVD را به همراه پارامتر --chapters به کار ببرید. از آنجا که DVDها میتوانند شامل بیش از یک عنوان باشند و هر عنوان مجموعه فصلهای خود را دارد، میتوانید یک دونقطه و شمارهٔ عنوان مورد نظر را به انتهای آرگومان نام فایل اضافه کنید. شمارهٔ عنوان به طور پیشفرض 1 است.
مثال: --chapters /srv/dvds/BigBuckBunny/VIDEO_TS:2
نکات عمومی
هنگام تقسیم فایلها، mkvmerge(1) فصلها را نیز به درستی تنظیم میکند. این بدان معناست که هر فایل تنها شامل ورودیهای فصلی است که به آن مربوط میشود، و نشانههای زمانی (timestamps) برای مطابقت با نشانههای زمانی جدید هر فایل خروجی آفست خواهند شد.
mkvmerge(1) قادر است فصلها را از فایلهای منبع Matroska(TM) کپی کند مگر اینکه این قابلیت صراحتاً با گزینهٔ --no-chapters غیرفعال شده باشد. فصلها از تمام منابع (فایلهای Matroska(TM)، فایلهای Ogg، فایلهای MP4، فایلهای متنی فصل) معمولاً ادغام نمیشوند بلکه در ChapterEditionهای جداگانه قرار میگیرند. تنها در صورتی که فصلها از چند فایل Matroska(TM) یا XML خوانده شوند که UIDهای ویرایش (edition UIDs) یکسانی داشته باشند، فصلها در یک ChapterEdition واحد ادغام خواهند شد. چنانچه چنین ادغامی در موقعیتهای دیگر نیز مورد نیاز باشد، کاربر باید ابتدا فصلها را از تمام منابع با mkvextract(1) استخراج کند، فایلهای XML را به صورت دستی ادغام کرده و سپس آنها را مالتیپلکس (mux) نماید.
برچسبها (TAGS)
مقدمه
سیستم برچسبگذاری Matroska(TM) مشابه با سایر قالبهای نگهدارنده است: مجموعهای از جفتهای KEY=VALUE. با این وجود، در Matroska(TM) این برچسبها میتوانند تو در تو نیز باشند، و هر دو بخش KEY و VALUE عناصر مستقل خود هستند. فایل نمونهٔ example-tags-2.xml نحوهٔ استفاده از این سیستم را نشان میدهد.
دامنهٔ برچسبها
برچسبهای Matroska(TM) به طور خودکار بر کل فایل اعمال نمیشوند. آنها میتوانند اعمال شوند، اما ممکن است بر بخشهای متفاوتی از فایل نیز اعمال گردند: بر یک یا چند تراک، بر یک یا چند فصل، یا حتی ترکیبی از هر دو. مشخصات Matroska(TM)[5] جزئیات بیشتری در مورد این موضوع ارائه میدهد.
یک نکتهٔ مهم این است که برچسبها با استفاده از عنصر برچسب Targets در Matroska(TM) به تراکها یا فصلها پیوند داده میشوند، و UIDهای به کار رفته برای این پیوند، شناسههای تراکی (track IDs) که mkvmerge(1) در همهجا استفاده میکند نیستند. در عوض، شمارههای استفادهشده همان UIDهایی هستند که mkvmerge(1) به طور خودکار محاسبه میکند (اگر تراک از قالب فایلی به جز Matroska(TM) گرفته شده باشد) یا در صورتی که فایل منبع تراک یک فایل Matroska(TM) باشد، از فایل منبع کپی میشوند. بنابراین دشوار است که پیش از تحویل فایل به mkvmerge(1) بدانید از کدام UIDها در فایل برچسب استفاده کنید.
mkvmerge(1) دو گزینه را میشناسد که با آنها میتوانید برچسبها را به فایلهای Matroska(TM) اضافه کنید: گزینههای --global-tags و --tags. تفاوت در این است که گزینهٔ اول، --global-tags، با حذف هر یک از آن عناصر Targets که در بالا ذکر شد، باعث میشود برچسبها بر کل فایل اعمال گردند. گزینهٔ دوم، --tags، به طور خودکار UID تولید شده توسط mkvmerge(1) را برای برچسب مشخصشده در بخش TID گزینهٔ --tags درج میکند.
مثال
فرض کنید میخواهید برچسبهایی را به یک تراک ویدیویی خواندهشده از یک AVI اضافه کنید. دستور mkvmerge --identify file.avi به شما میگوید که شناسهٔ (ID) تراک ویدیو (این ID را با UID اشتباه نگیرید!) برابر با 0 است. بنابراین فایل برچسب خود را ایجاد میکنید، تمام عناصر Targets را حذف میکنید و mkvmerge(1) را فراخوانی مینمایید:
$ mkvmerge -o file.mkv --tags 0:tags.xml file.avi
قالب فایل برچسب
mkvmerge(1) از یک قالب فایل برچسب مبتنی بر XML پشتیبانی میکند. این قالب بسیار نزدیک به مشخصات Matroska(TM)[5] طراحی شده است. هم توزیعهای باینری و هم سورس MKVToolNix همراه با یک فایل نمونه به نام example-tags-2.xml عرضه میشوند که صرفاً تمام برچسبهای شناختهشده را فهرست میکند و میتواند به عنوان پایهای برای فایلهای برچسب واقعی به کار رود.
اصول اولیه عبارتند از:
سامانهٔ برچسبگذاری جدید Matroska(TM) تنها دو نوع داده را میشناسد: یک رشتهٔ UTF-8 و یک نوع باینری (دودویی). اولی برای نام برچسب و عنصر <String> به کار میرود، در حالی که نوع باینری برای عنصر <Binary> استفاده میشود.
از آنجا که دادههای باینری به خودی خود در یک فایل XML جای نمیگیرند، mkvmerge(1) از دو روش دیگر برای ذخیرهسازی دادههای باینری پشتیبانی میکند. اگر محتوای یک برچسب XML با '@' آغاز شود، متن پس از آن به عنوان نام یک فایل در نظر گرفته میشود. محتوای فایل مربوطه درون عنصر Matroska(TM) کپی خواهد شد.
در غیر این صورت، انتظار میرود که دادهها با کدگذاری Base64 باشند. این یک روش کدگذاری است که دادههای باینری را به مجموعهای محدود از نویسههای ASCII تبدیل میکند و برای نمونه در برنامههای ایمیل به کار میرود. mkvextract(1) برای عناصر باینری، دادهها را به صورت کدگذاریشده با Base64 خروجی میدهد.
سامانهٔ برچسبگذاری منسوخشده انواع دادهٔ دیگری را نیز میشناسد که در مشخصات رسمی برچسبهای Matroska(TM) یافت میشوند. از آنجا که mkvmerge(1) دیگر از این سامانه پشتیبانی نمیکند، این نوعها در اینجا شرح داده نشدهاند.
برچسبهای شناختهشده برای قالب فایل XML (Known tags for the XML file format)
فهرست زیر برچسبهای XML پشتیبانیشده، نوع دادهٔ آنها و در صورت لزوم، محدودهٔ مجاز مقادیر آنها را نشان میدهد:
Tags (master)
Tag (master)
Targets (master)
TargetTypeValue (unsigned integer)
TargetType (UTF-8 string)
TrackUID (unsigned integer)
EditionUID (unsigned integer)
ChapterUID (unsigned integer)
AttachmentUID (unsigned integer)
Simple (master)
Simple (master)
Name (UTF-8 string)
TagLanguage (UTF-8 string)
DefaultLanguage (unsigned integer)
String (UTF-8 string)
Binary (binary)
اطلاعات قطعه (SEGMENT INFORMATION)
با یک فایل XML اطلاعات قطعه (segment info)، تنظیم مقادیر مشخصی در فیلد سرایند «اطلاعات قطعه» (segment information) یک فایل Matroska(TM) امکانپذیر است. هیچیک از این مقادیر را نمیتوان با سایر گزینههای خط فرمان تنظیم کرد.
سایر فیلدهای سرایند «اطلاعات قطعه» را میتوان از طریق گزینههای خط فرمان تنظیم نمود، اما نه از طریق فایل XML. این موارد برای نمونه شامل گزینههای --title و --timestamp-scale است.
عناصر دیگری نیز وجود دارند که نه از طریق گزینههای خط فرمان و نه از طریق فایلهای XML قابل تنظیم نیستند. این عناصر شامل موارد زیر هستند: DateUTC (همچنین با عنوان «تاریخ مالتیپلاکس» یا "muxing date" شناخته میشود)، MuxingApp، WritingApp و Duration. این موارد همیشه توسط خودِ mkvmerge(1) تنظیم میشوند.
فهرست زیر برچسبهای XML پشتیبانیشده، نوع دادهٔ آنها و در صورت لزوم، محدودهٔ مجاز مقادیر آنها را نشان میدهد:
Info (master)
SegmentUID (binary, valid range: length in bytes == 16)
SegmentFilename (UTF-8 string)
PreviousSegmentUID (binary, valid range: length in bytes == 16)
PreviousSegmentFilename (UTF-8 string)
NextSegmentUID (binary, valid range: length in bytes == 16)
NextSegmentFilename (UTF-8 string)
SegmentFamily (binary, valid range: length in bytes == 16)
ChapterTranslate (master)
ChapterTranslateEditionUID (unsigned integer)
ChapterTranslateCodec (unsigned integer)
ChapterTranslateID (binary)
چیدمان فایل ماتروشکا (MATROSKA(TM) FILE LAYOUT)
چیدمان فایل Matroska(TM) بسیار انعطافپذیر است. mkvmerge(1) فایل را به شیوهای از پیشتعریفشده تولید (رندر) میکند. فایل حاصل به این صورت خواهد بود:
[EBML head] [segment {meta seek #1} [segment information] [track information] {attachments} {chapters} [cluster 1] {cluster 2} ... {cluster n} {cues} {meta seek #2} {tags}]
عناصر درون ابروها اختیاری هستند و به محتوا و گزینههای استفادهشده بستگی دارند. چند نکته:
کوتاهترین فایل ممکن Matroska(TM) بدین صورت خواهد بود:
[EBML head] [segment [segment information] [track information] [cluster 1]]
این حالت ممکن است برای فایلهای فقط صوتی (audio-only) رخ دهد..SH "فایلهای برچسب زمانی خارجی (EXTERNAL TIMESTAMP FILES)"
mkvmerge(1) به کاربر اجازه میدهد تا برچسبهای زمانی را برای یک قطعهٔ مشخص، خودش انتخاب کند. این قابلیت میتواند برای ایجاد فایلهایی با ویدیوی دارای نرخ فریم متغیر یا گنجاندن وقفه در صدا استفاده شود. فریم در این حالت واحدی است که mkvmerge(1) بهطور مجزا به ازای هر بلوک Matroska(TM) ایجاد میکند. برای ویدیو این دقیقاً یک فریم و برای صدا یک بسته از نوع صوتی مشخص است. برای نمونه برای AC-3 این بستهای حاوی 1536 نمونه خواهد بود.
فایلهای برچسب زمانی که هنگام الحاق قطعهها به یکدیگر استفاده میشوند، باید تنها برای بخش نخست از یک زنجیره از قطعهها مشخص شوند. برای نمونه اگر دو فایل v1.avi و v2.avi را به یکدیگر الحاق میکنید و میخواهید از برچسبهای زمانی استفاده کنید، خط فرمان شما باید چیزی شبیه به این باشد:
$ mkvmerge ... --timestamps 0:my_timestamps.txt v1.avi +v2.avi
چهار قالب وجود دارد که توسط mkvmerge(1) شناخته میشوند. خط نخست همیشه شامل شماره نسخه است. خطهای خالی، خطهایی که تنها حاوی فاصله هستند و خطهایی که با '#' آغاز میشوند نادیده گرفته میشوند.
قالب v1 فایل برچسب زمانی (Timestamp file format v1)
این قالب با خط نسخه آغاز میشود. خط دوم، تعداد پیشفرض فریمها بر ثانیه را اعلام میکند. تمام خطهای پس از آن شامل سه عدد هستند که با کاما از هم جدا شدهاند: فریم آغازین (0 نخستین فریم است)، فریم پایانی و تعداد فریمها در این بازه. مقدار FPS یک عدد ممیز شناور با نقطهٔ '.' به عنوان ممیز اعشاری است. بازهها میتوانند شامل وقفههایی باشند که برای آنها از FPS پیشفرض استفاده میشود. یک نمونه:
# timestamp format v1 assume 27.930 800,1000,25 1500,1700,30
قالب v2 فایل برچسب زمانی (Timestamp file format v2)
در این قالب هر خط شامل یک برچسب زمانی برای فریم متناظر است. این برچسب زمانی باید با دقت میلیثانیه ارائه شود. میتواند یک عدد ممیز شناور باشد، اما الزامی نیست. شما باید دستکم به اندازهٔ تعداد فریمهای موجود در قطعه، خطهای برچسب زمانی ارائه دهید. برچسبهای زمانی در این فایل باید مرتبشده باشند. نمونه برای 25fps:
# timestamp format v2 0 40 80
قالب v3 فایل برچسب زمانی (Timestamp file format v3)
در این قالب هر خط شامل مدت زمانی بر حسب ثانیه است که به دنبال آن یک مقدار اختیاری برای تعداد فریم بر ثانیه میآید. هر دو میتوانند اعدادی با ممیز شناور باشند. اگر تعداد فریم بر ثانیه قید نشود، مقدار پیشفرض استفاده خواهد شد. برای صدا باید اجازه دهید خود کدک، برچسبهای زمانی فریم را محاسبه کند. برای این منظور باید از 0.0 به عنوان تعداد فریم بر ثانیه استفاده کنید. همچنین میتوانید با استفاده از کلیدواژهٔ 'gap' به همراه مدت زمان وقفه، در جریان وقفه ایجاد کنید. نمونه برای یک فایل صوتی:
# timestamp format v3 assume 0.0 25.325 7.530,38.236 gap, 10.050 2.000,38.236
قالب v4 فایل برچسب زمانی (Timestamp file format v4)
این قالب کاملاً مشابه قالب v2 است. تنها تفاوت این است که برچسبهای زمانی نیازی نیست مرتبشده باشند. از این قالب تقریباً هرگز نباید استفاده شود.
کدهای خروج (EXIT CODES)
mkvmerge(1) با یکی از این سه کد خروج خارج میشود:
mkvmerge(1) از متغیرهای پیشفرضی که تنظیمات محلی (locale) سیستم را تعیین میکنند (مانند LANG و خانوادهٔ LC_*) استفاده میکند. متغیرهای اضافی:
MKVMERGE_DEBUG، MKVTOOLNIX_DEBUG و شکل کوتاه آن MTX_DEBUG
MKVMERGE_ENGAGE، MKVTOOLNIX_ENGAGE و شکل کوتاه آن MTX_ENGAGE
همچنین ببینید (SEE ALSO)
mkvinfo(1)، mkvextract(1)، mkvpropedit(1)، mkvtoolnix-gui(1)
وبگاه (WWW)
همیشه میتوان تازهترین نسخه را در وبگاه اصلی MKVToolNix[6] یافت.
نویسنده (AUTHOR)
Moritz Bunkus <moritz@bunkus.org>
نکات (NOTES)
- 1.
- وبگاه Matroska(TM)
- 2.
- وبگاه اصلی IANA
- 3.
- mkvmerge-identification-output-schema-v20.json
- 4.
- RFC 7159
- 5.
- مشخصات Matroska(TM)
- 6.
- وبگاه اصلی MKVToolNix
| 2026-08-24 | MKVToolNix 101.0 |