ffmpeg: پارامترها و فرمت دستور ffmpeg

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

$ ffmpeg -i input_file […parameter list…] output_file

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

-formats   print the list of supported file formats
-codecs    print the list of supported codecs (E=encode,D=decode)
-i         set the input file. Multiple -i switchs can be used
-f         set video format (for the input if before of -i, for output otherwise)
-an        ignore audio
-vn        ignore video
-ar        set audio rate (in Hz)
-ac        set the number of channels
-b:a       set audio bitrate
-c:a
-codec:a   choose audio codec or use “copy” to bypass audio encoding
-c:v
-codec:v   choose video codec or use “copy” to bypass video encoding
-r         video fps. You can also use fractional values like 30000/1001 instead of 29.97
-s         frame size (w x h, ie: 320x240)
-aspect    set the aspect ratio i.e: 4:3 or 16:9
-sameq     ffmpeg tries to keep the visual quality of the input
-t N       encode only N seconds of video (you can use also the hh:mm:ss.ddd format)
-croptop, -cropleft, -cropright, -cropbottom   crop input video frame on each side
-y         automatic overwrite of the output file
-ss        select the starting time in the source file
-vol       change the volume of the audio
-g         Gop size (distance between keyframes)
-b:v       Video bitrate
-bt        Video bitrate tolerance
-metadata  add a key=value metadata

بعضی از این پارامترها قسمت دیگری برای تعیین کانال مورد استفاده دارند. شماره کانال از 0 شروع میشود. مثال:

-b:a:1

مثال‌ها:

1- گرفتن اطلاعات یک فایل

$ ffmpeg –i inputfile 2>info.txt

2- تبدیل فرمت ویدیو به flv

$ ffmpeg –i input.avi –r 15 –s 320×240 –an video.flv

دستور فوق به صورت پیش فرض از فرمت قدیمی Sorenson’s Spark format - H.263 استفاده می‌کند.

3- انکد از یک سری تصویر

$ ffmpeg -f image2 -i image%d.jpg –r 25 video.flv

در دستور فوق فایل‌هایی با الگوی نام مشخص شده توسط ffmpeg جستجو می‌شوند. فرمت‌های دیگر مانند image%3d.jpeg و ... قابل استفاده هستند.

4- دیکد ویدیو به تعدادی فریم

$ ffmpeg -i video.mp4 –r 25 image%d.jpg
// A picture every 10 seconds. (1/0.1=10)
$ ffmpeg –i video.mp4 –r 0.1 image%3d.jpg
// 2-3 picture from first 20 seconds of video.
$ ffmpeg –i video.mp4 –r 0.1 –t 20 image%3d.jpg

5- بیرون کشیدن یک تصویر از ویدیو

$ ffmpeg -i video.avi -vframes 1 -ss 00:01:00 -f image2 image-%3d.jpg
$ (ffmpeg -i video.avi -frames:v 1 -ss 00:01:00 -f image2 image-%3d.jpg)
$ ffmpeg -i video.avi -r 0.5 -vframes 3 -ss 00:00:05 -f image2 image-%3d.jpg
$ (ffmpeg -i video.avi -r 0.5 -frames :v 3 -ss 00:00:05 -f image2 image-%3d.jpg)

6- بیرون کشیدن صدا

$ ffmpeg -i video.flv -vn -c:a copy audio.mp3

7- بیرون کشیدن صدا و انکد آن

$ ffmpeg -i video.flv -vn -ar 44100 -ac 2 -ab 128k -f mp3 audio.mp3
$ ffmpeg –i video.flv –vn –c:a libaac –ar 44100 –ac 2 –ab 64k audio.mp4

8- ترکیب (MUX) صدا و تصویر

$ ffmpeg -i audio.mp4 -i video.mp4 output.mp4

9- تغییر دربرگیرنده (Container) - بعدا حین صحبت در مورد RTMP از این استفاده میکنیم.

$ ffmpeg –i input.mp4 –c:a copy –c:v copy output.flv

10- خواندن از وب کم

$ ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 out.flv
$ ffmpeg -r 15 -f vfwcap -s 320×240 -i 0 -r 15 -f mp4 webcam.mp4
$ ffmpeg -r 15 -f dshow -s 320×240 -i video=”video source name”:audio=”audio source name” webcam.flv

به پارامترهای –r –f –s که قبل از -i آمده اند، دقت کنید.

11- بیرون کشیدن بخشی از فیلم بدون انکدینگ مجدد

$ ffmpeg -i input -ss 00:01:00 -t 00:01:00 -c:a copy -c:v copy output.mp4

12- ایجاد یک فایل ویدیو از یک تک فریم: نمایش فریم در loop

$ ffmpeg -loop_input -frames:v 1 -i frame.jpg -t 10s -r 25 output.mp4

13- اضافه کردن ابر-داده metadata

$ ffmpeg -i input.flv -c:v copy -c:a copy -metadata title=”MyVideo” output.flv

14- تبدیل به H.264

$ ffmpeg -y -i input.mov -r 25 -b 1000k -c:v libx264 -pass 1 -vpre fastfirstpass -an output.mp4
$ ffmpeg -y -i input.mov -r 25 -b 1000k -c:v libx264 -pass 2 -vpre hq -acodec libfaac -ac 2 -ar 44100 -ab 128k output.mp4

در این مثال به ffmpeg گفته شده است از libx264 برای عملیات کدینگ استفاده کند. همچنین از تبدیل دو فازی استفاده شده که در فاز اول فایل وضعیت مورد استفاده فاز دوم ساخته می‌شود.

پارامتر -vpre از ffmpeg خواسته از fastfirstpass به عنوان present استفاده کند. در دستور دوم نیز از hq که یک present دقیق‌تر است استفاده شده است. present ها در مسیر نصب ffmpeg قرار دارند. فایل present مجموعه ای از پارامترهای از قبل تعیین شده هستند. در صورتی که می‌دانید چه می‌کنید میتوانید مقادیر تک تک پارامترها که به کدر ربط دارند را خودتان تعیین کنید.

$ ffmpeg -y -i input -r 25 -b 1000k -c:v libx264 -pass 1 -flags +loop -me_method dia -g 250 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -bf 3 -b_strategy 1 -i_qfactor 0.71 -cmp +chroma -subq 1 -me_range 16 -coder 1 -sc_threshold 40 -flags2 -bpyramid-wpred-mixed_refs-dct8x8+fastpskip -keyint_min 25 -refs 3 -trellis 0 -directpred 1 -partitions -parti8x8-parti4x4-partp8x8-partp4x4-partb8x8 -an output.mp4
$ ffmpeg -y -i input -r 25 -b 1000k -c:v libx264 -pass 2 -flags +loop -me_method umh -g 250 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -bf 3 -b_strategy 1 -i_qfactor 0.71 -cmp +chroma -subq 8 -me_range 16 -coder 1 -sc_threshold 40 -flags2 +bpyramid+wpred+mixed_refs+dct8x8+fastpskip -keyint_min 25 -refs 3 -trellis 1 -directpred 3 -partitions +parti8x8+parti4x4+partp8x8+partb8x8 -acodec libfaac -ac 2 -ar 44100 -ab 128k output.mp4
درخت مرجع: 

افزودن نظر جدید