دستور ffmpeg برای تبدیل به mp4

نوشته حسین بهنودی در ۲۹ شهریور ۱۳۹۸

ساختار دستور ffmpeg برای تبدیل به mp4 به صورت زیر است.

ffmpeg -i input.avi output.mp4

که در آن فایل ورودی input.avi است. البته بجای آن هر فایل ویدیویی با هر فرمتی را می‌توانید قرار دهید.

و فایل خروجی output.mp4 است. برنامه از روی پسوند نام فایل تشخیص می‌دهد تبدیل به چه صورت باید انجام گیرد.

در دستور فوق تبدیل با پیش فرض‌های برنامه انجام می‌گیرد. اگر بخواهید آنها را تغییر دهید باید قبل از نام فایل خروجی output.mp4 گزینه‌های مورد نظرتان را مشخص کنید.

ویدیو

H.264 متداول‌ترین روش فشرده‌سازی در فایل‌های mp4 است و مهم‌ترین مزیتش این است که همه دستگاه‌ها می‌توانند آن را پخش کنند.

آپشن c:v را برای تعیین نوع فشرده سازی ویدیو استفاده کنید. و در مقابلش برای تعیین H.264 عبارت libx264 را بنویسید:

ffmpeg -i input.avi -c:v libx264 output.mp4

در این صورت توابع H.264 با پیش فرض‌های خود، کار می‌کند برای گرفتن نتیجه دلخواه تان می توانید پارامتر های آن را تغییر دهید.

دو روش برای این کار وجود دارد.

روش اول: تعیین کیفیت

هنگامی از این روش استفاده می‌شود که اولویت شما کیفیت است نه حجم نهایی فایل

آپشن crf کیفیت تبدیل را مشخص می کند و که یک عدد بین صفر تا ۵۱ می‌تواند باشد که صفر بالاترین کیفیت را نتیجه می‌دهد و به طبع حجم فایل بزرگ می‌شود و ۵۱ کوچکترین و کم کیفیت ترین نتیجه را می‌دهد.

البته در عمل همیشه از اعدادی بین ۱۸ تا ۲۸ استفاده می‌شود. چون اعداد کمتر از ۱۸ تغییر محسوسی در کیفیت ندارد و اعداد بالاتر از ۲۸ تغییر زیادی در حجم فایل ایجاد نمی‌کند. (مقدار پیش فرض ۲۳ است.)

ffmpeg -i input.avi -c:v libx264 -crf 22 output.mp4

آپشن preset سرعت فشرده سازی را مشخص می‌کند. هرچه سرعت را کم کنید فشرده سازی بهتر انجام می‌گیرد و حجم فایل نهایی کمتر می‌شود. (مقدار پیش فرض medium است.)

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium
  • slow
  • slower
  • veryslow
  • placebo
ffmpeg -i input.avi -c:v libx264 -crf 22 -preset slow output.mp4

روش دوم: تعیین حجم

هنگامی از این روش استفاده می‌شود که بخواهید حجم فایل از مقدار خاصی بالاتر نرود.

آپشن b:v نرخ بیت (Bit Rate) حجم یک ثانیه ویدیو را به واحد بیت نشان می‌دهد. معمولا Bit Rate را با بیت بر ثانیه (bps)، کیلوبیت بر ثانیه (Kbps) یا مگابیت بر ثانیه (Mbps) اندازه می‌گیرند.

به طور مثال مقدار آنرا 500K یا 6M یا … تعیین می‌کنند. مقدار آن بستگی به رزولوشن (Resolution) ویدیو و تعداد فریم بر ثانیه (Frame Rate) آن دارد هرچه عدد بزرگتری انتخاب کنید کیفیت بالاتری بدست می‌آورید ولی حجم فایل نهاییتان زیادتر می‌شود.

ffmpeg -i input.avi -c:v libx264 -b:v 1M output.mp4

سازگاری با پخش کنندگان قدیمی:

آپشن profile:v تعیین می‌کند برنامه فشرده ساز libx264 از امکانات پیشرفته برای فشرده سازی استفاده بکند یا خیر. طبعا هرچه از این امکانات استفاده شود فایل کوچکتر می‌شود ولی دستگاه های قدیمی امکان پخش آن ها را نخواهند داشت.

Profile Level Options
Baseline 3.0 -profile:v baseline -level 3.0
Baseline 3.1 -profile:v baseline -level 3.1
Main 3.1 -profile:v main -level 3.1
Main 4.0 -profile:v main -level 4.0
High 4.0 -profile:v high -level 4.0
High 4.1 -profile:v high -level 4.1
High 4.2 -profile:v high -level 4.2

برای اینکه اکثر دستگاه های موجود در بازار فایل شما را بتواند پخش کند و حجم نیز کم باشد از دستور زیر استفاده کنید:

ffmpeg -i input.avi -codec:v libx264 -profile:v high -level 4.0 output.mp4

صدا

بهترین روش فشرده سازی صدا برای فایل‌های mp4 روش aac است که تقریبا همه دستگاه‌ها آنرا براحتی پخش می‌کنند.

آپشن c:a نوع فشرده سازی صدا را تعیین می‌کند و برای فشرده سازی aac  آن را قبل از نام فایل خروجی اضافه کنید:

ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4

صدا می‌تواند دارای یک یا چند کانال باشد (منو یک کانال دارد و استریو دو کانال و صدای محیطی ۶ کانال یا بیشتر) تعداد کانال‌های بیشتر از ۲ حجم فایل را زیاد می‌کند و برخی از دستگاه‌ها نیز قابلیت پخش آن‌ها را ندارند.

آپشن ac تعداد کانال صدا را مشخص می‌کند.

ffmpeg -i input.avi -c:v libx264 -c:a aac -ac 2 output.mp4

آپشن b:a نرخ بیت (Bit Rate) حجم یک ثانیه صدا را به واحد بیت نشان می‌دهد. معمولا Bit Rate را با بیت بر ثانیه (bps)، کیلوبیت بر ثانیه (Kbps) یا مگابیت بر ثانیه (Mbps) اندازه می‌گیرند.

معمولا اعدادی بین 64k تا 512k قرار می‌دهند هرچه این عدد کمتر شود حجم فایل کاهش می یابد و ممکن است کیفیت فایل هم کمی کمتر شود. مقداری که اغلب استفاده می‌شود و روی کیفیت صدا تاثیر چندانی نمی‌گذارد، 128k است.

ffmpeg -i input.avi -c:v libx264 -c:a aac -ac 2 -b:a 128k output.mp4

اگر بخواهید همه آپشن های فوق را در یک دستور بیاورید:

ffmpeg -i input.avi -c:v libx264 -crf 22 -preset slow -profile:v high -level 4.0 -c:a aac -ac 2 -b:a 128k output.mp4