با سلام و احترام خدمت بازدیدکنندگان عزیز
آموزش و آشنایی با نرم افزار FFmpeg – قسمت سوم – مدیریت Stream ها
برای مشاهده قسمت اول به این پست مراجعه نمایید.
برای مشاهده قسمت دوم به این پست مراجعه نمایید.

مدیریت Stream ها
از نکات مهمی که در کار با FFmpeg بهتره یاد بگیریم دستور map و stream specifier ها می باشد. کار این دستور کنترل و تعیین و تکلیف استریم هاست. همانطور که می دانید هر فایل ویدئویی و حتی صوتی تشکیل شده از استریم هاست، مثلا در فایل صوتی mp3، اگر cover art وجود داشته باشد از نظر FFmpeg یک استریم ویدئویی محسوب می شود علاوه بر یک استریم صوتی خودش. فایل ویدئویی هم که می تواند چند صدا و زیرنویس داشته باشد که هرکدام یک استریم (stream) جداگانه محسوب می شوند.
با دقت لازم به چند مثال آتی یاد خواهیم گرفت.
در تمامی این مثال ها، دوفایل ورودی داریم که یکی فایل اول ماست که یک فیلم mkv هست با یک استریم ویدئو، دو استریم صدا و یک استریم زیرنویس و فایل دوم ما یک فایل m4a هست با فقط یک استریم صدای aac داخلش. فرآیند نهایی مثال ها هم بدون تبدیل فرمت استریم ها انجام می گیرد (بوسیله قرار دادن مقدار copy جلوی سوئیچ -codec که به اینکار streamcopy هم گفته می شود).

مثال یک، فایل دوم را به فایل اول اضافه می کنیم بطوری که تمام استریم های هر دو فایل در فایل خروجی باشند: SET FFmpeg=D:\ _Tools_\_my builds\64bit\video\ffmpeg.exe

"%FFmpeg%" -i "file1.mkv" -i "file2.m4a" -map 0 -map 1 -c copy -y "file1_plus_file2.mkv"
Pause
در دستور بالا، سوئیچ های مپ به کل استریم ها اشاره دارند. یعنی -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 مراجعه نمایید.

--پایان قسمت سوم - مشاهده قسمت چهارم