پردازش محتوای چند رسانه‌ای با FFMPEG

 

 

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

FFMPEG تحت سیستم عامل لینوکس توسعه یافته ولی میتواند در سایر سیستمهای عامل همچون Mac و Windows نیز اجرا شود.

نسخه مناسب FFMPEG برای هر سیستم عامل را میتوان از اینترنت تهیه کرد و برای نمونه لینوکسی با دستور زیر قابل نصب است:

 

sudo apt-get install ffmpeg

 

فضای رنگی YUV

 

فضاهای رنگی متعددی همچون RGB, CMYK, YUV, CIELAB و غیره موجود است. نمونه‌ای که به طور گسترده در پردازش ویدئو استفاده میشود فضای رنگی YUV است. این فضای رنگی توسط مهندسین زمانی اختراع شد که میخواستند تلویزیون رنگی را در زیرساخت تلویزیون سیاه-سفید بوجود آورند. آنها به روش ارسال سیگنالی نیاز داشتند که با تلویزیون سیاه-سفید مطابقت داشته باشد و بتوان به آن رنگ را اضافه کرد. بخش L یا روشنایی به صورت نور سیاه-سفید وجود داشت و تنها کافی بود که سیگنال UV به آن اضافه شود.

فایل ورودی پردازش تصویر و ویدئو معمولا به صورت فایلهای YUV است و ویدئو به فرمت زیرنمونه برداری شده 4:2:0 در نظر گرفته میشود.

 

 

پردازش ویدئو با FFMPEG

 

خط دستوری زیر ویدئو ورودی YUV با رزولوشن 1920 در 1080 با فرمت 4:2:0 را به ویدئوی با رزولوشن 1280 در 720 تبدیل میکند:

 

ffmpeg -s:v 1920×1080 -i input.yuv -vf scale=1280:720 -c:v rawvideo -pix_fmt yuv420p output.yuv

اگر شما بخواهید رزولوشن دیگری را در نظر بگیرید، کافیست طول و عرض پارامتر scale را تغییر دهید.

برای فشرده سازی فایل YUV با نرخ 30 فریم در ثانیه و فرمت H.264 با نرخ 5 مگابیت بر ثانیه داریم:

 

ffmpeg -s:v 1280×720 -i input.yuv -vcodec h264 -r 30 -pix_fmt yuv420p -b:v 5000k output.h264

 

و برای فشرده سازی ویدئوی بالا به فرمت MPEG4:

ffmpeg -s:v 1280×720 -i input.yuv -vcodec mpeg4 -r 30 -pix_fmt yuv420p -b:v 5000k output.m4v

که پارامترهای آن به قرار زیر است:

s:v- رزولوشن ورودی را نشان میدهد.

i- فایل ورودی است.

vcodec- نوع کدک خروجی را نشان میدهد.

r- نرخ فریم خروجی را نشان میدهد.

pix_fmt- فرمت زیرنمونه بردای ساختار YUV در ورودی را نشان میدهد.

b:v- نرخ بیت ویدئوی خروجی را نشان میدهد.

 

 

پردازش تصویر با FFMPEG

 

خطوط دستوری زیر فایل تصویر با فرمت JPEG را از حالت فشرده خارج کرده و به صورت YUV ذخیره میکند:

 

ffmpeg -i image.jpg -pix_fmt yuv420p image.yuv

 

دستور زیر برای تغییر اندازه تصویر JPEG قابل استفاده است:

 

ffmpeg -i image.jpg -vf scale=width:height output.jpg

یا

 

ffmpeg -i image.jpg -vf scale=1280:720 output.jpg

 

دستور زیر برای تبدیل فرمت JPEG به BMP استفاده میشود:

 

ffmpeg -i image.jpg image.bmp

 

برای استخراج یک تصویر ثابت از ویدئوی فشرده دستور زیر استفاده میشود:

 

ffmpeg -i inputfile %03d.jpg

 

برای استخراج یک تصویر ثابت از فایل YUV، دستور زیر استفاده میشود:

 

