چند کار کاربردی با ffmpeg

امین 11 سپتامبر 2023 زمان خواندن: 2 دقیقه

همون طور که می‌دونید ffmpeg یکی از کتابخانه های پر استفاده در مدیریت و پخش فایلهای تصویری و صوتی است. ابزارهای گرافیکی مختلفی برای کار با ffmpeg درست شدن، ولی کار با خط فرمان یک چیز دیگه است! 

در این مطلب میخوام چند تا از کارهایی که من با ffmpeg لازم داشتم انجام بدم رو بنویسم. 

جدا کردن یک تکه از ویدیو - بدون re-encode 

ffmpeg  -i input.mp4  -vcodec copy -acodec copy -ss 00:00:10 -to 00:09:05  output.mp4

دستور بالا میگه از ثانیه ۱۰ تا دقیقه ۰۹ و ثانیه ۰۵ کات کن و در یک فایل ذخیره کن. این کار رو هم بدون re-encode کردن ویدیو انجام بده. اگه ویدیوی شما حاوی keyframe باشه (یعنی فریم هایی که موقع ساخت ویدیو بعنوان نقطه عطف تعیین شدن! نمیدونم چطوری توضیح بدم!) موقع کات کردن بدون re-encode زمانی رو که شما تعیین کردید برش انجام بشه رعایت نمیشه و برش از نزدیک ترین keyframe اتفاق می افته. بنابراین دقیق نخواهد بود. ولی اگر ویدیو شما keyframe نداشته باشه، این مشکل پیش نمیاد. 

جدا کردن یک تکه از ویدیو - با re-encode

ffmpeg  -i input.mp4  -ss 00:00:10 -to 00:09:05  -async 1 output.mp4

دستور بالا هم برای کات کردن ویدیو هست. ولی با re-encode. این بار اگه ویدیو keyframe داشته باشه، اول ویدیو رو یک باره دیگه تولید میکنه و keyframe ها رو حذف میکنه و بعد اون رو کات میکنه. این طولانی تر خواهد بود ولی زمان برش دقیقا همان چیزی خواهد بود که شما تعیین کردید. ولی اگر میخواید چند تکه از یک ویدیوی حاوی keyframe رو کات کنید، نیاز نیست هربار re-encode کنید. با دستور زیر یک بار ویدیوی بدون keyframe تحویل بگیرید و عملیات برش رو روی این ویدیو با دستور اولی انجام بدید تا سریع برش ها انجام بشن:

ffmpeg  -i input.mp4  -async 1 output.mp4

چرخوندن ویدیو

اگه ویدیویی دارید که با زاویه نادرست گرفته شده، میتونید اون رو با این دستور بچرخونید! من هر چی گشتم راهی پیدا نکردم که این کار رو بدون re-encode انجام بده. دستور زیر ویدیو رو یک بار re-encode میکنه و میچرخونه

ffmpeg  -i input.mp4 -vf "transpose=1" -c:v libx264 -preset slow -crf 22 -c:a copy output.mp4

مقداری که برای transpose میدیم مشخص میکنه ویدیو به چه زاویه ای بچرخه:

  • 0: ۹۰ درجه به چپ و flip عمودی
  • 1: ۹۰ درجه به راست
  • 2: ۹۰ درچه به چپ
  • 3: ۹۰ درجه به راست و flip عمودی
  • برای چرخش ۱۸۰ درجه از این استفاده کنید: -vf "transpose=2,transpose=2"

کراپ کردن ویدیو

فرض کنید میخوایم یک ویدیو رو کراپ کنیم. اول تست کنیم ببینیم اندازه ای که میخوایم چیه و چجوری قراره در بیاد. برای اینکه اندازه های ویدیو دستتون بیاد، اول با دستور زیر اندازه های ویدیوی مورد نظر رو پیدا کنید:

ffprobe -v error -select_streams v -show_entries stream=width,height -of csv=p=0:s=x input.mp4

مثلا میگه 1200x800 و ما میخوایم مقداری از این ویدیو رو کراپ کنیم! منتها اول باید مطمئن بشیم که از جای درست داریم کراپ میکنیم. دستور زیر قبل از اینکه فایل خروجی رو ذخیره کنه، پیش نمایش کراپ شده رو نشون میده. بنابراین میتونیم با تغییر اندازه ها، محل مورد نظرمون رو پیدا کنیم:

ffplay -i input.mp4 -vf "crop=480:400:0:0"

معنی دستور بالا یعنی به پهنای ۴۸۰ و ارتفاع ۴۰۰ از گوشه چپ ویدیو به پهنای 0 و ارتفاع 0 تصویر رو کراپ کن. با بازی با این عددها دستتون میاد که کجای ویدیو رو چجوری پیدا کنید! راستش راه راحت تری پیدا نکردم!

حالا با دستور زیر وقتی اندازه مورد نظرمون رو پیدا کردیم، ویدیوی کراپ شده رو ذخیره میکنیم:

ffmpeg -i input.mp4 -vf "crop=480:400:0:0" -c:v libx264 -crf 22 -c:a copy output.mp4

البته با re-encode کردن با libx264 که شما میتونید هر جوری که دلتون میخواد ویدیو رو انکود کنید. در این زمینه به مستندات ffmpeg مراجعه کنید...

اضافه کردن واترمارک به ویدیو

با استفاده از دستور زیر، یک واترمارک (تصویر) به محل دلخواهی از ویدیو اضافه میشه. در این مثال در گوشه چپ و بالای تصویر

ffmpeg -i video.mp4  -i  image.png -filter_complex "overlay=15:10" -preset veryfast output.mp4

حذف صدا از ویدیو

دستور زیر صدا رو از ویدیو بر میداره و یک فایل ویدیویی بدون صدا تحویل میده

ffmpeg -i input.mp4 -c copy -an output.mp4

اضافه کردن زیرنویس به ویدیو

اگه بخواید یک فایل زیرنویس رو به ویدیو اضافه کنید، طوری که بشه از توی پخش‌کننده انتخاب کرد که زیرنویس نشون داده بشه یا نه:

ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s mov_text output.mp4

و اگر بخواید زیرنویس رو روی فیلم بچسبونید یا اصطلاحلا burn کنید تا همیشه نشون داده بشه و حق انتخاب برای عدم نمایش نداشته باشه:

ffmpeg -i input.mp4 -vf subtitles=subtitles.srt output.mp4

اولین نفری باشید که دیدگاهی ارسال می کند!




حاصل سر و کله زدن های من با لینوکس