منبع اصلی نوشتار زیر در این لینک قرار دارد

آشنایی با ffmpeg

در این مطلب سعی داریم تا شما را با ابزار ffmpeg آشنا کنیم. این ابزار، برای کار با «رسانه» های مختلف ساخته شده است و می‌تواند اکثر نیازهای شما را برطرف کند. ما سعی داریم به صورت ساده برخی از قابلیت‌های پرکاربرد این ابزار قوی را برایتان شرح دهیم. در حقیقت این ابزار، اگر نگوییم قوی‌ترین، یکی از قوی‌ترین ابزارهای آزاد برای این کار به شمار می‌آید. اگر نیاز به خواندن توضیحات ندارید و فقط دنبال کاربرد خاصی هستید، می‌توانید همین حالا بخش کاربردهای ساده و معمول ffmpeg را ببینید.

۱. نصب ffmpeg

برای نصب این برنامه، بهتر است که از ابزار مدیر بسته‌ی توزیع خود استفاده کنید. برای توزیع‌های مشهور، دستوراتی اینچنین مورد نیاز است:

Ubuntu ( and related distributions)

apt-get install ffmpeg

Fedora

yum install ffmpeg

openSUSE

zypper install ffmpeg

Arch Linux

pacman -S ffmpeg

۲. فرمت کلی کار با ffmpeg

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

ffmpeg [global options] [options] -i input [options] output

در این دستور input نام ورودی و output نام خروجی است. در این مطلب همیشه input ورودی و output خروجی را مشخص می‌کند. لازم به ذکر است که فرمت و کدک فایل ورودی به صورت خودکار تشخیص داده می‌شود و همچنین فرمت و کدک فایل خروجی نیز، بر اساس پسوند فایل، به صورت خودکار مشخص می‌شود. اگرچه هرکدام از این موارد نیز قابل تعیین شدن توسط کاربر هستند. علاوه بر این شما می‌توانید در بخش options، با گزینه‌های بسیار بیشتری، روی عملیات تبدیل کنترل داشته باشید. و همچنین توجه کنید که دو بخش [options] وجود دارد که یکی قبل از فایل ورودی و دیگری قبل از فایل خروجی آورده شده است. دستورات به کار رفته در این دو بخش مشابه‌اند و هر کدام به ترتیب به فایل ورودی و خروجی اعمال می‌شوند. اگرچه ما اکثر این تنظیمات را به فایل خروجی اعمال می‌کنیم ولی در مواردی خاص شاید نیاز باشد برای فایل ورودی نیز برخی گزینه‌ها را معین کنیم. از این موارد خاص می‌توان به تعیین اندازه‌ی ورودی برای عکس‌برداری با وب‌کم اشاره کرد.

بخش [global options] نیز تنظیمات کلی برنامه را تحت کنترل دارد. تمام گزینه‌های این بخش به صورت کامل در صفحات راهنمای ffmpeg موجود هستند. برای دیدن این صفحات از دستور man ffmpeg استفاده کنید. از این بخش می‌توان به گزینه‌هایی مانند -formats یا -codecs اشاره کرد.

همچنین راهنمای بسیار کامل این برنامه در این آدرس موجود است که در صورت نیاز می‌توانید به آن مراجعه کنید.

۳. کاربردهای ساده و معمول ‌ ffmpeg

در این بخش کاربردهای ساده و معمول ffmpeg را به صورت مختصر و بدون توضیح اضافه بیان می‌کنیم.

-تبدیل ویدئو به ویدئو یا صوت به صوت

ffmpeg -i input output

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

-جدا کردن صوت از فایل

ffmpeg -i input -nv output

اگر نیاز به گزینه‌های بیشتری برای صوت خروجی، مانند کیفیت و کدک، دارید بخشگزینه‌های صوت ffmpegرا ببینید.

البته در این دستور می‌توان -nv را حذف کرد و برنامه به صورت خودکار از روی پسوند فایل خروجی (فرمت صوتی مانند mp3) تصویر را حذف خواهد کرد. ولی برای اطمینان بیشتر این گزینه را اضافه کردیم.

-جداکردن تصویر از فایل

ffmpeg -i input -na output

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

بر خلاف دستور قبلی وجود -na ضروری است.
بریدن بخشی از ویدئو یا صوت

ffmpeg -i input -codec copy -ss start -t duration output

ورودی و خروجی در دستوز بالا مشخص هستند. بخش -codec copy به برنامه می‌گوید که از همان کدک‌های فایل ورودی استفاده کند، و در صورتی که این بخش را حذف کنید کدک‌های پیش‌فرض ffmpeg جایگزین خواهند شد و ممکن است با افت کیفیت و سرعت تبدیل روبه‌رو شوید. start زمان شروع برش را مشخص می‌کند. میتوانید آن‌را به ثانیه یا به فرمت H:M:S مشخص کنید که در آن به جای H ساعت، به جای M دقیقه و به جای S ثانیه را بنویسید. duration هم زمان برش را مشخص می‌کند و مانند  start تعیین می‌شود. مثلا

ffmpeg -i input.mp4 -codec copy -ss 10 -t 0:1:2 output.mp4

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

ffmpeg -f x11grab -r 25 -s size -i :0.0[+x,y] output

پرواضح است که output فایل خروجی را مشخص می‌کند. در بخش size اندازه‌ی نمایشگر خود را برای ضبط تمام صفحه وارد کنید. فرمت ورودی به شکل WxH است که به جای H و W به ترتیب مقادیر ارتفاع و پهنای نمایشگر را قرار دهید. اگر می‌خواهید ضبط به صورت تمام صفحه انجام نشود اندازه‌ی دلخواه را وارد کنید. در بخش دلخواه [+x,y] می‌توانید مشخص کنید که ضبط از مکان مشخصی روی صفحه‌ی نمایش‌گر انجام شود. مبدأ این مختصات قسمت پایین چپ نمایش‌گر شما است.
عکس:

ffmpeg -f x11grab -r 25 -s size -frames 1 -i :0.0[+x,y] output

به اضافه شدن گزینه‌ی -frames 1 دقت کنید. این گزینه به برنامه می‌گوید که فقط یک فریم از ورودی (صفحه نمایش) را ذخیره کند. گزینه‌های دیگر همانند فیلم برداری است.
فیلم‌برداری و عکس برداری با وب‌کم و دیگر دستگاه‌های ورودی
این کار هم با ffmpeg انجام پذیر است. دستور زیر از وب‌کم شما فیلم‌برداری کرده، ذخیره می‌کند.

ffmpeg -f video4linux2 -i /dev/video0 output

خیلی ساده هست. فقط فایل خروجی را بدهید تا برایتان ضبط کند! البته می‌توانید از گزینه‌های مختلفی برای ورودی و نیز خروجی استفاده کنید. مثلا اندازه‌ی خروجی را تعیین کنید یا حتی با استفاده از میکروفون در حین ضبط تصویر، ضبط صدا نیز انجام دهید. یافتن این‌ها را به شما واگذار می‌کنیم. برخی از این گزینه‌ها را در موارد قبل دیده‌اید و اگر مایل هستید گزینه‌های بیشتری را ببینید به صفحات راهنمای ffmpeg مراجعه کنید.
به /dev/video0 دقت کنید. این مسیر دستگاه شما در لینوکس است. اکثر وب‌کم‌ها از همین مسیر استفاده می‌کنند ولی اگر می‌دانید دستگاه‌تان مسیر دیگری دارد آن را جایگزین کنید.
همچنین به جای video4linux2 ، در صورتی که نتیجه نگرفتید، می‌توانید از video4linux استفاده کنید.
در صورت تمایل برای عکس‌برداری، مانند عکس‌برداری از صفحه‌نمایش، گزینه‌ی -frames 1 را اضافه کنید.

۴. گزینه‌های تصویر ffmpeg

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

اندازه‌ی تصویر را تعیین می‌کند.

برای مثال ۱۰۲۴×۷۶۸

همچنین برخی از اختصارهای مشهور، مانند wga را نیز می‌توانید در اینجا استفاده کنید. برای دیدن لیستی از اختصارات، از صفحه‌ی man ffmpeg دیدن کنید.

-s “size”

فریم در ثانیه‌ی(fps) را تعیین می‌کند، مثلا ۲۵ .

-r “rate”

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

-vn

کدک ویدئو را تنظیم می‌کند. برای دیدن لیستی از کدک‌های موجود روی سیستم خود از دستور ffmpeg -codecs استفاده کنید. در خروجی این دستور علامت E کنار اسم کدک به این معناست که شما می‌توانید فایلی را به این کدک تبدیل کنید. وجود D در کنار اسم کدک به معنای این است که ffmpeg قابلیت خواندن فایل با این کدک را دارد. همچنین وجود حرف V در کنار کدک نشان‌گر آن است که آن کدک، یک کدک تصویری است.

-vcodec “codec”