ffmpeg -s:v 1280×720 -pix_fmt yuv420p -i inputyuvfile %03d.jpg

 

برای استخراج یک تصویر ثابت از فایل YUV با کیفیت خوب، دستور زیر استفاده میشود:

 

ffmpeg -s:v 1280×720 -pix_fmt yuv420p -i inputyuvfile -q 1 %03d.jpg

پارامتر q- بین 0 تا 100 متغیر است و هر چه کمتر باشد، کیفیت بالاتر است.

 

 

پردازش صوت با FFMPEG

 

ابزار FFMPEG برای تبدیل یا کد کردن فایلهای صوتی فشرده با کدک MP3 به AAC با دستور زیر قابل استفاده است:

 

ffmpeg -i input.mp3 -c:a libvo_aacenc -b:a 128k output.m4a

یا

 

ffmpeg -i input.mp3 -acodec aac -ab 128k -strict experimental output.m4a

که پارامترهای آن به صورت زیر تعریف میشوند:

c:a- یا acodec- نوع کدک خروجی را نشان میدهد.

i- فایل ورودی است.

b:a- یا ab- نرخ بیت فایل صوتی خروجی را نشان میدهد.

برای خارج کردن فایل صوتی از حالت فشرده و ذخیره سازی آن به صورت نمونه‌های PCM از دستور زیر استفاده میشود:

 

ffmpeg -i input.mp3 output.wav

 

برای فشرده سازی نمونه‌های خام و نافشرده PCM در فایل WAV به فرمت فشرده MP3 و AAC دستورهای زیر استفاده میشوند:

 

ffmpeg -i input.wav -c:a mp3 -b:a 128k output.mp3
ffmpeg -i input.wav -c:a libvo_aacenc -b:a 128k output.m4a

یا

 

ffmpeg -i input.wav -acodec aac -ab 128k -strict experimental output.m4a

ترکیب فایلهای صوت و تصویر

 

فرض کنید که صوت و تصویر را به صورت استریم در اختیار داشته باشیم. با دستور زیر میتوان آنها را ترکیب کرد:

 

ffmpeg -i videofile -i audiofile -c:v copy -c:a copy -strict experimental output.mp4

دستور بالا زمانیکه از c:a copy- و c:v copy- استفاده کند، هیچگونه پردازشی بر روی نمونه‌های صدا یا تصویر انجام نمیدهد و خیلی ساده محتوای مورد نظر را کپی کرده و به صورت MP4 آنها را بسته‌بندی میکند.

اغلب برخی برنامه‌های تلویزیونی دیده شده است که در حال اجرای ویدئو، صدا را اجرا نمیکند. دستور زیر برای حل این مشکل است. تقریبا تمامی تلویزیونها فرمت AAC را پشتیبانی میکنند و دستور زیر فایل صوتی را به این فرمت تبدیل میکند و ترکیب صدا و تصویر را به صورت MP4 ذخیره میکند:

 

ffmpeg -i inputfile -vcodec copy -acodec aac -ab 128k -strict experimental outfile.mp4

 

دریافت ویدئو به صورت نافشرده از وب کم با استفاده از FFMPEG

 

ffmpeg -f video4linux2 -r 30 -s 640×480 -i /dev/video0 output.avi

اگر این دستور روی یک لپتاپ اجرا شود، dev/video0/ به صورت پیش فرض دوربین سیستم را انتخاب میکند. برای دریافت تصاویر از یک دوربین خارج از سیستم میتوان به جای آن dev/video1/ را نوشت.

 

نتیجه‌گیری

 

این مقاله تنها یک دید کلی از کاربردهای FFMPEG را ارائه میدهد. این ابزار در بسیاری موارد دیگر که با داده‌های چندرسانه‌ای سروکار داریم، قابل استفاده است. FFMPEG یک ابزار بسیار کارآمد در پردازش محتوای چند رسانه‌ای است که کاربردهای بیشماری در این حوزه پیدا کرده است.

 

 

 

 

 

منبع: dsprelated.com