با سلام و احترام خدمت بازدیدکنندگان عزیز
آموزش و آشنایی با نرم افزار FFmpeg – قسمت سوم – مدیریت Stream ها
برای مشاهده قسمت اول به
این پست
مراجعه نمایید.
برای مشاهده قسمت دوم به
این پست
مراجعه نمایید.
مدیریت Stream ها
از نکات مهمی که در کار با FFmpeg بهتره یاد بگیریم دستور map و
stream specifier
ها میباشد. کار این دستور کنترل و تعیین و تکلیف استریمهاست. همانطور که میدانید هر فایل ویدئویی و حتی صوتی تشکیل شده از استریمها (یا همون جریان)هاست، مثلا در فایل صوتی mp3، اگر cover art وجود داشته باشد از نظر FFmpeg یک استریم ویدئویی محسوب میشود علاوه بر یک استریم صوتی خودش. فایل ویدئویی هم که میتواند چند صدا و زیرنویس داشته باشد که هرکدام یک استریم (stream) جداگانه محسوب میشوند.
با دقت لازم به چند مثال آتی یاد خواهیم گرفت.
در تمامی این مثالها، دوفایل ورودی داریم که یکی فایل اول ماست که یک فیلم mkv هست با یک استریم ویدئو، دو استریم صدا و یک استریم زیرنویس و فایل دوم ما یک فایل m4a هست با فقط یک استریم صدای aac داخلش. فرآیند نهایی مثالها هم بدون تبدیل فرمت استریمها انجام میگیرد (بوسیله قرار دادن مقدار copy جلوی سوئیچ
-codec
که به اینکار streamcopy هم گفته میشود).
مثال یک، فایل دوم را به فایل اول اضافه میکنیم بطوری که تمام استریمهای هر دو فایل در فایل خروجی باشند:
FFmpeg -i "file1.mkv" -i "file2.m4a" -map 0 -map 1 -c copy -y "file1_plus_file2.mkv"
در دستور بالا، سوئیچهای مپ به کل استریمها اشاره دارند. یعنی
-map 1
میگوید از دومین فایل ورودی که همان file2.m4a هست همه ی استریم هایش را به فایل خروجی منتقل کن. (اینجا یاد گرفتیم که ترتیب دستورهای
-i
، یک شناسه شمارهای برای فایل ورودی وارد شده توسط همان
-i
ایجاد میکند و این شناسه از پایه ی صفر شروع میشود. یعنی input با شناسه
0
اشاره به فایل وارد شده توسط *اولین
-i
دارد،
1
اشاره به فایل وارد شده توسط *دومین
-i
دارد و الی آخر)
حالا در مثال پایینی میگوییم که از file2.mp4 فقط تمام استریمهای "صوتیش" را به خروجی منتقل کن:
FFmpeg -i "file1.mkv" -i "file2.m4a" -map 0 -map 1:a -c copy -y "file1_plus_file2.mkv"
حالا در مثال پائینی میگوییم که از file2.mp4 فقط "اولین" استریم صوتیش را به فایل خروجی منتقل کن:
FFmpeg -i "file1.mkv" -i "file2.m4a" -map 0 -map 1:a:0 -c copy -y "file1_plus_file2.mkv"
حالا در مثال پائینی میگوییم از file1.mkv فقط اولین استریم تصویرش و اولین استریم زیرنویسش را منتقل کن:
FFmpeg -i "file1.mkv" -i "file2.m4a" -map 0:v:0 -map 0:s:0 -map 1 -c copy -y "file1_plus_file2.mkv"
حالا در مثال پائینی میگوییم از file1.mkv همه ی استریم هایش را "بغیر" از دومین استریم صدایش به خروجی منتقل کن:
FFmpeg -i "file1.mkv" -i "file2.m4a" -map 0 -map -0:a:1 -map 1 -c copy -y "file1_plus_file2.mkv"
در مثال پائینی میخواهیم ترتیب استریمها را در خروجی عوض کنیم. یعنی کاری کنیم که در فایل خروجی، اولین استریم صدا بشود همانی که از فایل m4a برداشتیم و دومین و سومین استریم صدا بشود صدایهای موجود در فایل mkv:
FFmpeg -i "file1.mkv" -i "file2.m4a" -map 0:v -map 1:a -map 0:a -map 0:s -c copy -y "file1_plus_file2.mkv"
خب این مثالها تمام ماجرا نیستند اما پر کاربردترین موارد استفاده میباشند. برای یادگیری موارد دیگر به Documentation خود FFmpeg مراجعه نمایید.
- مشاهده
قسمت چهارم