فیلتری را به ویدئو اعمال می‌کند. در بخشی مجزا برخی فیلترهای قابل اعمال را کمی بررسی خواهیم کرد. ولی به دلیل پیشرفته‌تر بودن موضوع، بهتر است لینک‌های بخش فیلترها را ببینید.

-vf “filter”

۵.گزینه‌های صوت

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

حذف صوت از فایل ورودی

-an

تنظیم کدک صوتی. برای دیدن لیستی از کدک‌های موجود روی سیستم از ffmpeg -codecs استفاده کنید. وجود حرف A در کناز اسم هر کدک نشان‌گر آن است که آن کدک، یک کدک صوتی است و وجود حرف E به معنای این است که شما می‌توانید با این کدک خروجی تولید کنید. وجود حرف D نیز به معنای قابلیت خواندن کدک توسط برنامه است.

 

-acodec “codec”

کیفیت صوت را تعیین می‌کند. در این بخش می‌توانید از مقادیری مانند ۱۲۸k نیز استفاده کنید.

-aq “quality”

سرعت نمونه‌برداری را تعیین می‌کند. rate سرعت را بر حسب هرتز مشخص می‌کند.

-ar “rate”

تعداد کانال‌های صوتی را تعیین می‌کند.

-ac “channels”

۶. فیلترها

در حین عملیات تبدیل، فیلترهای مختلفی به فایل قابل اعمال هستند. از فیلترها می‌توان برای مقاصدی مانند بریدن بخشی از تصویر (crop کردن)، افزودن نوشته به تصویر و بسیاری کارهای دیگر استفاده کرد.

برای دیدن لیستی از فیلتر‌ها و نحوه‌ی اعمال هر کدام اینجا و اینجا را ببینید.

برای مثال، برای بریدن بخشی از فیلم (crop کردن)، از دستوری مانند زیر استفاده می‌کنیم:

ffmpeg -vf crop=w:h:x:y -i input output

که مقادیر w و h اندازه و مقادیر x,y نقطه‌ی شروع بریدن تعیین می‌کنند. مبدأ این مختصات نقطه‌ی بالا چپ تصویر است.
به عنوان مثالی دیگر، دستور زیر مستطیلی روی تصویر رسم می‌کند.

ffmpeg -vf drawbox=x:y:w:h:color -i input output

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

