توضیحات کامل تابع mmread در متلب

تابع mmread در متلب برای خواندن انواع فایل‌های چندرسانه‌ای (ویدئو و صوت) استفاده می‌شود. این تابع قادر است تقریباً هر نوع فایل ویدئویی یا صوتی را پردازش کند و با استفاده از AVbin و FFmpeg داده‌ها را دریافت نماید. این تابع در تمامی سیستم‌عامل‌ها و معماری‌هایی که متلب روی آن‌ها اجرا می‌شود، پشتیبانی می‌شود.


ورودی‌ها (INPUT)

  1. filename: نام فایل ورودی که باید خوانده شود. این فایل می‌تواند از فرمت‌های مختلفی مانند mpg، avi، wmv، asf، wav، mp3، gif و … باشد.
  2. frames: مشخص می‌کند که کدام فریم‌های ویدئویی خوانده شوند. مقدار پیش‌فرض [] به این معناست که تمامی فریم‌ها پردازش شوند. همچنین می‌توان از یک بازه‌ی زمانی مشخص برای استخراج فریم‌ها استفاده کرد.
  3. time: یک آرایه شامل [startTime stopTime] است که بازه‌ی زمانی برای پردازش فایل را تعیین می‌کند. مقدار پیش‌فرض [] یعنی پردازش کل فایل.
  4. disableVideo: اگر مقدار آن true باشد، تمام داده‌های ویدئویی غیرفعال شده و تنها صوت پردازش می‌شود. این گزینه برای صرفه‌جویی در حافظه و زمان پردازش مفید است.
  5. disableAudio: اگر مقدار آن true باشد، تمام داده‌های صوتی غیرفعال شده و تنها ویدئو پردازش می‌شود.
  6. matlabCommand: در صورتی که مقداردهی شود، خروجی به صورت ساختار ویدئویی بازگردانده نمی‌شود، بلکه تابع مشخص‌شده در این پارامتر اجرا خواهد شد. این تابع باید مطابق با processFrame.m باشد.
  7. trySeeking: مقدار پیش‌فرض آن true است. اگر مقدار آن false باشد، پردازش کمی کندتر ولی دقیق‌تر انجام می‌شود. اگر اولین فریم‌ها دچار اعوجاج شده یا اطلاعات زمانی دقیق نباشند، می‌توان این مقدار را false تنظیم کرد.
  8. useFFGRAB: مقدار پیش‌فرض true است و از نسخه‌ی جدید mmread که مبتنی بر FFmpeg است استفاده می‌کند. اگر در ویندوز اجرا شود و مشکلی در خواندن داده‌های صوتی یا تصویری وجود داشته باشد، می‌توان این مقدار را false تنظیم کرد تا از نسخه‌ی قدیمی استفاده شود.

خروجی‌ها (OUTPUT)

1. خروجی ویدئویی (video)

یک ساختار شامل اطلاعات ویدئو است:

  • width: عرض فریم‌های ویدئویی
  • height: ارتفاع فریم‌های ویدئویی
  • rate: نرخ فریم‌های ویدئویی (در صورتی که قابل تعیین نباشد مقدار آن 1 خواهد بود)
  • nrFramesTotal: تعداد کل فریم‌های ویدئو (اگر مقدار منفی باشد، تخمینی از تعداد فریم‌ها بر اساس مدت و نرخ فریم است)
  • totalDuration: مدت زمان کل ویدئو به ثانیه
  • frames: یک آرایه‌ی ساختاری شامل:
    • cdata: ماتریس [height X width X 3] uint8 که داده‌های تصویری را نگه می‌دارد
    • colormap: همیشه مقدار خالی دارد
    • times: زمان‌های مربوط به فریم‌ها بر حسب میلی‌ثانیه
    • skippedFrames: برخی از کدک‌ها فریم‌های تکراری را حذف می‌کنند تا فضای ذخیره‌سازی کاهش یابد. این فریم‌های حذف‌شده از روی پرش‌های موجود در فیلد times قابل شناسایی هستند.

2. خروجی صوتی (audio)

یک ساختار شامل اطلاعات صوتی است:

  • nrChannels: تعداد کانال‌های صوتی (1 یا 2)
  • rate: نرخ نمونه‌برداری صوتی، مانند 44100 (اگر قابل تعیین نباشد مقدار آن 1 خواهد بود)
  • bits: عمق بیت نمونه‌ها (8 یا 16 بیت)
  • data: داده‌های واقعی صوت که می‌توان آن را با wavplay پخش کرد
  • nrFramesTotal: تعداد کل فریم‌های صوتی
  • totalDuration: مدت زمان کل صوت به ثانیه
  • frames: آرایه‌ی سلولی از نوع uint8 (معمولاً کاربرد چندانی ندارد)
  • times: زمان‌های مربوط به فریم‌های صوتی بر حسب میلی‌ثانیه

اگر فایل ورودی شامل ویدئو یا صوت نباشد، ساختارهای مربوطه خالی خواهند بود.


نکات مهم در استفاده از تابع mmread

  • مشخص کردن فریم‌ها تنها روی ویدئو اثر دارد و روی صدا تأثیری ندارد. برای انتخاب بخش خاصی از صدا، باید از پارامتر time استفاده کرد.
  • پارامتر time بر روی هر دو بخش صوت و ویدئو اثرگذار است. مقدار آن به ثانیه وارد می‌شود و قابلیت استفاده از مقادیر کسری (مثلاً 1.125 ثانیه) را دارد.
  • اگر فایل چندین جریان ویدئویی یا صوتی داشته باشد، خروجی‌ها به‌صورت آرایه‌ای خواهند بود. برای مثال:
    • audio(1).data و audio(2).data نشان‌دهنده‌ی دو جریان صوتی در یک فایل هستند.

نمونه‌های استفاده از تابع mmread

1. خواندن کل فایل صوتی و پخش آن

= mmread('chimes.wav');
wavplay(audio.data, audio.rate);

2. خواندن کل یک ویدئو و نمایش آن

video = mmread('mymovie.mpg');
movie(video.frames);

3. دریافت فقط 10 فریم اول یک ویدئو

video = mmread('mymovie.mpg', 1:10);

4. خواندن 3.5 ثانیه‌ی اول یک ویدئو

video = mmread('mymovie.mpg', [], [0 3.5]);

5. خواندن 0.25 ثانیه‌ی اول یک فایل صوتی

= mmread('chimes.wav', [], [0 0.25]);

6. خواندن 0.25 تا 0.5 ثانیه از یک فایل صوتی (بدون همپوشانی با مثال قبل)

= mmread('chimes.wav', [], [0.25 0.5]);

7. خواندن یک فیلم مستقیماً از یک URL

video = mmread('http://example.com/sample.avi');

8. خواندن یک ویدئو بدون پردازش صوتی (فقط تصویر)

video = mmread('mymovie.mpg', [], [], false, true);

9. پردازش فریم‌های یک ویدئو به صورت هم‌زمان با یک تابع خاص در متلب

mmread('mymovie.mpg', [], [], false, false, 'processFrame');

نتیجه‌گیری

تابع mmread یکی از ابزارهای قدرتمند متلب برای خواندن و پردازش فایل‌های چندرسانه‌ای است. این تابع از FFmpeg برای پردازش داده‌ها استفاده می‌کند و امکان تعیین بخش‌های خاصی از ویدئو یا صوت، حذف بخش‌های غیرضروری، و انجام پردازش‌های سفارشی روی فریم‌های ویدئویی را فراهم می‌کند.

دسته بندی: برچسب ها: