| FFMPEG(1) | دستورات کاربر (پارچ لینوکس) | FFMPEG(1) |
نام (NAME)
ffmpeg - مبدل و پردازشگر چندرسانهای همهکاره
خلاصه دستور (SYNOPSIS)
ffmpeg [گزینههای_عمومی] {[گزینههای_ورودی] -i آدرس_ورودی} ... {[گزینههای_خروجی] آدرس_خروجی} ...
توضیحات (DESCRIPTION)
دستور ffmpeg یک مبدل و پردازشگر چندرسانهای همهکاره و بسیار سریع است. این ابزار قادر است طیف وسیعی از ورودیها - از جمله فایلها، جریانهای زنده و دستگاههای ضبط - را بخواند، فیلتر کند و آنها را به خیل عظیمی از قالبهای خروجی تبدیل (Transcode) نماید.
دستور ffmpeg از تعداد دلخواهی ورودی مشخصشده با گزینه "-i" میخواند و در تعداد دلخواهی خروجی مینویسد. هر چیزی در خط فرمان که به عنوان گزینه شناخته نشود، به عنوان آدرس یا فایل خروجی تلقی میگردد.
هر ورودی یا خروجی میتواند شامل هر تعداد جریان مقدماتی (استریم) از انواع مختلف (ویدیو/صدا/زیرنویس/داده/پیوست) باشد. انتخاب اینکه کدام استریم به کدام خروجی برود، به طور خودکار یا با استفاده از گزینه "-map" تعیین میشود (به بخش انتخاب استریم (STREAM SELECTION) مراجعه کنید).
برای ارجاع به ورودیها یا خروجیها از اندیسهای بر پایه صفر استفاده میشود (نخستین ورودی 0 و دومی 1 است). استریمهای درون یک ورودی یا خروجی نیز با اندیس مشخص میشوند؛ به عنوان مثال "2:3" به چهارمین استریم از سومین ورودی اشاره دارد.
به عنوان یک قاعده کلی، هر گزینه روی فایل مشخصشده بعدی اعمال میشود. بنابراین ترتیب نوشتن گزینهها در خط فرمان بسیار مهم است و یک گزینه میتواند چندین بار برای فایلهای مختلف تکرار شود. گزینههای عمومی (مانند سطح لاگ) استثنا هستند و در ابتدا قرار میگیرند.
فایلهای ورودی و خروجی را با یکدیگر ترکیب نکنید -- ابتدا تمام فایلهای ورودی و سپس تمام خروجیها را تعیین نمایید.
چند مثال کاربردی و پایه:
- تبدیل یک
فایل
رسانهای
به قالبی
دیگر با
انکود مجدد:
ffmpeg -i input.avi output.mp4
- تنظیم
بیتریت
ویدیوی
خروجی روی 64
کیلوبیت
بر ثانیه:
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.mp4
- اجبار نرخ
فریم خروجی
به 24 فریم بر
ثانیه:
ffmpeg -i input.avi -r 24 output.mp4
- اجبار نرخ
فریم ورودی
خام به 1
فریم و
خروجی به 24
فریم بر
ثانیه:
ffmpeg -r 1 -i input.m2v -r 24 output.mp4
گزینه قالب (-f) ممکن است برای فایلهای ورودی خام ضروری باشد.
توضیحات تفصیلی (DETAILED DESCRIPTION)
دستور ffmpeg یک پایپلاین (خط لوله) تبدیل و ترنسکدینگ رسانه از اجزای زیر میسازد. روند اجرای برنامه شامل جریان دادههای ورودی از منابع به سمت مقاصد است، در حالی که توسط مؤلفهها و گرههایی که در مسیر با آنها مواجه میشوند تغییر شکل مییابند.
مؤلفهها و اجزای در دسترس عبارتند از:
- •
- دیماکسرها (Demuxers) (کوتاهشدهی demultiplexers) منابع ورودی را جهت استخراج موارد زیر میخوانند:
- ویژگیهای عمومی مانند فراداده، متادیتا و فصلها؛
- فهرست استریمهای اولیه ورودی و مشخصات فنی آنها.
به ازای هر گزینه -i یک نمونه دیماکسر ایجاد میشود که بستهها (packets) انکودشده را به دیکودرها یا ماکسرها میفرستد.
در ادبیات فنی گاهی به دیماکسرها splitters نیز میگویند زیرا وظیفه اصلی آنها تفکیک فایل به استریمهای مجزا است.
نمایش شماتیک یک دیماکسر به صورت زیر است:
┌──────────┬───────────────────────┐
│ demuxer │ │ packets for stream 0
╞══════════╡ elementary stream 0 ├──────────────────────►
│ │ │
│ global ├───────────────────────┤
│properties│ │ packets for stream 1
│ and │ elementary stream 1 ├──────────────────────►
│ metadata │ │
│ ├───────────────────────┤
│ │ │
│ │ ........... │
│ │ │
│ ├───────────────────────┤
│ │ │ packets for stream N
│ │ elementary stream N ├──────────────────────►
│ │ │
└──────────┴───────────────────────┘
▲
│
│ read from file, network stream,
│ grabbing device, etc.
│
- دیکودرها
(Decoders)
بستههای
فشردهشده
و انکودشده
را برای یک
استریم
صوتی،
ویدیویی یا
زیرنویس
دریافت
کرده و
آنها را به
فریمهای
خام (raw frames)
(آرایههای
پیکسلی
برای ویدیو
و PCM برای صدا)
دیکود
میکنند.
دیکودرها
داده را از
دیماکسر
دریافت
میکنند یا
ممکن است به
صورت مستقل
عمل نمایند
(دیکودرهای
لوپبک).
نمایش شماتیک یک دیکودر به صورت زیر است:
┌─────────┐ packets │ │ raw frames ─────────►│ decoder ├────────────► │ │ └─────────┘ - گراف
فیلترها
(Filtergraphs)
فریمهای
خام صوت و
تصویر را
پردازش و
تبدیل
میکنند. یک
فیلترگراف
شامل یک یا
چند فیلتر
متصل به هم
در قالب
گراف است.
فیلترگرافها
در دو نوع
ساده (simple) و
پیچیده (complex)
به ترتیب با
گزینههای
-filter و -filter_complex
پیکربندی
میشوند.
یک فیلترگراف ساده ویدیو که به عنوان نمونه عملیات deinterlacing (با فیلتر yadif) و سپس تغییر اندازه (با فیلتر scale) را انجام میدهد به شکل زیر است:
┌────────────────────────┐ │ simple filtergraph │ frames from ╞════════════════════════╡ frames for a decoder │ ┌───────┐ ┌───────┐ │ an encoder ────────────►├─►│ yadif ├─►│ scale ├─►│────────────► │ └───────┘ └───────┘ │ └────────────────────────┘یک فیلترگراف پیچیده مستقل است و به هیچ استریم خاصی محدود نمیشود و میتواند چندین ورودی و خروجی با انواع مختلف داشته باشد. دیاگرام زیر یک فیلترگراف پیچیده با ۳ ورودی و ۲ خروجی ویدیویی را نشان میدهد:
┌─────────────────────────────────────────────────┐ │ complex filtergraph │ ╞═════════════════════════════════════════════════╡ frames ├───────┐ ┌─────────┐ ┌─────────┐ ┌────────┤ frames ─────────►│input 0├─►│ overlay ├─────►│ overlay ├─►│output 0├────────► ├───────┘ │ │ │ │ └────────┤ frames ├───────┐╭►│ │ ╭►│ │ │ ─────────►│input 1├╯ └─────────┘ │ └─────────┘ │ ├───────┘ │ │ frames ├───────┐ ┌─────┐ ┌─────┬─╯ ┌────────┤ frames ─────────►│input 2├►│scale├►│split├───────────────►│output 1├────────► ├───────┘ └─────┘ └─────┘ └────────┤ └─────────────────────────────────────────────────┘ - انکودرها
(Encoders)
فریمهای
خام صوت،
تصویر یا
زیرنویس را
دریافت
کرده و
آنها را در
قالب
بستههای
فشرده
انکود
میکنند.
فرایند
فشردهسازی
معمولاً
اتلافی (lossy)
است، اگرچه
انکودرهای
بدون اتلاف
(lossless) نیز با
حجم خروجی
بالاتر
وجود دارند.
نمایش شماتیک یک انکودر:
┌─────────┐ raw frames │ │ packets ────────────►│ encoder ├─────────► │ │ └─────────┘ - ماکسرها (Muxers)
(کوتاهشده
multiplexers)
بستههای
انکودشده
را از
انکودرها
(مسیر
ترنسکدینگ)
یا
مستقیماً
از
دیماکسرها
(مسیر کپی
استریم)
دریافت
کرده،
آنها را با
هم
درمیآمیزند
(Interleave) و
بایتهای
حاصل را در
فایل
خروجی،
پایپ یا
شبکه
مینویسند.
نمایش شماتیک یک ماکسر:
┌──────────────────────┬───────────┐ packets for stream 0 │ │ muxer │ ──────────────────────►│ elementary stream 0 ╞═══════════╡ │ │ │ ├──────────────────────┤ global │ packets for stream 1 │ │properties │ ──────────────────────►│ elementary stream 1 │ and │ │ │ metadata │ ├──────────────────────┤ │ │ │ │ │ ........... │ │ │ │ │ ├──────────────────────┤ │ packets for stream N │ │ │ ──────────────────────►│ elementary stream N │ │ │ │ │ └──────────────────────┴─────┬─────┘ │ write to file, network stream, │ grabbing device, etc. │ │ ▼
کپی استریم (Streamcopy)
سادهترین خط لوله در ffmpeg عملیات streamcopy است که در آن بستههای یک استریم ورودی بدون دیکود، فیلتر یا انکود مجدد مستقیماً در خروجی کپی میشوند. به عنوان مثال، در نظر بگیرید ورودی INPUT.mkv با ۳ استریم داریم و میخواهیم استریم دوم را در OUTPUT.mp4 بنویسیم:
┌──────────┬─────────────────────┐ │ demuxer │ │ unused ╞══════════╡ elementary stream 0 ├────────╳ │ │ │ │INPUT.mkv ├─────────────────────┤ ┌──────────────────────┬───────────┐ │ │ │ packets │ │ muxer │ │ │ elementary stream 1 ├─────────►│ elementary stream 0 ╞═══════════╡ │ │ │ │ │OUTPUT.mp4 │ │ ├─────────────────────┤ └──────────────────────┴───────────┘ │ │ │ unused │ │ elementary stream 2 ├────────╳ │ │ │ └──────────┴─────────────────────┘
خط لوله فوق با دستور زیر ساخته میشود:
ffmpeg -i INPUT.mkv -map 0:1 -c copy OUTPUT.mp4
سناریوهای پیچیدهتر کپی استریم را نیز میتوان ایجاد کرد، برای مثال ترکیب استریمها از دو فایل ورودی مختلف در یک خروجی:
┌──────────┬────────────────────┐ ┌────────────────────┬───────────┐ │ demuxer 0│ │ packets │ │ muxer │ ╞══════════╡elementary stream 0 ├────────►│elementary stream 0 ╞═══════════╡ │INPUT0.mkv│ │ │ │OUTPUT.mp4 │ └──────────┴────────────────────┘ ├────────────────────┤ │ ┌──────────┬────────────────────┐ │ │ │ │ demuxer 1│ │ packets │elementary stream 1 │ │ ╞══════════╡elementary stream 0 ├────────►│ │ │ │INPUT1.aac│ │ └────────────────────┴───────────┘ └──────────┴────────────────────┘
که با دستور زیر اجرا میگردد:
ffmpeg -i INPUT0.mkv -i INPUT1.aac -map 0:0 -map 1:0 -c copy OUTPUT.mp4
یا حالت برعکس: تفکیک استریمهای یک ورودی به چندین فایل خروجی مجزا:
┌──────────┬─────────────────────┐ ┌───────────────────┬───────────┐
│ demuxer │ │ packets │ │ muxer 0 │
╞══════════╡ elementary stream 0 ├─────────►│elementary stream 0╞═══════════╡
│ │ │ │ │OUTPUT0.mp4│
│INPUT.mkv ├─────────────────────┤ └───────────────────┴───────────┘
│ │ │ packets ┌───────────────────┬───────────┐
│ │ elementary stream 1 ├─────────►│ │ muxer 1 │
│ │ │ │elementary stream 0╞═══════════╡
└──────────┴─────────────────────┘ │ │OUTPUT1.mp4│
└───────────────────┴───────────┘
که با دستور زیر ساخته میشود:
ffmpeg -i INPUT.mkv -map 0:0 -c copy OUTPUT0.mp4 -map 0:1 -c copy OUTPUT1.mp4
ترنسکدینگ (Transcoding)
ترنسکدینگ فرایند دیکود کردن یک استریم و انکود مجدد آن است. از آنجا که انکودینگ از نظر پردازشی سنگین است و اغلب همراه با کاهش جزئی کیفیت است، تنها در موارد لزوم باید انجام شود. خط لولهای که یک استریم ویدیو و یک صدا را میخواند، ویدیو را ترنسکد و صدا را کپی میکند:
┌──────────┬─────────────────────┐
│ demuxer │ │ audio packets
╞══════════╡ stream 0 (audio) ├─────────────────────────────────────╮
│ │ │ │
│INPUT.mkv ├─────────────────────┤ video ┌─────────┐ raw │
│ │ │ packets │ video │ video frames │
│ │ stream 1 (video) ├─────────►│ decoder ├──────────────╮ │
│ │ │ │ │ │ │
└──────────┴─────────────────────┘ └─────────┘ │ │
▼ ▼
│ │
┌──────────┬─────────────────────┐ video ┌─────────┐ │ │
│ muxer │ │ packets │ video │ │ │
╞══════════╡ stream 0 (video) │◄─────────┤ encoder ├──────────────╯ │
│ │ │ │(libx264)│ │
│OUTPUT.mp4├─────────────────────┤ └─────────┘ │
│ │ │ │
│ │ stream 1 (audio) │◄────────────────────────────────────╯
│ │ │
└──────────┴─────────────────────┘
دستور خط فرمان متناظر:
ffmpeg -i INPUT.mkv -map 0:v -map 0:a -c:v libx264 -c:a copy OUTPUT.mp4
فیلترینگ (Filtering)
هنگام ترنسکدینگ، استریمهای صوتی و تصویری میتوانند پیش از انکود نهایی توسط فیلترگرافهای ساده یا پیچیده پردازش شوند. اضافه کردن فیلتر به مثال ترنسکدینگ فوق به شکل زیر خواهد بود:
┌──────────┬───────────────┐
│ demuxer │ │ ┌─────────┐
╞══════════╡ video stream │ packets │ video │ frames
│INPUT.mkv │ ├─────────►│ decoder ├─────►───╮
│ │ │ └─────────┘ │
└──────────┴───────────────┘ │
╭───────────◄───────────╯
│ ┌────────────────────────┐
│ │ simple filtergraph │
│ ╞════════════════════════╡
│ │ ┌───────┐ ┌───────┐ │
╰──►├─►│ yadif ├─►│ scale ├─►├╮
│ └───────┘ └───────┘ ││
└────────────────────────┘│
│
│
┌──────────┬───────────────┐ video ┌─────────┐ │
│ muxer │ │ packets │ video │ │
╞══════════╡ video stream │◄─────────┤ encoder ├───────◄───────╯
│OUTPUT.mp4│ │ │ │
│ │ │ └─────────┘
└──────────┴───────────────┘
دیکودرهای بازگشتی (Loopback decoders)
دیکودرهای لوپبک خروجی یک انکودر را مجدداً دیکود میکنند تا بتوان آن را دوباره به یک فیلترگراف پیچیده متصل نمود. این کار با دستور "-dec" و مشخصکردن اندیس خروجی صورت میگیرد:
ffmpeg -i INPUT \ -map 0:v:0 -c:v libx264 -crf 45 -f null - \ -threads 3 -dec 0:0 \ -filter_complex '[0:v][dec:0]hstack[stack]' \ -map '[stack]' -c:v ffv1 OUTPUT
نمایش خط لوله ترنسکد با دیکودر بازگشتی:
┌──────────┬───────────────┐
│ demuxer │ │ ┌─────────┐ ┌─────────┐ ┌────────────────────┐
╞══════════╡ video stream │ │ video │ │ video │ │ null muxer │
│ INPUT │ ├──►│ decoder ├──┬────────►│ encoder ├─┬─►│(discards its input)│
│ │ │ └─────────┘ │ │(libx264)│ │ └────────────────────┘
└──────────┴───────────────┘ │ └─────────┘ │
╭───────◄──╯ ┌─────────┐ │
│ │loopback │ │
│ ╭─────◄──────┤ decoder ├────◄──╯
│ │ └─────────┘
│ │
│ │
│ │ ┌───────────────────┐
│ │ │complex filtergraph│
│ │ ╞═══════════════════╡
│ │ │ ┌─────────────┐ │
╰─╫─►├─►│ hstack ├─►├╮
╰─►├─►│ │ ││
│ └─────────────┘ ││
└───────────────────┘│
│
┌──────────┬───────────────┐ ┌─────────┐ │
│ muxer │ │ │ video │ │
╞══════════╡ video stream │◄─┤ encoder ├───────◄──────────╯
│ OUTPUT │ │ │ (ffv1) │
│ │ │ └─────────┘
└──────────┴───────────────┘
انتخاب استریم (STREAM SELECTION)
دستور ffmpeg گزینه "-map" را برای کنترل دستی انتخاب استریمها در هر فایل خروجی فراهم ساخته است. کاربران میتوانند از "-map" صرفنظر کنند تا ffmpeg به طور خودکار استریمها را برگزیند. گزینههای "-vn / -an / -sn / -dn" نیز میتوانند برای حذف و نادیدهگرفتن استریمهای ویدیو، صدا، زیرنویس و داده استفاده شوند.
توضیحات و قوانین انتخاب
قوانین انتخاب خودکار استریم:
- ویدیو: استریمی که بالاترین وضوح (Resolution) را دارد انتخاب میشود.
- صدا: استریمی که بیشترین تعداد کانال صوتی را داراست برگزیده میشود.
- زیرنویس: نخستین استریم زیرنویس منطبق با نوع انکودر پیشفرض (متنی یا تصویری) انتخاب میگردد.
استریمهای داده یا پیوستها به طور خودکار انتخاب نمیشوند و فقط با گزینه "-map" قابل انتقال هستند.
انتخاب دستی (Manual stream selection)
هنگامی که از گزینه "-map" استفاده میشود، منحصراً استریمهای نگاشتشده توسط کاربر در آن فایل خروجی قرار میگیرند.
مثالهای انتخاب استریم (Examples)
مثالهای زیر رفتار، جزئیات و نحوه عملکرد روشهای انتخاب استریم در ffmpeg را نشان میدهند. این مثالها سه فایل ورودی زیر را در نظر میگیرند:
input file 'A.avi'
stream 0: video 640x360
stream 1: audio 2 channels
input file 'B.mp4'
stream 0: video 1920x1080
stream 1: audio 2 channels
stream 2: subtitles (text)
stream 3: audio 5.1 channels
stream 4: subtitles (text)
input file 'C.mkv'
stream 0: video 1280x720
stream 1: audio 2 channels
stream 2: subtitles (image)
مثال: انتخاب خودکار استریم (automatic stream selection):
ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov
سه فایل خروجی مشخص شده است. برای دو فایل اول گزینهای از "-map" تعیین نشده است، بنابراین ffmpeg استریمها را به طور خودکار برمیگزیند.
فایل out1.mkv کانتینر ماتروشکا است و ویدیو، صدا و زیرنویس میپذیرد. برای ویدیو، "stream 0" از B.mp4 (بالاترین رزولوشن)، برای صدا "stream 3" از B.mp4 (بیشترین کانال 5.1)، و برای زیرنویس نخستین استریم زیرنویس ("stream 2" از B.mp4) انتخاب میشود.
فایل out2.wav تنها جریان صوتی میپذیرد، بنابراین تنها استریم 3 از B.mp4 انتخاب میگردد.
برای out3.mov، از آنجا که گزینه "-map 1:a" تعیین شده است، انتخاب خودکار متوقف شده و تمام استریمهای صوتی از ورودی دوم (B.mp4) به صورت کپی مستقیم (-c:a copy) منتقل میشوند.
مثال: انتخاب خودکار زیرنویسها (automatic subtitles selection):
ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv
مثال: خروجیهای بدون برچسب فیلترگراف (unlabeled filtergraph outputs):
ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt
گزینهها (OPTIONS)
تمام گزینههای عددی، چنانچه تصریح نشده باشد، یک رشته عددی را میپذیرند که میتواند با یکی از پیشوندهای استاندارد یکای SI همراه باشد، مانند: 'K' (کیلو)، 'M' (مگا)، یا 'G' (گیگا).
اگر حرف 'i' به پیشوند SI اضافه شود، به عنوان ضریب دودویی (بر پایه توانهای 1024 بهجای 1000) تفسیر میگردد؛ مانند: 'KiB', 'MiB', 'GiB'. اضافه کردن 'B' مقدار را در 8 ضرب میکند (تبدیل بایت به بیت).
گزینههایی که آرگومان دریافت نمیکنند، گزینههای بولی (Boolean) هستند و مقدار true را ثبت میکنند. برای خاموش کردن آنها میتوان از پیشوند "no" استفاده کرد؛ به عنوان مثال -nofoo گزینه foo را غیرفعال میسازد.
گزینههای دارای آرگومان از سینتکس فایل نیز پشتیبانی میکنند؛ بدین صورت که اگر بلافاصله پس از خطتیره یک اسلش '/' اضافه شود، آرگومان به عنوان مسیر فایلی خوانده میشود که محتوای گزینه از داخل آن بارگذاری خواهد شد:
ffmpeg -i INPUT -/filter:v filter.script OUTPUT
دستور بالا توضیحات و ساختار فیلترگراف ویدیو را از فایل متنی filter.script بارگذاری خواهد کرد.
مشخصکنندههای استریم (Stream specifiers)
برخی گزینهها برای هر استریم به طور مجزا اعمال میشوند (مانند نرخ بیت یا نوع کدک). مشخصکنندههای استریم برای تعیین دقیق استریمهای هدف به کار میروند.
مشخصکننده استریم رشتهای است که معمولاً پس از علامت دونقطه به نام گزینه افزوده میشود. برای نمونه "-codec:a:1 ac3" شامل مشخصکننده "a:1" است که دومین استریم صوتی را انتخاب کرده و کدک ac3 را برای آن برمیگزیند.
یک مشخصکننده میتواند با چندین استریم مطابقت داشته باشد؛ برای مثال "-b:a 128k" نرخ بیت 128 کیلوبیت را برای تمام استریمهای صوتی اعمال میکند.
یک مشخصکننده خالی با تمام استریمها مطابقت دارد. مثلاً "-codec copy" تمام استریمها را بدون انکود مجدد کپی مینماید.
حالتهای مختلف مشخصکنندههای استریم عبارتند از:
- stream_index
- انتخاب استریم بر اساس اندیس عددی (مثلاً -threads:1 4 تعداد ریسههای دومین استریم را روی 4 تنظیم میکند).
- stream_type[:additional_stream_specifier]
- نوع استریم: 'v' یا 'V' برای ویدیو، 'a' برای صدا، 's' برای زیرنویس، 'd' برای داده و 't' برای پیوستها. حرف 'v' با تمام استریمهای ویدیویی مطابقت دارد و 'V' فقط با ویدیوهایی که تصویر پیوست یا کاور نیستند.
- p:program_id[:additional_stream_specifier]
- استریمهایی که در برنامهای با شناسه program_id قرار دارند.
- #stream_id or i:stream_id
- انتخاب بر اساس شناسه اختصاصی استریم (مانند PID در کانتینر MPEG-TS).
- m:key[:value]
- انتخاب استریم بر اساس تگ متادیتا با کلید key و مقدار اختیاری value (مانند -map 0:m:language:fas برای صدای فارسی).
- u
- انتخاب استریمهای با پیکربندی قابل استفاده (کدک و پارامترهای پایهای مانند ابعاد ویدیو یا نرخ نمونهبرداری صدا باید موجود باشند).
گزینههای عمومی (Generic options)
این گزینهها میان تمامی ابزارهای مجموعه ff* به صورت مشترک پشتیبانی میشوند.
- -L, -license
- نمایش مجوز برنامه (License).
- -h, -?, -help, --help [arg]
- نمایش راهنما. یک پارامتر اختیاری میتواند برای دریافت راهنما درباره یک مؤلفه خاص مشخص شود:
- long
- چاپ گزینههای پیشرفته علاوه بر گزینههای پایه.
- full
- چاپ فهرست کامل تمامی گزینهها شامل انکودرها، دیکودرها، فیلترها و فرمتها.
- decoder=decoder_name
- اطلاعات دقیق درباره دیکودر مشخصشده با decoder_name.
- encoder=encoder_name
- اطلاعات دقیق درباره انکودر مشخصشده با encoder_name.
- demuxer=demuxer_name
- اطلاعات تفصیلی درباره دیماکسر مشخصشده با demuxer_name.
- muxer=muxer_name
- اطلاعات تفصیلی درباره ماکسر مشخصشده با muxer_name.
- filter=filter_name
- اطلاعات کامل فیلتر مشخصشده با filter_name.
- -version
- نمایش نسخه برنامه و کتابخانههای مورد استفاده.
- -buildconf
- نمایش پیکربندی و پارامترهای بیلد برنامه.
- -formats
- نمایش تمام فرمتهای قابل پشتیبانی (کانتینرها و دستگاهها).
- -demuxers
- نمایش فهرست کامل دیماکسرهای در دسترس.
- -muxers
- نمایش فهرست کامل ماکسرهای در دسترس.
- -devices
- نمایش دستگاههای ورودی و خروجی در دسترس.
- -codecs
- نمایش تمام کدکهای شناختهشده برای کتابخانه libavcodec.
- -decoders
- نمایش دیکودرهای در دسترس.
- -encoders
- نمایش انکودرهای در دسترس.
- -filters
- نمایش تمامی فیلترهای ویدیویی و صوتی در دسترس libavfilter.
- -protocols
- نمایش پروتکلهای شبکه و ورودی/خروجی در دسترس (مانند http, rtmp, file).
- -loglevel [flags+]فلگ
- تنظیم سطح گزارشدهی پیامها (LogLevel)؛ گزینههای ممکن شامل: quiet, panic, fatal, error, warning, info, verbose, debug.
- -v loglevel
- نام مستعار برای -loglevel.
- -report
- تولید گزارش کامل خط فرمان و لاگ در فایلی با پسوند log در دایرکتوری جاری.
- پنهان کردن بنر پیشفرض متنی حاوی اطلاعات کپیرایت و بیلد در ابتدای خروجی خط فرمان.
گزینههای AVOptions
این گزینهها مستقیماً توسط کتابخانههای libavformat، libavdevice و libavcodec ارائه میشوند. برای مشاهده فهرست کامل AVOptions از گزینه -help استفاده کنید. آنها به دو دسته تقسیم میشوند:
- عمومی
- این گزینهها برای هر کانتینر، کدک یا دستگاهی قابل تنظیم هستند.
- اختصاصی
- این گزینهها مختص یک کانتینر، کدک یا سختافزار خاص هستند. به عنوان مثال برای نوشتن متادیتا با تگ ID3v2.3 به جای ID3v2.4 پیشفرض در فایل MP3 از گزینه اختصاصی ماکسر MP3 استفاده میشود:
ffmpeg -i input.flac -id3v2_version 3 out.mp3
گزینههای اصلی (Main options)
- -f fmt (ورودی/خروجی)
- اجبار قالب فایل ورودی یا خروجی. به طور معمول قالب به صورت خودکار برای فایلهای ورودی تشخیص داده میشود و برای خروجی نیز از پسوند فایل تخمین زده میشود.
- -i url (ورودی)
- آدرس یا مسیر فایل ورودی.
- -y (عمومی)
- بازنویسی و جایگزینی فایلهای خروجی بدون پرسش و تأیید کاربر.
- -n (عمومی)
- عدم بازنویسی فایلهای خروجی؛ چنانچه فایل خروجی وجود داشته باشد بلافاصله برنامه خارج میشود.
- -stream_loop number (ورودی)
- تعیین تعداد دفعات تکرار (Loop) استریم ورودی. مقدار 0 یعنی بدون تکرار و -1 به معنای حلقه نامحدود است.
- -c[:stream_specifier] codec (ورودی/خروجی،بهازایهراستریم)
- -codec[:stream_specifier] codec (ورودی/خروجی،بهازایهراستریم)
- انتخاب یک
انکودر (پیش
از خروجی)
یا یک
دیکودر (پیش
از ورودی)
برای یک یا
چند استریم.
مقدار codec
نام
انکودر/دیکودر
است یا
مقدار ویژه
"copy" (فقط
خروجی) که
نشان
میدهد
استریم
نباید
مجدداً
انکود شود.
مثال:
ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT
تمام استریمهای ویدیو را با libx264 انکود کرده و تمام استریمهای صوتی را کپی میکند.
- -t duration (ورودی/خروجی)
- در ورودی، مدتزمان خواندن داده از فایل ورودی را محدود میسازد. در خروجی، نوشتن را پس از رسیدن مدتزمان به مقدار duration متوقف میکند.
- -to position (ورودی/خروجی)
- توقف نوشتن خروجی یا خواندن ورودی در نقطه زمانی position.
- -fs limit_size (خروجی)
- تعیین سقف حجم فایل خروجی به بایت.
- -ss position (ورودی/خروجی)
- پرش زمانی (Seek) در ورودی یا خروجی به موقعیت زمانی مشخصشده توسط position (مثلاً 00:01:30 یا 90).
- -sseof position (ورودی)
- پرش زمانی نسبت به انتهای فایل (مقادیر منفی به نقاط پیش از پایان اشاره دارند).
- -timestamp date (خروجی)
- تنظیم برچسب زمانی ثبت کانتینر در خروجی.
- -metadata[:metadata_specifier] key=value (خروجی،بهازایمتادیتا)
- تنظیم تگ کلید/مقدار در متادیتای خروجی (مانند title="عنوان فیلم" یا author="نام نویسنده").
- -disposition[:stream_specifier] value (خروجی،بهازایهراستریم)
- تنظیم وضعیت پیشفرض، اجباری یا اختیاری بودن استریم (مانند default, forced, hearing_impaired).
- -target type (خروجی)
- تعیین فرمت هدف استاندارد (مانند vcd, svcd, dvd, dv, pal-dvd).
- -filter[:stream_specifier] filtergraph (خروجی،بهازایهراستریم)
- ایجاد فیلترگراف مشخصشده و استفاده از آن برای پردازش استریم.
- -filter_complex filtergraph (عمومی)
- تعریف یک فیلترگراف پیچیده با چندین ورودی و/یا خروجی.
گزینههای ویدیو (Video Options)
- -vframes number (خروجی)
- تنظیم تعداد فریمهای ویدیویی خروجی (نام مستعار قدیمی برای -frames:v).
- -r[:stream_specifier] fps (ورودی/خروجی،بهازایهراستریم)
- تنظیم نرخ فریم ویدیو بر حسب هرتز یا فریم بر ثانیه (مثلاً 24, 30, 60 یا 30000/1001).
- -fpsmax[:stream_specifier] fps (خروجی،بهازایهراستریم)
- تنظیم سقف حداکثر نرخ فریم خروجی.
- -s[:stream_specifier] size (ورودی/خروجی،بهازایهراستریم)
- تنظیم ابعاد فریم ویدیو به فرمت wxh (عرض در ارتفاع؛ مانند 1920x1080 یا 1280x720 یا اختصاراتی مانند hd1080).
- -aspect[:stream_specifier] aspect (خروجی،بهازایهراستریم)
- تنظیم نسبت تصویر (Display Aspect Ratio) ویدیو (مانند 16:9 یا 4:3).
- -vn (ورودی/خروجی)
- غیرفعال کردن ضبط یا پردازش ویدیو (صرفنظر کردن از استریمهای ویدیو).
- -vcodec codec (ورودی/خروجی)
- تنظیم کدک ویدیو (نام مستعار برای -codec:v).
- -pass[:stream_specifier] n (خروجی،بهازایهراستریم)
- شماره مرحله انکود چندمرحلهای (1 یا 2 در انکود دو مرحلهای two-pass).
- -vf filtergraph (خروجی)
- نام مستعار برای -filter:v (اعمال فیلترگراف ویدیو بر روی خروجی).
گزینههای پیشرفته ویدیو (Advanced Video options)
- -pix_fmt[:stream_specifier] format (ورودی/خروجی،بهازایهراستریم)
- تنظیم فرمت پیکسل (Pixel Format؛ مانند yuv420p, yuv444p, nv12, rgb24). برای مشاهده فهرست کامل فرمتها از -pix_fmts استفاده کنید.
- -sws_flags flags (ورودی/خروجی)
- تنظیم فلگهای پیشفرض کتابخانه libswscale برای تغییر اندازه تصویر (مانند bicubic, lanczos, bilinear).
- -vstats 4
- ثبت و ذخیره آمار انکود فریمهای ویدیو در فایلی با ساختار vstats_HHMMSS.log.
- -vstats_file file
- تعیین نام اختصاصی فایل برای ذخیره آمار انکود ویدیو.
- -vtag fourcc/tag (خروجی)
- اجبار تگ ویدیو / کد چهارنویسهای FourCC (نام مستعار برای -tag:v).
- -force_key_frames[:stream_specifier] time[,time...] (خروجی،بهازایهراستریم)
- اجبار تولید فریم کلیدی (I-frame / Keyframe) در نقاط زمانی مشخص یا بر اساس روابط ریاضی (مناسب برای ساخت پکتهای HLS و DASH).
گزینههای صدا (Audio Options)
- -aframes number (خروجی)
- تنظیم تعداد فریمهای صوتی خروجی (نام مستعار قدیمی برای -frames:a).
- -ar[:stream_specifier] freq (ورودی/خروجی،بهازایهراستریم)
- تنظیم نرخ نمونهبرداری صوت (Sampling Frequency) بر حسب هرتز (مانند 44100 یا 48000).
- -aq q (خروجی)
- تنظیم کیفیت صدا در انکود VBR متغیر (نام مستعار برای -q:a).
- -ac[:stream_specifier] channels (ورودی/خروجی،بهازایهراستریم)
- تنظیم تعداد کانالهای صوتی (مثلاً 1 برای مونو، 2 برای استریو، 6 برای 5.1).
- -an (ورودی/خروجی)
- غیرفعال کردن پردازش یا ضبط صدا (صرفنظر کردن از استریمهای صوتی).
- -acodec codec (ورودی/خروجی)
- تنظیم کدک صوتی (نام مستعار برای -codec:a؛ مانند aac, libmp3lame, opus, flac).
- -af filtergraph (خروجی)
- نام مستعار برای -filter:a (اعمال فیلترگراف صوتی مانند ولوم، اکولایزر یا ریسمپل).
گزینههای زیرنویس (Subtitle options)
- -scodec codec (ورودی/خروجی)
- تنظیم کدک زیرنویس (نام مستعار برای -codec:s؛ مانند srt, subrip, ass, mov_text).
- -sn (ورودی/خروجی)
- غیرفعال کردن پردازش یا ضبط زیرنویس (صرفنظر کردن از استریمهای زیرنویس).
- -fix_sub_duration
- اصلاح مدتزمان نمایش زیرنویسها برای جلوگیری از همپوشانی نامطلوب (به ویژه در زیرنویسهای DVB).
گزینههای پیشرفته (Advanced options)
- -map [-]input_file_id[:stream_specifier][:view_specifier][:?] | [linklabel] (خروجی)
- ایجاد یک یا
چند استریم
در فایل
خروجی. این
گزینه دو
شیوه اصلی
برای تعیین
منبع داده
دارد: شیوه
نخست یک یا
چند استریم
را از یک
فایل ورودی
مشخص
انتخاب
میکند (که
با -i
تعریف شده
است)، و
شیوه دوم
خروجی یک
فیلترگراف
پیچیده را
تحویل
میگیرد (که
با -filter_complex
تنظیم شده
است).
قرار دادن علامت خطتیره "-" پیش از شناسه استریم، یک نگاشت منفی ایجاد میکند و استریمهای منطبق را از نگاشتهای قبلی حذف مینماید.
علامت سؤال "?" در انتهای اندیس استریم به این معناست که اگر استریم مورد نظر یافت نشد، برنامه با خطا متوقف نشود و از آن صرفنظر نماید.
- -re (ورودی)
- خواندن ورودی با نرخ فریم بومی خود (سرعت زمان واقعی Realtime). این گزینه به ویژه برای شبیهسازی پخش زنده شبکه یا ارسال جریانهای زنده RTMP/RTSP کاربرد دارد.
- -benchmark (عمومی)
- نمایش آمار محک زدن و زمان مصرفی CPU و حافظه در انتهای پردازش انکود.
- -shortest (خروجی)
- اتمام نوشتن خروجی به محض پایان کوتاهترین استریم ورودی (بسیار مفید هنگام ترکیب یک تصویر ثابت با یک فایل صوتی بلند).
فایلهای پیشتنظیم (Preset files)
یک فایل پیشتنظیم حاوی مجموعهای از زوجهای گزینه=مقدار در هر خط است که برای جلوگیری از نوشتن گزینههای طولانی در خط فرمان استفاده میشود. خطوطی که با '#' آغاز شوند به عنوان یادداشت در نظر گرفته میشوند.
فرمت فایل vstats
گزینههای "-vstats" و "-vstats_file" تولید فایلی حاوی مشخصات آماری فریمهای خروجی ویدیویی را فعال میکنند. اطلاعاتی مانند شماره فریم، کیفیت فریم (q)، نسبت سیگنال به نویز (PSNR)، حجم فریم و نرخ بیت متوسط در آن ثبت میگردد.
مثالهای کاربردی (EXAMPLES)
ضبط صدا و تصویر زنده
در صورت تعیین قالب و دستگاه ورودی، ffmpeg میتواند صدا و تصویر را مستقیماً ضبط کند:
ffmpeg -f alsa -ac 2 -i hw:0 -f video4linux2 -i /dev/video0 /tmp/out.mpg
ضبط از صفحه نمایش (X11 grabbing)
برای ضبط از دسکتاپ و محیط گرافیکی لینوکس (X11):
ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 /tmp/desktop.mp4
در دستور فوق :0.0 شماره صفحه نمایش سرور X11 شما است (همانند متغیر محیطی DISPLAY).
تبدیل فرمتهای فایلهای صوتی و تصویری
هر فرمت و پروتکل پشتیبانیشده میتواند به عنوان ورودی برای ffmpeg استفاده شود:
- تبدیل یک
فایل
ویدیویی به
MP4 با انکودر
H.264 و صدای AAC:
ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a aac -b:a 192k output.mp4
- استخراج
صدای یک
ویدیو بدون
انکود مجدد
(کپی
مستقیم):
ffmpeg -i video.mp4 -vn -c:a copy audio.aac
- استخراج
فریمهای
ویدیویی به
صورت عکس
(یک عکس در
هر ثانیه):
ffmpeg -i input.mp4 -r 1 -f image2 frame_%04d.jpg
- ساخت یک
ویدیو از
توالی
عکسها با
نرخ 30 فریم
بر ثانیه:
ffmpeg -framerate 30 -i frame_%04d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
- بریدن بخشی
از ویدیو از
دقیقه 1 به
مدت 30 ثانیه:
ffmpeg -ss 00:01:00 -i input.mp4 -t 30 -c copy cut.mp4
همچنین ببینید (SEE ALSO)
ffmpeg-all(1), ffplay(1), ffprobe(1), ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1), ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1), ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1)
نویسندگان و سازندگان (AUTHORS)
توسعهدهندگان و جامعه پروژه FFmpeg.
برای مشاهده تاریخچه مشارکتکنندگان، به تاریخچه Git پروژه در https://git.ffmpeg.org/ffmpeg مراجعه کنید یا دستور git log را در درخت کد منبع FFmpeg اجرا نمایید.
نگهدارندگان مؤلفهها در فایل MAINTAINERS در درخت کد منبع لیست شدهاند.
| 2026-09-07 | FFmpeg |