Fadak.IR راهکارهای فدک
English Русский العربية فارسی
مقالات مدیریت مطالعات زبان


/ فاوا / آموزش رایانه

آموزش کاربردی نرم‌افزار ffmpeg


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

آشنایی با ffmpeg

این نرم افزار برای کار با «رسانه»‌های مختلف(صدا و تصویر) ساخته شده است این ابزار یکی از قوی‌ترین ابزارهای آزاد برای کار بر روی صدا و تصویر است در اغلب سیستم‌های عامل است. FFmpeg یک چارچوب نرم‌افزاری قدرتمند و رایگان برای پردازش ویدئو، صوت و دیگر فایل‌های چندرسانه‌ای است. این نرم‌افزار ابزارهای مختلفی را برای ضبط، تبدیل، فشرده‌سازی، ویرایش و پخش فایل‌های چندرسانه‌ای فراهم می‌کند. FFmpeg می‌تواند به عنوان یک ابزار خط فرمان یا به عنوان کتابخانه‌ای برای برنامه‌نویسی استفاده شود. در اینجا برخی از ویژگی‌ها و کاربردهای مهم FFmpeg آورده شده است:

ویژگی‌های FFmpeg:
پشتیبانی از فرمت‌های گسترده:

پشتیبانی از تقریبا تمامی فرمت‌های صوتی و تصویری رایج مانند MP4, AVI, MKV, MP3, AAC و بسیاری دیگر.
ابزارهای متنوع:

شامل ابزارهای مختلفی مانند ffmpeg (برای تبدیل و پردازش)، ffplay (برای پخش) و ffprobe (برای بررسی اطلاعات فایل‌ها).
فیلترها و افکت‌ها:

امکان اعمال فیلترهای مختلف روی ویدئو و صوت، مانند برش، چرخش، تغییر رزولوشن، تنظیم رنگ و غیره.
پشتیبانی از کدک‌ها:

پشتیبانی از اکثر کدک‌های رایج مانند H.264، H.265، VP9، AAC و غیره.
برخی از کاربردهای مهم FFmpeg:

نصب ffmpeg

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

Ubuntu ( and related distributions) or Debian:
apt-get install ffmpeg

در ویندوز نیاز به نصب ندارد و آخرین نسخه ویندوزی در سایت رسمی قابل دانلود است.

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

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

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

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

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

راهنمای بسیار کامل این برنامه

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

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

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

1
ffmpeg -i input output

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

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

1
ffmpeg -i input -nv output

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

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

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

1
ffmpeg -i input -na output

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

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

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

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

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

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

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

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

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

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

1
ffmpeg -f video4linux2 -i /dev/video0 output

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

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

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

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

-s “size”

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

-r “rate”

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

-vn

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

----

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

-vcodec “codec”

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

-vf “filter”

کاهش حجم ویدیو یا تصویر در ffmpeg

الحاق زیرنویس به فیلم

ffmpeg -i 1.mp4 -i 1.srt -c:s mov_text -c:v copy -c:a copy 2.mp4

برش تصویر
برای بریدن بخشی از فیلم (crop کردن): مقادیر w و h اندازه و مقادیر x,y نقطه‌ی شروع بریدن تعیین می‌کنند. مبدأ این مختصات نقطه‌ی بالا چپ تصویر است.

ffmpeg -vf crop=w:h:x:y -i input output
ffmpeg -i 1.mp4 -vf crop=iw/2:ih/2 -crf 30 outputdn.mp4

کم حجم نمودن فیلم

ffmpeg -i input.mp4 -vcodec h264 -b:v 700k -acodec mp3 -vf "scale=iw/4:iw/4" output.mp4
ffmpeg -i inputfile.mp4 -vcodec h264 -b:v 700k -acodec mp3 outputfile.mp4
ffmpeg -i input.mp4 -vcodec h264 -acodec mp2 outputfile.mp4
ffmpeg -i Rec003_.mp4 -vf scale=320:240 output.mp4
scale=1920x1080

Resolution scale calculator: calculate resolution downscaling options for video editing

