آلیس در سرزمین ffmpeg

سلام سلام سلام. خوبین؟با احتمال بالای نود درصد، شمایی که الان داری این مطلبو میخونی، یه وقتی، یه روزی، یه جایی، یه جوی، صبر داشتی و مجبور شدی با یه محتوای مالتی مدیا دست و پنجه نرم کنی.برای خیلیا هم حریفِ چغرِ بد بدن یعنی کارایی مثل یه تبدیل ساده فرمت فیلم (مثلا برای پخش کردن روی دستگاه های مختلف)، کاهش حجم، چسبوندن و حذف کردن صدا و زیرنویسِ فیلم و موارد این چنینی.توی این مقاله میخوایم با یکی از ابزارایی که کلی قابلیت برای وَر رفتن با انواع محتوا بهمون میده آشنا بشیم، درسته که نرم افزار هایی هم وجود دارن که خیلیم خوب هستن و کلی راه اندازن، اما بعضیاشون یا حجمشون زیاده، یا کار باهاشون شاید خیلی آسون نباشه، یا دست و بال ما رو خیلی باز نمیذارن، یا حتی جالبه که خیلی از نرم افزارا هم خودشون از همین FFmpeg استفاده میکنن.استفاده از FFmpeg رایگانه ولی قبل از ادامه هم بگم که این مقاله نیاز به اجرای دستورات داره و اگه با این قضیه مشکل دارین لطفاً قبل از اینکه سریع صفحرو ببنیدن، تصمیم بگیرین که یه نگاهی به مثالایی که زده میشه بندازین، شاید هم علاقه مند شدین هم یه جایی کارتون رو راه انداخت. حتی شاید به دیگران معرفیش کنید یا به عنوان یه ابزار توی شغلتون ازش استفاده کنید. راستی، حالا چرا "آلیس در سرزمین FFmpeg"؟ اوووم، خب دلیل خیلی خاصی نداره :)تنها ربط آلیس و دنیای عجایبش به این مقاله اینه که اسم کارتون و فیلمه، ما هم قراره در مورد کار کردن با انواع محتوا (مثل فیلم) صحبت کنیم. از طرفی هم وقتی شروع به استفاده از FFmpeg بکنید واقعا شاید یجورایی قبول کنید که خیلیم چیزی از دنیای عجایب کم نداره!FFmpeg is a complete, cross-platform solution to record, convert and stream audio and videoشما یا با FFmpeg آشنا هستین، یا میخواین آشنا بشین، یا صرفاً قصد جاست خوندن دارین، یا شایدم گزینه چهار، یعنی همه موارد، شایدم هیچ کدام! در هر صورت بیاین اول ببینیم FFmpeg چی هست.توضیحی که توی سایت رسمی FFmpeg نوشته شده، میگه که FFmpeg یه راه حل کاملِ قابل اجرا روی پلترفرم های مختلفه برای ضبط، تبدیل و استریم صدا و فیلم (برای stream اگه ترجمه مناسبی به فارسی پیدا کردین خوشحال میشم بگین).برای نصبش که زیادم سخت نیست میتونید از سایت رسمی FFmpeg استفاده کنید.برای یادگیریش هم میتونید از داکیومنتِ سایت Ffmpeg کمک بگیرین. الان جا داره بگین اگه قراره از داکیومنت سایت خودش استفاده کنیم خب چرا باید این مقالرو بخونیم...جواب: آاافرین چققققدر سوال خوبی پرسیدی، اینو به عنوان تحقیق واسه جلسه بعد خودت روش کار کنقرار نیست اینجا ما کل FFmpeg رو یاد بگیریم، فقط تا حدود قابل قبولی با ماهیت، منطق ساختاری، و برخی از کاربردهای عمومیش آشنا میشیم و یسری مثالِ نسبتاً کاربردی میبینیم.برای اجرای FFmpeg میشه از نرم افزارهایی که رابط کاربری هم دارن استفاده کرد اما بشدت توصیه میکنم سعی کنید با محیط هایی مثل cmd یا پاورشل و ... در ویندوز یا ترمینال و شل در لینوکس کار کنید (ادامه این مقاله هم کامندها یا دستوراتی که میتونید توی این محیط ها اجرا کنید رو نشون میده)قبل از ادامه یه نکته خیلی مهم و جالب رو هم بگم که FFmpeg متن باز یا همون Open Source هست و اگه برنامه نویس هستین یا به دیدن و خوندن کد علاقه دارین، بفرمائید، این شما و این هم: https://git.ffmpeg.org/ffmpeg.gitو بالاخره تازه رسیدیم به نقطه شروع. هر کامند یا دستور FFmpeg با کلمه کلیدی ffmpeg شروع میشه. اول از همه برای اینکه مطمئن بشیم ffmpeg روی سیستم شما بدرستی نصب شده با اجرای دستور ffmpeg به تنهایی باید بتونید ورژنش رو ببینید:ویندوزلینوکسدستور FFprobeقبل از اینکه ببینیم ffmpeg چه ویژگی هایی داره، بیاین با دستور ffprobe آشنا بشیم. وقتی ffmpeg رو نصب کنید میتونید از دستور ffprobe هم استفاده کنید:ffprobe linuxدستور ffprobe میتونه تمامی اطلاعاتی که از یه محتوای صوتی یا تصویری و حتی زیرنویس لازم دارین رو در اختیارتون قرار بده. برای مثال خروجی دستور زیر:ffprobe c:\BigBuckBunny.mp4بصورت زیر هست:ffprobeاول بریم سراغ دستور. وقتی دستور ffprobe c:\BigBuckBunny.mp4 رو تایپ میکنیم، داریم اول میگیم که ما میخوایم از ffprobe استفاده کنیم، و جلوی اون، آدرس فایلی که قراره اطلاعاتش رو متوجه بشیم وارد میکنیم (آدرس میتونه محلی یا آنلاین یا هر جور دیگه ای باشه ولی باید قابل دسترسی باشه فایل)و جواب ممکنه توی نگاه اول یکم ترس آور باشه، اما باید اون قسمتایی که برای ما اهمیت داره رو در نظر بگیریم. اینجا برای مثال، توی عکس بالا که خروجی دستورمونه، فلشای قرمز استریم هامون، و فلش سبز طول کل فیلم رو نشون میده. یعنی مدتِ این فیلم، 00:09:56.47 (یا همون حدود ده دقیقه) هست. همونطور که میبینیم اطلاعات دیگه ای مثل بیت ریت، کدک یا فرمت رو هم میتونیم متوجه بشیم.یه نکته اینکه ffprobe و ffmpeg، هر تیکه از محتوای شما رو اصطلاحاً به عنوان stream میشناسن. یعنی توی این مثالی که زدیم، محتوای ما یک استریم ویدیو از نوع h264 داره و یه استریم صدا از نوع aac.مفهوم کاملترش این میشه که یه محتوا، میتونه هر تعداد استریم که میخواد داشته باشه. مثلا میتونید یه فیلم داشته باشید، و روی اون هر تعداد استریم صوت (مثلا دوبله های مختلف یا زبونای متفاوت) و هر تعداد استریم زیرنویس که میخواین رو بهش اضافه کنید.بیاین یه مثال دیگه ببینیم، با اجرای دستور زیر بریم سراغ یه فیلم دیگه:این مثالی که میبینیم، یه استریم ویدئو (رنگ بنفش)، دو تا استریم صوت یا همون صدای دوبله (رنگ آبی)، و 8 تا استریم از نوع زیرنویس برای زبان های مختلف (رنگ سبز) داره.دستور FFmpegتوی قسمت قبلی تونستیم جزئیات کامل یه فیلم رو به کمک دستور ffprobe ببینیم. حالا وقتشه که بریم یکم با ffmpeg دست و پنجه نرم کنیم.تبدیل فرمتاوه با چه مثال سختی هم شروع کردیم. دستور زیر رو ببینین:ffmpeg -i video.mp4 video.mkvعکس زیر رو میتونین نگاه نکنین ولی قسمتی از خروجیه:و تمام! به همین راحتی فیلم video.mp4 رو تبدیل کردیم به video.mkv. یعنی بدون زحمت خاصی فقط گفتیم ffmpeg جان، عزیزم، بیان این محتوای mp4 من رو تبدیل که به mkv! و میتونیم اغلبِ فرمتای رایج رو استفاده کنیم، مثلا برعکس این مثالمون (تبدیل mkv به mp4).کلن وقتی میخوایم از ffmpeg اسفاده کنیم، با نوشتن i- به ffmpeg میگیم که یه ورودی داریم، مثلا توی دستور زیر:ffmpeg -i video.mkv videoNew.mp4بعد از i- اسم فیلم ورودیمون (یعنی video.mkv) رو دادیم، و در آخر هم خروجی مد نظرمون (اینجا videoNew.mp4) رو وارد کردیم.توی این دو تا مثال (تبدیل نوع فیلم)، ffmepg از تنظیمات پیشفرض خودش استفاده کرده، اما ما میتونیم تنظیمات مد نظر خودمون رو از بین دریایی از دستورات و کامندهایی که ffmpeg در اختیارمون میذاره انتخاب و استفاده کنیم.تقطیع و برشتقطیع و برش میتونه هم برای ویدئو، هم برای صوت و هم برای زیرنویس استفاده بشه. بیاین یه مثال در مورد تقطیع و برش یه فیلم رو ببینیم:ffmpeg -i input.mp4 -ss 00:00:10 -t 25 output.mp4این دستور میگه ffmpeg یه ورودی داره به اسم input.mp4. مقداری که بعد از ss- میاد نشون میده که میخوایم تقطیعمون از چه زمانی از فیلم شروع بشه، و با عددی که بعد از t- نوشتیم گفتیم به مدت چند ثانیه برو جلوتر (ss- و t- میتونن قبل از i- هم قرار بگیرن که به عملیاتمون سرعت بیشتری میدن)خلاصه عملکرد دستور بالا: از ثانیه 10 به مدت 25 ثانیه (یعنی از ثانیه 10 تا 35) فیلم رو برش بده و با اسم output.mp4 ذخیره کن. (به این نکته هم توجه کنین که ffmpeg میتونه to- رو هم بگیره بجای t-، با این تفاوت که to- میگه دقیقاً تا کجای محتوا مد نظرمونه. برای مثال اینجا میتونستیم بنویسیم -ss 00:00:10 -to 00:00:35)جا داره به دو تا نکته هم توجه کنیم. یکی اینکه ss- و t- میتونن به تنهایی هم بکار برن (ss- به تنهایی یعنی از زمانی که جلوش اومده شروع بشه، و t- به تنهایی یعنی به مدتی که جلوش اومده عملیات تبدیل انجام بشه)، و نکته ی مهمتر دیگه اینه که یه کامند ffmpeg میتونه تعدادی ورودی و تعدادی خروجی داشته باشه. مثلا با دستور زیر:ffmpeg -i input.mp4 -t 00:00:30 output1.mp4 -ss 00:00:20 output2.mp4شاید اگه بصورت زیر ببینیمش بهتر متوجه بشیم (صرفاً برای وضوح بیشتر):ffmpeg -i input.mp4 -t 00:00:30 output1.avi -ss 00:01:20 output2.mkv -ss 00:00:50 -t 20 output3.mp4ورودی input.mp4 رو بگیر، سه تا برش ازش بهم بده، اول بیا 00:00:30 از اول محتوا (30 ثانیه اول فیلم) رو با اسم و فرمت output1.avi، بعدش بیا از زمان 00:01:20 تا آخر فیلم (از یک دقیقه و بیست ثانیه تا آخر فیلم) رو با اسم و فرمت output2.mkv، و در نهایت هم از 00:00:50 به مدت 20 ثانیه (از ثانیه 50 تا 1 دقیقه و ده ثانیه که در مجموع میشه 20 ثانیه فیلم) رو با اسم و فرمت output3.mp4 ذخیره کن.جداسازی استریماگه بخوایم یکی از استریم های مثلا صدا رو از یه فیلم رو بیرون بکشیم، میتونیم بسته به ورژنمون از دستورات مختلفی استفاده کنیم، مثال زیر رو ببینید:ffmpeg -i video.mp4 -vn -ab 256 audio.mp3یا این یکی:ffmpeg -i video.mp4 -c:a aac audio.aacدستور اولی به کمک vn- میگه که استریم video رو نمیخوام، به کمک دستور ab- فرمت خروجی میتونه mp3 باشه با کیفیت ۲۵۶Kbps که جلوش نوشتیم.دستور دوم رو یکم با دقت بیشتری ببینیم. جایی که نوشتیم -c:a قسمت مهمش a: هست که میگه من از محتوام، استریم صوتش رو میخوام، و میخوام که خروجیم از نوع aac باشه و بریزش توی فایل audio.aac.بصورت کلی وقتی مینویسیم -c:s یعنی زیرنویس، وقتی مینویسیم -c:v یعنی ویدئو، و وقتی مینویسیم -c:a یعنی صوت.حالا یه سوال، اگه بخوایم صدای دوم از فیلم رو بیرون بکشم باید چیکار کرد؟ دستور زیر این کارو میکنه:ffmpeg -i video.mp4 -c:a:1 aac audio2.aacبه این تیکه دقت کنید:-c:a:1بصورت کلی وقتی مینویسیم:-c:a:nیعنی از محتوای من، برو سراغ audio ها یا همو صدا ها (چون وسطش a گذاشتیم، اگه v میذاشتیم میشد ویدئوها و اگه s میذاشتیم میشد زیرنویس ها) و زیر نویس n-1 ام رو در نظر بگیر. چرا n-1 ؟ بخاطر اینکه شماره استریم ها از 0 شروع میشه. یعنی از نظر ffmpeg اگه یه محتوایی 3 تا صوت داره، صوت اولش میشه 0 اُمین استریم صدا، صوت دومش میشه 1 اُمین استریم صدا، و صوت سومش میشه دومین استریم صدا.فقط دقت کنیم که اگه محتوایی n استریم زیرنویس داشته باشه، و ما عددی مساوی یا بیشتر از n رو بصورت زیر انتخاب کنیم:-c:s:nبا خطا مواجه میشیم که طبیعی هم هست، چون محتوا گفتیم که محتوامون n تا زیر نویس داره و همونطور که متوجه شدیم ffmpeg اونارو از 0 تا n-1 میشناسه.به عنوان آخرین مثال از بیرون کشیدن استریم هم میتونیم بصورت زیر زیرنویس دوم یه فیلم رو بیرون بکشیم:ffmpeg -i input.mp4 -map 0:s:1 subs.vttاینجا دستور -map رو میبینیم که حتما پیشنهاد میکنم در موردش بیشتر بخونید، اما خلاصه کل دستور بالا اینه که ورودی inpu.mp4 رو بگیر، از ورودی اول (عدد صفر جلوی map) که در حقیقت همون تنها ورودیمونه که input.mp4 هست، برو سراغ زیرنویساش و زیرنویس 1 یعنی دومین زیرنویس رو بریز توی فایل sub.vtt.چند ورودیپاراگراف آخر قسمت قبل اگه یکم گیجتون کرده اشکالی نداره، فعلا فقط در همین بدونیم که اگه به جایی لازم شد چند تا ورودی بدیم به ffmpeg، میتونیم بصورت زیر عمل کنیم:ffmpeg -i input1.mp4 -i input2.mp4 ...دستور بالا میگه که دو تا ورودی داریم، اولی input1.mp4 و دومی input2.mp4. حالا هر زمانی که بخوایم جلوی این دستور با محتوای ورودی اولمون کار داشته باشیم از-map 0و هر جایی که با محتوای ورودی دوممون کار داشته باشیم از-map 1استفاده میکنیم.و اگه جلوی عدد و بعد از یه دو نقطه (:) یکی از کاراکترای v یا s یا a رو بذاریم به مفهوم اینه که با استریمای ویدئو، یا زیرنویس یا صداهای فیلم کار داریم.-map 0:v -map 0:s -map 0:aو شبیه مثالی که یذره بالاتر دیدیم، اگه یه "دو نقطه" دیگه بذاریم و یه عدد بنویسیم، یعنی اینکه با کدوم استریم کار داریم. دستور زیر یعنی من صوت دوم (عدد 1 چون از 0 شروع میشه) از ورودی سوم (عدد 2 چون از 0 شروع میشه) رو میخوام:-map 2:a:1اگه یذره گیج کنند طبیعیه ولی با خوندن و تمرین بهتر متوجه میشین.کاربرد هم خیلی زیاد داره، مثلا دو تا ورودی بدین، اول فیلم باشه دومی صدا، بعد میتونین به ffmpeg بگین صدای جدید رو جایگزین صدای فیلمه بکن یا به عنوان صدای جدید بهش اضافه کن. یا اینکه توی موارد حرفه ای تر، مثلا دو تا فیلم و یه عکس به عنوان ورودی بدیم، یکی از ویدیوها رو کوچیکتر گوشه ویدیوی دوم بندازین و عکس رو هم مثلا به عنوان لوگو بندازین گوشه تصویر. کلن با اینکه یذره پیچیده شاید باشه کارای اونجوری، ولی ffmpeg اجازه میده هرجور خواستین قیمه ها رو بریزین توی ماستا.افزودن استریمتوی قسمت جداسازی استریم متوجه شدیم چجوری یه استریم (مثلا یه صدا یا یه زیرنویس) از یه فیلم رو بیرون بکشیم. حالا قراره یه کاری که یذره کاربردی تره رو انجام بدیم. اضافه کردن یه استریم به یه محتوا.مثلا اگه شما هم مثل من گاهی اوقات با فایل های زیرنویسی که کنار فیلمه مشکل دارین، بصورت زیر میتونین یه زیرنویس جدید به فیلم بچسبونین:ffmpeg -i movie.mp4 -i subtitle.srt -map 0 -map 1 output.mkvدستور بالا به ffmpeg میگه دو تا ورودی داری (movie.mp4 و subtitle.srt). به کمک-map 0میگیم ورودی اول رو در نظر بگیر، و با دستور-map 1میگیم ورودی دوم رو هم در نظر بگیر. ور نهایت اینارو ترکیب کن و بریز توی output.mkv.به عنوان یه مثال دیگه برای اضافه کردن صدای جدید به یه فیلم (و برای اینکه بدون استفاده از map هم ببینیم چجوری میشه استریم به محتوا اضافه کرد) کامند زیر رو ببینیم:ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac output.mp4دو تا ورودی داریم (video.mp4 و audio.mp3). با دستوری زیر:-c:v copy(همونطور که توی مثالای اول همین مقاله هم متوجه شدیم) میگیم که برو سراغ استریم ویدئو و به کمک کلمه ی copy میگیم فرمتش از هر نوع هست همون رو در نظر بگیر، و با دستور:-c:a aacمیگیم برو سراغ استریم صوت و نوعش رو aac در نظر بگیر.و در نهایت نتیجه (که در حقیقت میشه ترکیب ویدئو و صدا یا همون اضافه کردن صوت یا دوبله جدید به فیلم) رو بریز توی output.mp4.حذف استریمبه هر دلیلی هم اگه خواستیم استریمی رو از یه محتوا حذف کنیم میتونیم بصورت زیر عمل کنیم، مثلا برای اینکه یه فیلم رو mute یا بی صدا بکنیم (فقط تصویر داشته باشه بدون هیچ صدایی):ffmpeg -i input.mp4 -map 0:v -c copy output.mp4به کمک قطعه دستور زیر-map 0:vمیگیم که از استریم اولمون که همون input.mp4 هست بیا قسمت ویدیئوش رو انتخاب کن، و به کمک-c copyکه البته اختیاری هم هست یجورایی، میتونیم بگیم فرمت خروجی مثل فرمت ورودی باشه.جنگولگ بازیخب تا اینجا با تبدیل فرمت و چند تا ورودی و چندتا خروجی و افزودن و حذف و بیرون کشیدن استریم آشنا شدیم. ffmpeg دستور و تنظیمات بشدت زیاد داره، مثلا میشه باهاش استریم rtmp فرستاده، یا بصورت لایو محتوای یه شبکه تلویزیونی رو گرفت و همزمان هم لوگو بهش چسبوند هم به چند نرخ بیت و کیفیت مختلف ذخیرش کرد. اگه بخوایم جنگولک بازی در بیاریم میشه تا ابد مثالال مختلفی اورد، ولی چون سطح این مقاله از اول هم قرار نبود خیلی حرفه ای باشه، صرفا چنتا مثال ساده رو ببینیم:تغییر ابعاد فیلمffmpeg -i input.mp4 -s 640x480 -c:a copy output.mp4چرخاندن فیلمنود درجه در جهت عقربه های ساعت:ffmpeg -i input.mp4 -filter:v 'transpose=1' rotated-video.mp4اگه transpose=1 رو بکنیم transpose=2 میشه 90 درجه خلاف عقربه های ساعت.تغییر کیفیت و فشرده سازی فیلمffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4قسمت -crf 24 هرچی عدد 24 کوچیکتر باشه فشرده سازی کمتری داریم، 0 یعنی هیچ فشرده سازی ای نداشته باشیم. عملا فشرده سازی بالاتر یعنی کیفیت کمتر و برعکس.قسمت preset هم یجورایی سرعت کاری که میکنیم رو مشخص میکنه، میتونه موارد ultrafast، superfast، veryfast، faster، fast، medium، slow, slower، veryslow رو شامل بشه، و همونطور که مشخصه از سرعت superfast یا بشدت زیاد تا veryslow یا بشدت کم، رو در بر میگیره که سرعت هرچی بالاتر بره کیفیت خروجی کمتر میشه و برعکس (ffmpeg بصورت پیشفرض مقدار medium رو در نظر میگیره)تبدیل فیلم به آلبوم عکسffmpeg -i input.mp4 -r 1 -f image2 image-%3d.pngقسمت r- میگه که هر چند فریم عکس بگیره، اینجا ما گفتیم هر 1 فریم، اگه نگیم بصورت پیشفرض هر 25 فریم رو در نظر میگره. قسمت f- فرمت رو مشخص میکنه که ما گفتیم عکسه خروجیمون، و در نهایت خروجیمون که به شکل image-%3d.png هست نشون میده که ما میخوایم اسامی عکس های خروجیمون بصورت image-001.png و image-002.png و همینطور شمارنده به بالا باشه. عدد %3 میگه سه رقم در نظر بگیر. اگه بگیم image%4d.png میشه image0001.png و image0002.png و image0003.png و ...کراپ کردن فیلمffmpeg -i input.mp4 -filter:v &quotcrop=640:480:200:150&quot output.mp4از نقطه ی طول 200 و ارتفاع 150 به اندازه ی یه مربع به طول 640 و ارتفاع 480 رو در نظر بگیر و اون قسمت از ویدئو رو توی کل محتوا کراپ کن و بری توی output.mp4.پوستر آهنگffmpeg -stream_loop 1 -i inputimage.jpg -i inputaudio.mp3 -c:v libx264 -c:a aac -b:a 192k -shortest output.mp4کامند بالا inputimage.jpg رو به عنوان ورودی اول و inputaudio.mp3 رو به عنوان ورودی دوم میگیره-c:v libx264میگه که میخوام خروجی ویدئو از نوع h264 داشته باشم-c:a aacمیگه خروجیم صداش از نوع aac باشه (یعنی اگه با ffprobe خروجی رو تست کنیم یه استریم صدا از نوع aac داره)-b:aمیگه بیت ریت صدامون 192k باشه-shortestمیگه که خروجیمون تا اندازه ای بره که کوچیکترین ورودیمون تایمش تموم شده. این مثلا جایی کاربرد داره که از یه فیلم تیتراژ پایانیش رو حذف کردین ولی صوتی که دارین تیتراژ رو هم داره، طول خروجی میشه به اندازه ی کوتاه ترین ورود که توی این مثال میشه فیلم بدون تیتراژ (یعنی تیکه آخر تیتراژ از صدای ورودی، توی خروجی نمیاد دیگه)-stream_loopیا توی بعضی ورژنا loop هم میگه که میخوایم ورودیمون چندبار تکرار بشه توی خروجی. بیشتر جاهایی کاربرد داره که میخوایم چند بار به هر دلیلی ورودیمون رو تکرار کنیم، مثلا یه شبکه تلویزیونی خصوصی دارین یا یه استریمر رادیو که توش آهنگ دارین و کنداکتور یا همون برنامه زمانیتون 24 ساعت نشده، میتونین بندازین توی یه لوپ (مثلا برنامه ها 12 ساعت باشن و با لوپ 2 دو بار تکرار بشه و 24 ساعت رو پر کنه)چسباندن چند محتوافرض کنین میخواین چند تا آهنگ رو پشت سر هم بچسبونین یا چند تا کلیپ فیلم رو. بصورت زیر میشه:ffmpeg -i &quotconcat:audio1.mp3|audio2.mp3|audio3.mp3|audio4.mp3&quot -c copy output.mp3اگه میخواین بیشتر متوجه بشین در مورد concat بخونین، ولی خلاصش اینه که جلوی concat چهارتا فایل معرفی کردیم و اینارو میچسبونه پشت سر همدیگه داخل یه فایل به اسم output.mp3.یه راه دیگه هم برای استفاده از concat هست اونم اینکه مثلا یه فایل داشته باشیم به اسم videos.txt که داخلش لیست فیلمایی که قراره پشت سر هم چسبونده بشه رو گذاشتیم:file /home/sk/myvideos/part1.mp4 file /home/sk/myvideos/part2.mp4 file /home/sk/myvideos/part3.mp4و میشه به کمک دستور زیر این فیلم ها رو به هم چسبوند و تازه یه زیرنویس هم بهشون اضافه کرد و ریخت توی output.mp4:ffmpeg -f concat -safe 0 -i join.txt -c copy output.mp4قسمتی که پشت ورودی زیرنویس اومده یعنی-safe 0نباشه هم نباید مشکلی باشه ولی ممکنه به خطاهایی مثل Unsafe file name و Operation not permitted بر بخورید!تغییر سرعتffmpeg -i input.mp4 -vf &quotsetpts=0.5*PTS&quot output.mp4 ffmpeg -i input.mp4 -vf &quotsetpts=5.0*PTS&quot output.mp4کامند اول فیلم سرعت فیلم رو دو برابر و کامند دوم سرعت رو یک پنجم میکنه. طبیعتا میشه با عوض کردن عدد قبل از PTS سرعت رو متناسب با نیاز تغییر داد (عدد بزرگتر یعنی سرعت کمتر و برعکس)برای صدا هم میشه بصورت زیر عمل کرد:ffmpeg -i input.mp4 -filter:a &quotatempo=2.0&quot -vn output.mp4 برای atempo بازه بین 0.5 تا 2 حق انتخاب وجود دارهافزودن عکس یا لوگو به فیلمffmpeg -i input.mp4 -i logo.png -filter_complex &quotoverlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2&quot -codec:a copy output.mp4دستور بالا میاد عکس logo.png رو میندازه وسط فیلم. بصورت زیر میشه لوگو رو انداخت گوشه بالا سمت چپ و به اندازه ی 10 در 10 پیکسل:overlay=10:10یا مثلا پایین سمت راست با 5 پیکسل فاصله:overlay=main_w-overlay_w-5:main_h-overlay_h-5یا پایین سمت چپ یا 8 پیکسل فاصله:overlay=8:main_h-overlay_hمقاله زیر هم اضافه شده که برای تغییر اندازه و کار با عکسها میتونید ببینیدش: https://virgool.io/@mohammad.ghodsian/ffmpeg-image-resizing-efmxeowq25xr خب توی این مقاله تا حدود قابل قبولی با ffmpeg و کاربرداش آشنا شدین. طبیعتاً متوجه شدین که ffmpeg قابلیت خیلی زیاد داره و خودش دنیاییه برای خودش، و قطعاً توصیه اینه که حسابی باهاش دست و پنجه نرم کنید. از طرفی هم دقت کنید که بجای اینکه بیشتر دنبال پیدا کردن یه کامند خاص برای یه کار خاص باشین، سعی کنین مفهوم و ساختارش رو درک کنید تا بتونید تغییراتی که لازم دارید رو خودتون اعمال کنین. و آخرین مطلب این که ffmpeg خیلی کامند داره، میتونه حتی خودش یه استریم خالی بفرسته، یا مثلا رنگایی که توی شبکه های خالی میبینید و سوت میکشه رو میتونه خودش ایجاد کنه، همچنین میتونه با توی ایجاد و ویرایش لحظه ای انواع استریمای مختلف هم کمکتون بکنه. بد نیست نگاهی به سایت خودش بندازید و یه چرخی توی داکیومنتاش بزنید. ffmpeg این قابلیت رو داره که توی یه دستور، یعالمه پارامترا و تسکای مختلف براش تعریف بشه. مخصوصاً توی مواردی مثل ترنسکد کردن (حتی توی استریمای آنلاین و زنده، یا شبکه های خصوصی از پیش تعریف شده، و توی کار با انواع vod و aod و nVod و nAod و محتواهای تعاملی و ... هم قابلیتای خوبی رو در اختیارتون میذاره)یه نکته دیگه: ffmpeg علاوه بر اینکه هم فایلای لوکال یا محلی و روی سیستمتون رو پوشش میده، لینک های http رو هم اگه بهشون دسترسی داشته باشه میتونه عملیات روشون انجام بده، پس عملا میشه به عنوان یه دانلودر (و همزمان تغییر و اعمال رفتاری که خودتون انتظار دارین) هم ازش استفاده کرد!منتشر شده در ویرگول توسط محمد قدسیان https://virgool.io/@mohammad.ghodsianhttps://virgool.io/@mohammad.ghodsian/alice-in-ffmpeg-land-yinzbylr12bf