تبدیل فریم های ویدیو به فایل در OpenCV

در مطلب خواندن دوربین رایانه توسط OpenCV با پایتون توضیح دادیم که چگونه توسط کلاس VideoCapture می توانیم دوربین رایانه را فریم به فریم بخوانیم. حال در این مطلب می خواهیم توضیح دهیم که چگونه فریم های ویدیو دوربین رایانه را به صورت یک فایل ویدیویی درون دیسک ذخیره کنید. در این مطلب با کلاس VideoWriter آشنا می شوید. در ادامه گام هایی فهرست شده اند که باید برای ذخیره سازی فریم های ویدیو درون یک فایل ویدویی (مثلا پسوند mp4) انجام دهید.

گام ۱ – باز کردن دوربین رایانه توسط متد سازنده کلاس VideoCapture

گام ۲ – خواندن دوربین رایانه توسط  متد ()read از کلاس VideoCapture

گام ۳ – ایجاد یک شی از کلاس VideoWriter

گام ۴ – نوشتن فریم های ویدیو درون یک فایل با پسوند mp4 (یا پسوندهای دیگر) توسط متد ()write از کلاس VideoWriter

در خطوط ۶ تا ۱۳ از کد کامل، ابتدا متغیری به نام timestr تعریف می شود که تاریخ و زمان فعلی را در خود نگه می دارد. سپس متغیری به نام location تعریف می شود که مسیر دایرکتوری به نام Videos را در خود نگه می دارد که این دایرکتوری در همان جایی قرار دارد که فایل اسکریپت پایتون نیز در همان جا است. سپس بررسی می شود که آیا دایرکتوری Videos وجو دارد یا نه؟ اگر وجود نداشته باشد، پس آنرا پیش از راه اندازی دوربین و ذخیره سازی فریم ها، ایجاد می کند.

پس آماده سازی متغیرها و دایرکتوری های پیش نیاز، نوبت به ایجاد متغیرهایی از نوع کلاس های VideoCapture و VideoWriter می رسد. در کدهای زیر از متد ()get از کلاس VideoCapture استفاده شده است تا بتوانیم مقدار دو خصوصیت CAP_PROP_FRAME_WIDTH و CAP_PROP_FRAME_HEIGHT را درون متغیرهای width و height ذخیره کنیم زیرا پس از این می خواهیم فایل ویدیویی ذخیره شده در همین ابعاد باشد. توجه کنید که می توانستید مطابق با مطلب خواندن دوربین رایانه توسط OpenCV با پایتون از متد ()set استفاده کنید تا ابتدا ابعاد دوربین رایانه را کاهش و سپس توسط متد ()get این خصوصیت ها را جمع آوریکنید.

درکدهای زیر متغیر fourcc که توسط متد ()VideoWriter_fourcc ایجاد شده، یک کد چهار کارکتری را تعیین می کند که از آن برای فشرده سازی فریم ها استفاده می شود. چون ما می خواهیم فرمت mp4 ایجاد کنیم، پس از MP4V استفاده کرده ایم ولی شما می توانید از نمونه های زیر نیز استفاده کنید.

متغیر out، متغیری از نوع کلاس VideoWriter است که از آن برای فراخوانی متد ()write استفاده می شود تا بتوانیم فریم های دوربین رایانه را در غالب یک فایل ویدیویی روی دیسک بنویسیم. در کدهای زیر این متغیر توسط متد سازنده کلاس VideoWriter ایجاد شده است که آرگومان اول آن متغیر filename است نام و مسیر فایل را نگه می دارد. آرگومان دوم متغیر آن، متغیر fourcc است. آرگومان سوم سرعت نرخ فریم (Frame Rate) یا Frame pre Second (فریم در ثانیه یا فریم بر ثانیه یا FPS) نام دارد و مقدار عددی ممیز شناوری است که نشان دهنده فرکانس یا نرخی (Rate) است که فریم های متوالی درون فایل ویدیویی ظاهر می شوند. برای آزمایش لطفا عدد 5.0 را به عدد 20.0 تغییر دهید.

در نهایت باید درون یک حلقه while فریم ها خوانده شده، سپس آنها را توسط متد ()flip قرینه کنیم و در نهایت توسط متد ()write از کلاس VideoWriter آنها را روی فایل بنویسیم. توجه کنید در نهایت ابتدا باید توسط دستور ()videoCapture.release دوربین آزاد شده و سپس توسط دستور ()out.release فایل ویدویی آزاد و قابل نمایش داده شدن می شود.

کد کامل برنامه

دانلود سورس این مطلب Write Webcam frames to video files