کم حجم نمودن فیلم اما اگر ابعاد آن خیلی کم است از بزرگنمایی آن خودداری شود

ffmpeg -i input.jpg -vf "scale='min(320,iw)':'min(240,ih)'" input_not_upscaled.png
Scaling – FFmpeg

تغییر سایز تصویر، هم طول و عرض وارد شود
100 of left right crop
120 of top bottom crop

ffmpeg -i input.mp4 -filter:v "crop=in_w-2*100:in_h-2*120" output.webm

کاهش حجم ویدیو
هر چه عدد بعد از -crf بزرگت باشد کیفیت پایین تر می‌آید اما در -b هر چه کوچک تر باشد کیفیت پایین می‌آید

ffmpeg -i input.mp4 -b 1000000 output.mp4
ffmpeg -i input.mp4 -vf scale=iw/2:ih/2 output.mp4
ffmpeg -i input.mp4 -vcodec libx264 -crf 20 output.mp4
ffmpeg -i input.mp4 -vf scale=iw/2:ih/2 -crf 30 outputd.mp4
-b:a = audio bitrate
-ar = sample rate
Since 2013 a video format much better than H.264 is widely available, namely H.265 (better in that it compresses more for the same quality, or gives higher quality for the same size). To use it, replace the libx264 codec with libx265, and push the compression lever further by increasing the CRF value — add, say, 4 or 6, since a reasonable range for H.265 may be 24 to 30.
# ffmpeg -i input.mp4 -vcodec libx265 -crf 28 output.mp4
See this answer. Quoted below for convenience:
Calculate the bitrate you need by dividing your target size (in bits) by the video length (in seconds). For example for a target size of 1 GB (one gigabyte, which is 8 gigabits) and 10 000 seconds of video (2 h 46 min 40 s), use a bitrate of 800 000 bit/s (800 kbit/s):
# ffmpeg -i input.mp4 -b 800k output.mp4
Additional options that might be worth considering is setting the Constant Rate Factor, which lowers the average bit rate, but retains better quality. Vary the CRF between around 18 and 24 — the lower, the higher the bitrate.
# ffmpeg -i input.mp4 -vcodec libx264 -crf 20 output.mp4

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

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

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

-an

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

-acodec “codec”

بالا بردن سرعت پخش صدا atempo

ffmpeg -i input.mp3 -filter:a "atempo=2.0"  output.mp3

بالا بردن صدا

ffmpeg -i input.wma -filter:a "volume=60" output.mp3

تعیین کیفیت صوت. مثلا مقادیری مانند 128k

-aq “quality”

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

-ar “rate”

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

-ac “channels”

کم حجم نمودن صوت با حداقل کاهش کیفیت

ffmpeg -i input.MP3 -acodec libmp3lame -ac 2 -ab 64k -ar 44100 output.mp3

کم حجم نمودن صوت با کاهش کیفیت

ffmpeg -i inputfile.mp3 -acodec libmp3lame -b:a 8k -ac 1 -ar 11025 outputfile.mp3

انتخاب مقدار کیفیت

 $ ffmpeg -b 192k -i file file.mp3

با انتخاب مقدار کیفیت

ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3

انتخاب مقدار کیفیت

ffmpeg -b 192k -i file file.mp3

فیلترها

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

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

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

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

تبدیل دسته‌ای فایل‌ها

تبدیل گروهی در لینوکس

for i in *.*; do ffmpeg -i "$i" "$i.mp3" ;done
or
for %%A IN (*.avi) DO ffmpeg -i "%%A" "%%A.mpg"

تبدیل گروهی در لینوکس (حلقه for در خط فرمان)

for i in *.*; do ffmpeg -i "$i" "$i.mp3" ;done

تبدیل گروهی در ویندوز (حلقه for در خط فرمان)

for /r %i in (*) do ffmpeg -i "%i" -c:v mpeg4 -vtag xvid "%i.avi"

موارد مشترک در صوت و تصویر ffmpeg

متصل نمودن چند فایل

ffmpeg -i concat:"1.VOB|2.VOB|3.VOB" -c copy output.webm