20 دیدگاه برای این نوشته:

  1. \'\'بیژن:

    ۱۷ شهریور ۱۳۹۱
    خیلی مفید واقع شد
    از این نوع مقالات که واقعا سطح علمی آدم رو می برند بالا خیلی خوشم می آید
    ممنون
  2. \'\'علیرضا:

    ۱۷ شهریور ۱۳۹۱
    عالی
    ولی من یه مشکلی با ffmpeg دارم که مدت‌هاست نمیتونم براش جواب پیدا کنم و گیرم. برای join کردن دو تا ویدیو از چه آرگومنتی باید استفاده کرد؟
  3. \'\'مجتبی:

    ۱۷ شهریور ۱۳۹۱
    خیلی خیلی مفید بود.
    واقعا گروه LR در زمینه تولید محتوا فعالیت قابلیت قابل توجهی دارند
  4. \'\'وحید فضل الله زاده:

    ۱۷ شهریور ۱۳۹۱
    راستش این بحث خیلی پیچیده‌تر از یه دستور ساده هست.
    باید بدونیم کدک‌های ورودی چی هستن. بعضی (بخونید بیشتر) کدک‌ها رو میشه با چند تا دستور ساده به هم چسبوند ولی بعضی‌ها رو نمیشه.
    اگه می‌خوای بیشتر بدونی لینک زیر رو ببین:

    http://ffmpeg.org/faq.html#How-can-I-concatenate-video-files_003f

  5. \'\'عرفان طباطبائی:

    ۱۷ شهریور ۱۳۹۱
    عـــالی بود ممنون
  6. \'\'سلمان:

    ۱۷ شهریور ۱۳۹۱
    عالی بود. مرسی
  7. \'\'نوید:

    ۱۹ شهریور ۱۳۹۱
    مقاله‌ی آموزشی خوبی بود منتها از آن‌جایی که در مستندات ffmpeg نیز ذکر شده، بهتر است از ابزار avconv به جای آن استفاده شود که تقریبا تمامی پارامترهای ffmpeg رو شامل میشه.
  8. \'\'وحید فضل الله زاده:

    ۱۹ شهریور ۱۳۹۱
    به نکته‌ی خوبی اشاره کردید.
    ولی اینطور که برمیاد هنوز هم ffmpeg کاربرد بیشتری داره و avconv خوب جا نیافتاده. مثلا فدورا،یکی از بروزترین توزیع‌ها، هنوز پکیجی واسه avconv نداره (فدورا ۱۷).
    راستش تو مستندات ffmpeg گشتم ولی چیزی که میگین رو پیدا نکردم. ولی تو سایت avconv این نکته رو اشاره کرده بودن.
    به هر حال ممنون
  9. \'\'سعید:

    ۲۲ شهریور ۱۳۹۱
    سلام
    مییدونم بی ربطه اما سایت تون با مرورگر اپرا همخوانی نداره. همه حروف جداجدا و از آخر به اول نشون داده میشن. لطفا درستش کنین.
  10. \'\'رضا آقازاده:

    ۲۲ شهریور ۱۳۹۱
    اگر بخوایم چند دقیقه از فیلم رو کلا جدا کنیم چجوری میشه؟
    یعنی از دو ساعت فیلم ۵ دقیقه وسطش رو حذف کنیم و فایل خروجی شامل اون نباشه(سانسور بشه)
  11. \'\'وحید فضل الله زاده:

    ۲۴ شهریور ۱۳۹۱
    واسه این کار باید دو تیکه رو جدا کنید و بهم بچسبونید. واسه چسبوندن هم به دوست دیگه‌ای اون بالا لینک دادم.
    بهتره موقع جدا کردن، تیکه‌ها رو به یه فرمتی مثل MPEG-1 تبدیل کنید که چسبوندنش راحت باشه.
  12. \'\'وحید فضل الله زاده:

    ۲۴ شهریور ۱۳۹۱
    یادم رفت بگم برای جدا کردن بهتره از فیلتر split استفاده کنید. بخش فیلترها رو ببینید.
  13. \'\'حسین خودمونی:

    ۲۶ شهریور ۱۳۹۱
    فقط خدا می دونه که چه قدر دنبال همچین نرم افزاری گشتم.
    همیشه این برنامه رو من نصب می کردم اما فکر می کردم بخشی از کدک هاست و باید نصبشون کنم (امان از وبسایت هایی که ندانسته همه چیز می نویسن {لعنت بر خودم که حتی یک بار هم نرفتم منویالشو بخونم}) زمین و زمان و اینترنت رو زیر و رو کردم هیچی پیدا نکردم نه واسه ویندزد و نه واسه لینوکس اما مثل لینوکسش بود و من ندیدم.
    متشکرم خیلی عالی بود و لذت بردیم.
  14. \'\'وحید فضل الله زاده:

    ۲۷ شهریور ۱۳۹۱
    ویندزد! عالی بود.
  15. \'\'عرفان:

    ۰۱ مهر ۱۳۹۱
    به نظر میرسه که سایت شما داره کم کم از دور خارج میشه. سایت خوبی هست امیدوارم بیشتر بهش توجه بشه
  16. \'\'علی بهجتی:

    ۰۱ مهر ۱۳۹۱
    کم کم دیگه شمام رفتید ! ۲ هفته پست نذاشتن خیلی نشونه بدیه …
  17. \'\'بیژن:

    ۰۷ مهر ۱۳۹۱
    این برنامه رابط گرافیکیش هم هست:
    sudo apt-get update
    sudo apt-get install winff
    Step 4 (optional): Install the unstripped version of ffmpeg:
    sudo apt-get install libavcodec-extra-53

    http://winff.org/html_new/downloads.html

  18. \'\'بیژن:

    ۰۷ مهر ۱۳۹۱
    برای ویندوز هم هست! http://www.formatoz.com/download.html از تبدیل بگیر تا کات کردن و ….
  19. \'\'Saeid:

    ۱۶ مهر ۱۳۹۱
    آقا وحید می خواستم بدونم چطور می توان با PHP به کمک برنامه ffmpeg صفحه اول فایل های PDF با فرمت JPEG در یک دایرکتوری خواص ذخیره کنیم
  20. \'\'وحید فضل الله زاده:

    ۱۸ آبان ۱۳۹۱
    به نظر من بهتره که واسه این کار از ImageMagick استفاده کنید.
    برای اطلاعات بیشتر به کدی که اول این صفحه اومده نگاه کنید:
    http://stackoverflow.com/questions/6100037/create-and-display-pdf-thumbnail-using-imagemagick-and-jquery

\"ارسال



برچسب ها : , , , , , , , , ,