حذف چند ثانیه

Create segments:

 

ffmpeg -t 00:11:00 -i input.mp4 -map 0 -c copy segment1.mp4
ffmpeg -ss 00:11:10 -i input.mp4 -map 0 -c copy segment2.mp4

 

Create input.txt:

 

file 'segment1.mp4'
file 'segment2.mp4'

 

Concatenate with the concat demuxer:

 

ffmpeg -f concat -i input.txt -map 0 -c copy output.mp4

دانلود فایل‌ها از سرور تلبیون

ffmpeg -i "rtmpe://www.s4.telewebion.com:1935/vod/mp4:/media/telewebion/tv3/2014-11-12/2012/file.mp4" -vcodec copy -acodec copy out1.mkv
 

برش زدن زمانی فایل صوتی یا تصویری

ffmpeg -i input.mp4 -ss start -t duration output.mp4
ffmpeg -i input.mp4 -ss 00:00:03 -t 00:00:08 -async 1 output.mp4
ffmpeg -ss 93 -i 1.mp4 -c copy -t 120 output.mp4

جدا سازی به وسیله زمان به طور مثال 49 ثانیه Split by time

ffmpeg -i t.ogg -map 0 -c copy -f segment -segment_time 49 -reset_timestamps 1 out%02d.ogg

افزایش دوبرابری سرعت پخش صدا و تصویر(اگر مقدار setpts پایین آورده شود سرعت بیشتر خواهد شد دقت شود سرعت پخش صدا نیز باید بصورت متوازن تغیر کند )

ffmpeg -i 08.mp4 -filter:a "atempo=2.0" -filter:v "setpts=0.5*PTS" j08_.mkv

دانلود ویدیو استریم m3u8

ffmpeg -i "http://host/folder/file.m3u8" -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 file.mp4

---

----

---

----

---

----

---

----
Useful FFmpeg Commands For Converting Audio & Video Files
Resolution scale calculator: calculate resolution downscaling options for video editing


-c copy -vcodec copy

is redundant. -c copy says "for all streams, do a stream copy" (no re-encoding). And then -vcodec copy says "for the video stream[s], do a stream copy". -c copy is all that's needed. You could also do -vcodec copy -acodec copy or -codec copy since -c is just a short version of -codec.
-crf 50

As you pointed out, since there's no transcoding going on, this video quality flag does nothing. And if it did work, 50 is such low quality that you probably wouldn't like the result. Also this flag is only supported by some codecs. (I wish ffmpeg gave you a warning when you pass in a useless flag!)
-bsf:a aac_adtstoasc

These days ffmpeg is smart enough to automatically insert this filter when needed. IMHO it's cleaner to just rely on that rather than always inserting it even when it's not necessary. (like in non-AAC+MPEG-TS streams) If you turn on verbose messaging with -v verbose you'll see that ffmpeg informs you of this:

$ ffmpeg -i https://...m3u8 -v verbose -c copy test.mp4
$ ffmpeg -i https://../stream.m3u8 -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 test2.mp4




مقالات
سیاست
رسانه‎های دیجیتال
علوم انسانی
مدیریت
روش تحقیق‌وتحلیل
متفرقه
درباره فدک
مدیریت
مجله مدیریت معاصر
آیات مدیریتی
عکس نوشته‌ها
عکس نوشته
بانک پژوهشگران مدیریتی
عناوین مقالات مدیریتی
منابع درسی (حوزه و دانشگاه)
مطالعات
رصدخانه شخصیت‌ها
رصدخانه - فرهنگی
رصدخانه - دانشگاهی
رصدخانه - رسانه
رصدخانه- رویدادهای علمی
زبان
لغت نامه
تست زبان روسی
ضرب المثل روسی
ضرب المثل انگلیسی
جملات چهار زبانه
logo-samandehi
درباره ما | ارتباط با ما | سیاست حفظ حریم خصوصی | مقررات | خط مشی کوکی‌ها |
نسخه پیش آلفا 2000-2022 CMS Fadak. ||| Version : 5.2 ||| By: Fadak Solutions نسخه قدیم