# معالج الفيديو

يُعدّ **معالج الفيديو** أداة مسؤولة عن تجهيز ميزات الإدخال لنماذج الفيديو، فضلاً عن معالجة مخرجاتها بعد المعالجة. يوفر تحويلات مثل تغيير الحجم، والتطبيع، والتحويل إلى PyTorch. وإلى جانب التحويلات، تتولى فئة `VideoProcessor` فك ترميز الفيديو من المسارات المحلية أو عناوين URL (يتطلب [`torchcodec`](https://pypi.org/project/torchcodec/)) وعيّنة الإطارات وفقاً لاستراتيجيات محددة لكل نموذج.

يمدّد معالج الفيديو وظائف معالجات الصور من خلال تمكين نماذج اللغة البصرية الكبيرة (VLMs) من التعامل مع مقاطع الفيديو باستخدام مجموعة مميزة من الحجج مقارنةً بالصور. ويعمل هذا المعالج كجسر بين بيانات الفيديو الخام والنموذج، مما يضمن تحسين ميزات الإدخال لتناسب نموذج VLM.

تُحفظ إعدادات معالج الفيديو في `video_preprocessor_config.json`. قد تُخزَّن هذه الإعدادات في نقاط التفتيش الأقدم داخل `preprocessor_config.json`. راجع [الحفظ وإعادة التحميل](#save-and-reload) لمعرفة كيفية تسجيل الخلفية المخصصة عند إعادة التحميل.

## مثال على الاستخدام

فيما يلي مثال على كيفية تحميل معالج فيديو مع نموذج [`llava-hf/llava-onevision-qwen2-0.5b-ov-hf`](https://huggingface.co/llava-hf/llava-onevision-qwen2-0.5b-ov-hf):

```python
from transformers import AutoVideoProcessor

processor = AutoVideoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf")
```

تُنفَّذ المعالجة المسبقة على جهاز مُدخلات المصفوفة (tensor)، أو على وحدة المعالجة المركزية (CPU) للمدخلات الأخرى. اضبط `device` لنقل مقاطع الفيديو إلى جهاز آخر قبل المعالجة المسبقة؛ وهذا لا يغيّر الخلفية (backend). كما يمكنك تجميع (compile) معالجة torchvision المسبقة باستخدام `torch.compile` عند استخدام مُسرِّع (accelerator).

```python
import torch
from transformers.video_utils import load_video
from transformers import AutoVideoProcessor

device = torch.accelerator.current_accelerator().type if torch.accelerator.is_available() else "cpu"

video = load_video("video.mp4")
processor = AutoVideoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf", device=device)
processor = torch.compile(processor)
processed_video = processor(video, return_tensors="pt")
```

## واجهات المعالج الخلفي للفيديو

تستخدم معالجات الفيديو المدمجة [torchvision](https://pytorch.org/vision/stable/index.html) لتغيير حجم الدُفعات، وإعادة التحجيم، والتطبيع. ثبّت PyTorch وtorchvision لاستخدامها. على عكس معالجات الصور، لا توفر معالجات الفيديو المدمجة واجهة خلفية PIL.

يختار [AutoVideoProcessor](/docs/transformers/main/ar/model_doc/auto#transformers.AutoVideoProcessor) واجهة `torchvision` افتراضياً. يمكنك أيضاً طلبها صراحةً وفحص خاصية `backend` للمعالج المحمّل.

```python
from transformers import AutoVideoProcessor

model_id = "llava-hf/llava-onevision-qwen2-0.5b-ov-hf"
video_processor = AutoVideoProcessor.from_pretrained(model_id, backend="torchvision")
print(video_processor.backend)
# torchvision
```

يحدد الحُجّة `backend` تطبيق المعالجة المسبقة، وليس مُفكِّك الفيديو. راجع [سلوك العيّنة](#sampling-behavior) للتعرف على فك الترميز وعيّنة الإطارات.

### واجهات خلفية مخصصة

يوفر [BaseVideoProcessor](/docs/transformers/main/ar/main_classes/video_processor#transformers.BaseVideoProcessor) معالجة مسبقة مبنية على torchvision. أما للحصول على تنفيذ غير مبنٍ على torchvision، فيمكنك إنشاء فئة فرعية من [VideoProcessorMixin](/docs/transformers/main/ar/main_classes/video_processor#transformers.VideoProcessorMixin) وإعادة تعريف `preprocess` لتُرجع [BatchFeature](/docs/transformers/main/ar/main_classes/feature_extractor#transformers.BatchFeature) تحتوي على المدخلات المتوقعة من النموذج.

سجّل الفئات المخصصة باستخدام [AutoVideoProcessor.register()](/docs/transformers/main/ar/model_doc/auto#transformers.AutoVideoProcessor.register)، واستخدم `video_processor_classes` لربط أسماء الخوادم الخلفية بالفئات. يفترض المثال أدناه أن `NewCustomVideoProcessor` معرّفة مع المعالجة المسبقة المطلوبة لنقطة التفتيش LLaVA-OneVision.

```python
from transformers import LlavaOnevisionConfig

AutoVideoProcessor.register(
    LlavaOnevisionConfig,
    video_processor_classes={"custom": NewCustomVideoProcessor},
    exist_ok=True,
)
custom_processor = AutoVideoProcessor.from_pretrained(model_id, backend="custom")
```

استخدم `exist_ok=True` لأن `LlavaOnevisionConfig` مسجّل بالفعل. يتم دمج الإدخالات المُقدَّمة في خريطة الخلفية الخاصة به حيث تُستبدل الأسماء المطابقة، وتُحفظ الإدخالات غير المُقدَّمة، مثل `torchvision`.

### الحفظ وإعادة التحميل

يحفظ [save_pretrained()](/docs/transformers/main/ar/main_classes/video_processor#transformers.VideoProcessorMixin.save_pretrained) إعدادات المعالجة المسبقة، وليس خرائط الخلفية المضافة عبر [AutoVideoProcessor.register()](/docs/transformers/main/ar/model_doc/auto#transformers.AutoVideoProcessor.register). في نفس عملية بايثون، أعد تحميل المعالج المحفوظ باستخدام `backend="custom"`:

```python
custom_processor.save_pretrained("./saved-video-processor")
custom_processor = AutoVideoProcessor.from_pretrained("./saved-video-processor", backend="custom")
```

تُطبَّق التسجيلات المخصصة على عملية بايثون الحالية. في عملية جديدة، عرِّف الفئة المخصصة أو استوردها وسجِّلها مرة أخرى قبل التحميل.

## سلوك العينة

يمكن لمعالج الفيديو أيضًا أخذ عينات من إطارات الفيديو باستخدام التقنية الأنسب للنموذج المعطى. يتم التحكم في سلوك أخذ العينات عبر الحجة `do_sample_frames` ويمكن ضبطه من خلال معاملات خاصة بالنموذج مثل `num_frames` أو `fps` (المعدل الذي سيتم به أخذ عينات من الفيديو). إذا كان الفيديو المُدخل مُعطىً كمسار محلي أو رابط (`str`)، فسيقوم المعالج بفك ترميزه تلقائيًا. للحصول على بيانات وصفية عن الفيديو المُفكك الترميز، مثل فهارس الإطارات المُختارة، والأبعاد الأصلية، والمدة، ومعدل الإطارات في الثانية، مرّر `return_metadata=True` إلى المعالج.

- لا يضمن تحديد `num_frames` أن يحتوي المخرَج على ذلك العدد بالضبط من الإطارات. فاعتماداً على النموذج، قد يفرض المُعيّن حدوداً دنيا أو قصوى لعدد الإطارات.

- المفكك الافتراضي هو [`torchcodec`](https://pypi.org/project/torchcodec/)، ويجب تثبيته.

```python
import torch
from transformers import AutoVideoProcessor

device = torch.accelerator.current_accelerator().type if torch.accelerator.is_available() else "cpu"

processor = AutoVideoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf", device=device)
processed_video_inputs = processor(videos=["video_path.mp4"], return_metadata=True, do_sample_frames=True, return_tensors="pt")
video_metadata = processed_video_inputs["video_metadata"]

# See how many frames the original video had and what was the original FPS
print(video_metadata.total_num_frames, video_metadata.fps)
```

إذا مررت مصفوفة فيديو مفكوكة الترميز مسبقًا لكنك ما زلت ترغب في تفعيل أخذ عينات الإطارات المحدد للنموذج، فيُنصح بشدة بتوفير video_metadata. يتيح ذلك لأداة أخذ العينات معرفة مدة الفيديو الأصلية ومعدل الإطارات في الثانية (FPS). يمكنك تمرير البيانات الوصفية ككائن `VideoMetadata` أو كمعجم (dict) عادي.

```python
import torch
from transformers import AutoVideoProcessor
from transformers.video_utils import VideoMetadata

device = torch.accelerator.current_accelerator().type if torch.accelerator.is_available() else "cpu"

processor = AutoVideoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf", device=device)
decoded_video = torch.randint(0, 255, size=(100, 3, 1280, 1280)) # short video of 100 frames
video_metadata = VideoMetadata(
    total_num_frames=100,
    fps=24,
    duration=4.1, # in seconds
)
processed_video_inputs = processor(videos=[decoded_video], video_metadata=video_metadata, do_sample_frames=True, num_frames=10, return_tensors="pt")
print(processed_video_inputs.pixel_values_videos.shape)
[10, 3, 384, 384]
```

## VideoProcessorMixin[[transformers.VideoProcessorMixin]]

#### transformers.VideoProcessorMixin[[transformers.VideoProcessorMixin]]

```python
transformers.VideoProcessorMixin(**kwargs: *<class 'transformers.processing_utils.VideosKwargs'>)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/video_processing_utils.py#L76)

#### fetch_videos[[transformers.VideoProcessorMixin.fetch_videos]]

```python
fetch_videos(video_url_or_urls: str | list[str] | list[list[str]], sample_indices_fn = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/video_processing_utils.py#L559)

تحويل عنوان URL واحد أو قائمة من عناوين URL إلى كائنات `np.array` المقابلة.

إذا تم تمرير عنوان URL واحد، فسيكون القيمة المُعادَة كائنًا واحدًا. أما إذا تم تمرير قائمة، فسيتم إرجاع قائمة من الكائنات.

#### from_dict[[transformers.VideoProcessorMixin.from_dict]]

```python
from_dict(video_processor_dict: dict, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/video_processing_utils.py#L431)

**المعاملات:**

video_processor_dict (`dict[str, Any]`) : قاموس سيُستخدم لإنشاء كائن معالج الفيديو. يمكن الحصول على مثل هذا القاموس من نقطة تحقق مُدرَّبة مسبقًا بالاستفادة من طريقة `~video_processing_utils.VideoProcessorBase.to_dict`.

kwargs (`dict[str, Any]`) : معلمات إضافية يتم من خلالها تهيئة معالج الفيديو.

**يعيد:** `~video_processing_utils.VideoProcessorBase`

كائن معالج الفيديو المُثبَّت من تلك المعاملات.

يُحدِث نوعاً من `~video_processing_utils.VideoProcessorBase` من قاموس Python للمعاملات.

#### from_json_file[[transformers.VideoProcessorMixin.from_json_file]]

```python
from_json_file(json_file: str | os.PathLike)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/video_processing_utils.py#L514)

**المعاملات:**

json_file (`str` أو `os.PathLike`) : المسار إلى ملف JSON الذي يحتوي على المعلمات.

**يعيد:** معالج فيديو من النوع `~video_processing_utils.VideoProcessorBase`

كائن video_processor المُستخلص من ملف JSON ذلك.

يُشغّل معالج فيديو من النوع `~video_processing_utils.VideoProcessorBase` من المسار إلى ملف JSON يحتوي على المعلمات.

#### from_pretrained[[transformers.VideoProcessorMixin.from_pretrained]]

```python
from_pretrained(pretrained_model_name_or_path: str | os.PathLike, cache_dir: str | os.PathLike | None = None, force_download: bool = False, local_files_only: bool = False, token: str | bool | None = None, revision: str = 'main', **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/video_processing_utils.py#L142)

**المعاملات:**

pretrained_model_name_or_path (`str` أو `os.PathLike`) : يمكن أن يكون هذا: - نصًا، وهو *model id* لفيديو مُدرَّب مسبقًا مستضاف داخل مستودع نماذج على huggingface.co. - مسارًا إلى *directory* يحتوي على ملف معالج فيديو محفوظ باستخدام طريقة `~video_processing_utils.VideoProcessorBase.save_pretrained`، على سبيل المثال `./my_model_directory/`. - مسارًا إلى ملف *file* JSON لمعالج فيديو محفوظ، على سبيل المثال `./my_model_directory/video_preprocessor_config.json`.

cache_dir (`str` أو `os.PathLike`، *اختياري*) : المسار إلى مجلد يُخزَّن فيه معالج الفيديو النموذجي المُسبق التدريب الذي تم تنزيله إذا لم يُستخدم التخزين المؤقت القياسي.

force_download (`bool`، *اختياري*، الافتراضي `False`) : ما إذا كان يجب إجبار إعادة تنزيل ملفات معالج الفيديو وتجاوز النسخ المخزنة مؤقتًا في حال وجودها.

proxies (`dict[str, str]`، *اختياري*) : قاموس لخوادم الوكيل (proxy servers) للاستخدام حسب البروتوكول أو نقطة النهاية، على سبيل المثال `{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}.` تُستخدم هذه الوكلاء في كل طلب.

token (`str` أو `bool`، *اختياري*) : الرمز الذي يُستخدم كرمز تفويض HTTP bearer للملفات البعيدة. إذا كان `True`، أو لم يُحدد، فسيتم استخدام الرمز الذي تم إنشاؤه عند تشغيل `hf auth login` (المخزَّن في `~/.huggingface`).

revision (`str`، *اختياري*، القيمة الافتراضية `"main"`) : إصدار النموذج المحدد الذي سيتم استخدامه. يمكن أن يكون اسم فرع، أو اسم وسم، أو معرّف التزامن، نظرًا لأننا نستخدم نظامًا قائمًا على git لتخزين النماذج والمخرجات الأخرى على huggingface.co، لذا يمكن أن يكون `revision` أي معرّف مسموح به بواسطة git.     لاختبار طلب دمج قمت بإنشائه على Hub، يمكنك تمرير `revision="refs/pr/<pr_number>"`.

return_unused_kwargs (`bool`، *اختياري*، القيمة الافتراضية `False`) : إذا كانت `False`، فإن هذه الدالة تُرجع كائن معالج الفيديو النهائي فقط. أما إذا كانت `True`، فإن هذه الدالة تُرجع `Tuple(video_processor, unused_kwargs)` حيث *unused_kwargs* هو قاموس يتكوّن من أزواج المفاتيح والقيم التي لا تُعدّ مفاتيحها من سمات معالج الفيديو؛ أي الجزء من `kwargs` الذي لم يُستخدم لتحديث `video_processor` ويُتجاهل في حال عدم استخدامه.

subfolder (`str`، *اختياري*، القيمة الافتراضية `""`) : في حال كانت الملفات ذات الصلة موجودة داخل مجلد فرعي من مستودع النموذج على huggingface.co، يمكنك تحديد اسم المجلد هنا.

kwargs (`dict[str, Any]`، *اختياري*) : القيم الموجودة في kwargs لأي مفاتيح تكون من سمات معالج الفيديو ستُستخدم لتجاوز القيم المحمّلة. أما السلوك المتعلق بالأزواج المفتاح/قيمة التي مفاتيحها *ليست* من سمات معالج الفيديو، فيتحكم به معامل الكلمة المفتاحية `return_unused_kwargs`.

**يعيد:**

معالج فيديو من النوع `~video_processing_utils.ImagVideoProcessorBase`.

أنشئ كائنًا من نوع `~video_processing_utils.VideoProcessorBase` من معالج فيديو.

أمثلة:

```python
# We can't instantiate directly the base class *VideoProcessorBase* so let's show the examples on a
# derived class: *LlavaOnevisionVideoProcessor*
video_processor = LlavaOnevisionVideoProcessor.from_pretrained(
    "llava-hf/llava-onevision-qwen2-0.5b-ov-hf"
)  # Download video_processing_config from huggingface.co and cache.
video_processor = LlavaOnevisionVideoProcessor.from_pretrained(
    "./test/saved_model/"
)  # E.g. video processor (or model) was saved using *save_pretrained('./test/saved_model/')*
video_processor = LlavaOnevisionVideoProcessor.from_pretrained("./test/saved_model/video_preprocessor_config.json")
video_processor = LlavaOnevisionVideoProcessor.from_pretrained(
    "llava-hf/llava-onevision-qwen2-0.5b-ov-hf", do_normalize=False, foo=False
)
assert video_processor.do_normalize is False
video_processor, unused_kwargs = LlavaOnevisionVideoProcessor.from_pretrained(
    "llava-hf/llava-onevision-qwen2-0.5b-ov-hf", do_normalize=False, foo=False, return_unused_kwargs=True
)
assert video_processor.do_normalize is False
assert unused_kwargs == {"foo": False}
```

#### get_video_processor_dict[[transformers.VideoProcessorMixin.get_video_processor_dict]]

```python
get_video_processor_dict(pretrained_model_name_or_path: str | os.PathLike, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/video_processing_utils.py#L296)

**المعاملات:**

pretrained_model_name_or_path (`str` أو `os.PathLike`) : المعرّف للنقطة الفاحصة المُدرَّبة مسبقًا التي نرغب في الحصول على قاموس المعلمات منها.

subfolder (`str`، *اختياري*، القيمة الافتراضية `""`) : في حال كانت الملفات ذات الصلة موجودة داخل مجلد فرعي من مستودع النموذج على huggingface.co، يمكنك تحديد اسم المجلد هنا.

**يعيد:** `tuple[Dict, Dict]`

المعجم(ات) الذي سيتم استخدامه لإنشاء كائن معالج الفيديو.

من `pretrained_model_name_or_path`، يتم التحويل إلى قاموس من المعلمات، ليُستخدم في إنشاء معالج فيديو من النوع `~video_processing_utils.VideoProcessorBase` باستخدام `from_dict`.

#### preprocess[[transformers.VideoProcessorMixin.preprocess]]

```python
preprocess(videos: typing.Union[list['PIL.Image.Image'], numpy.ndarray, ForwardRef('torch.Tensor'), list[numpy.ndarray], list['torch.Tensor'], list[list['PIL.Image.Image']], list[list[numpy.ndarray]], list[list['torch.Tensor']], transformers.video_utils.URL, list[transformers.video_utils.URL], list[list[transformers.video_utils.URL]], transformers.video_utils.Path, list[transformers.video_utils.Path], list[list[transformers.video_utils.Path]]], **kwargs: *<class 'transformers.processing_utils.VideosKwargs'>)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/video_processing_utils.py#L98)

**المعاملات:**

videos (`Union[list[PIL.Image.Image], numpy.ndarray, torch.Tensor, list[numpy.ndarray], list[torch.Tensor], list[list[PIL.Image.Image]], list[list[numpy.ndarray]], list[list[torch.Tensor]], ~video_utils.URL, list[~video_utils.URL], list[list[~video_utils.URL]], ~video_utils.Path, list[~video_utils.Path], list[list[~video_utils.Path]]]`) : الفيديو الذي سيتم معالجته مسبقًا. يتوقع إدخال فيديو واحد أو دفعة من الفيديوهات بقيم بكسل تتراوح بين 0 و255. إذا كنت تمرر فيديوهات بقيم بكسل بين 0 و1، فاضبط `do_rescale=False`.

do_convert_rgb (`bool`، *kwargs*، *اختياري*) : ما إذا كان يجب تحويل الصورة إلى RGB.

do_resize (`bool`، *kwargs*، *اختياري*) : ما إذا كان يجب تغيير حجم الصورة.

size (`Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None]`, *kwargs*) : يصف الأبعاد القصوى للمدخلات إلى النموذج.

default_to_square (`bool`، *kwargs*، *اختياري*) : ما إذا كان يجب افتراض صورة مربعة عند تغيير الحجم، إذا كان الحجم عددًا صحيحًا.

resample (`Annotated[Union[int, PILImageResampling, NoneType], None]`, *kwargs*) : مرشح إعادة العينة المستخدم عند تغيير حجم الصورة. يمكن أن يكون أحد قيم enum `PILImageResampling`. لا يؤثر إلا إذا كان `do_resize` مضبوطاً على `True`.

do_rescale (`bool`، *kwargs*، *اختياري*) : ما إذا كان يجب إعادة تحجيم الصورة.

rescale_factor (`float`، *kwargs*، *اختياري*) : معامل إعادة التحجيم لإعادة تحجيم الصورة إذا كان `do_rescale` مضبوطًا على `True`.

do_normalize (`bool`، *kwargs*، *اختياري*) : ما إذا كان يجب تطبيع الصورة.

image_mean (`Union[float, list[float], tuple[float, ...]]`، *kwargs*، *اختياري*) : متوسط الصورة المستخدم للتطبيع. لا يكون له أي تأثير إلا إذا تم تعيين `do_normalize` إلى `True`.

image_std (`Union[float, list[float], tuple[float, ...]]`، *kwargs*، *اختياري*) : الانحراف المعياري للصورة المستخدم للتطبيع. لا يكون له أي تأثير إلا إذا تم تعيين `do_normalize` إلى `True`.

do_center_crop (`bool`، *kwargs*، *اختياري*) : ما إذا كان يجب قص الصورة من المنتصف.

do_pad (`bool`، *kwargs*، *اختياري*) : ما إذا كان يجب إضافة حشوة إلى الصورة. يتم تنفيذ الحشوة إما إلى أكبر حجم في الدفعة أو إلى حجم مربع ثابت لكل صورة. تعتمد استراتيجية الحشوة الدقيقة على النموذج.

crop_size (`Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None]`، *kwargs*) : حجم الصورة الناتجة بعد تطبيق `center_crop`.

data_format (`Union[str, ~image_utils.ChannelDimension]`، *kwargs*، *اختياري*) : يُدعم `ChannelDimension.FIRST` فقط. أُضيف من أجل التوافق مع المعالجات البطيئة.

input_data_format (`Union[str, ~image_utils.ChannelDimension]`، *kwargs*، *اختياري*) : تنسيق بُعد القناة للصورة المدخلة. إذا لم يتم ضبطه، يُستنتج تنسيق بُعد القناة من الصورة المدخلة. يمكن أن يكون أحد ما يلي: - `"channels_first"` أو `ChannelDimension.FIRST`: صورة بتنسيق (num_channels, height, width). - `"channels_last"` أو `ChannelDimension.LAST`: صورة بتنسيق (height, width, num_channels). - `"none"` أو `ChannelDimension.NONE`: صورة بتنسيق (height, width).

device (`Annotated[Union[str, torch.device, NoneType], None]`, *kwargs*) : الجهاز الذي تتم عليه معالجة مقاطع الفيديو. إذا لم يتم ضبطه، يُستنتج الجهاز من مقاطع الفيديو المدخلة.

do_sample_frames (`bool`، *kwargs*، *اختياري*) : ما إذا كان سيتم أخذ عينات من الإطارات من الفيديو قبل المعالجة أم معالجة الفيديو بالكامل.

video_metadata (`Annotated[~video_utils.VideoMetadata | dict | list[dict | ~video_utils.VideoMetadata] | list[list[dict | ~video_utils.VideoMetadata]] | None, None]`, *kwargs*) : بيانات وصفية للفيديو تتضمن معلومات عن المدة الإجمالية، ومعدل الإطارات في الثانية (fps)، وإجمالي عدد الإطارات. تُستخدم هذه البيانات لاختيار إطارات من الفيديو أو لحساب الطوابع الزمنية. لا تقم بتمرير أي بيانات وصفية إلا إذا كنت تحاول فك ترميز الفيديو يدوياً قبل المعالجة.

fps (`Annotated[int | float | None, None]`، *kwargs*) : عدد الإطارات المستهدفة التي يجب أخذ عينات منها في الثانية الواحدة عندما يكون `do_sample_frames=True`.

num_frames (`Annotated[int | None, None]`، *kwargs*) : الحد الأقصى لعدد الإطارات التي يجب أخذها كعينة عند تعيين `do_sample_frames=True`.

return_metadata (`bool`، *kwargs*، *اختياري*) : ما إذا كان يجب إرجاع بيانات وصفية للفيديو أم لا. بيانات الوصفية للفيديو هي كائن يحتوي على معلومات حول مدة الفيديو، ومعدل الإطارات، وخلفية فك الترميز، وما إلى ذلك.

return_tensors (`Annotated[str | ~utils.generic.TensorType | None, None]`, *kwargs*) : تُرجع توتنرات مكدّسة إذا كان الإعداد `'pt'`، وإلا تُرجع قائمة من التوتنرات.

**يعيد:** `~image_processing_base.BatchFeature`

- **data** (`dict`) -- قاموس من القوائم/المصفوفات/الموترات التي يعيدها أسلوب __call__ ('pixel_values'، وما إلى ذلك).
- **tensor_type** (`Union[None, str, TensorType]`، *اختياري*) -- يمكنك تحديد tensor_type هنا لتحويل قوائم الأعداد الصحيحة إلى تينسورات PyTorch/Numpy عند التهيئة.

#### register_for_auto_class[[transformers.VideoProcessorMixin.register_for_auto_class]]

```python
register_for_auto_class(auto_class = 'AutoVideoProcessor')
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/video_processing_utils.py#L533)

**المعاملات:**

auto_class (`str` أو `type`، *اختياري*، القيمة الافتراضية `"AutoVideoProcessor "`) : فئة auto التي سيتم تسجيل هذا المعالج الجديد للفيديو بها.

سجّل هذه الفئة مع فئة تلقائية محددة. يجب استخدام هذا فقط لمعالجات الفيديو المخصصة، لأن المعالجات الموجودة في المكتبة مُربط مسبقًا مع `AutoVideoProcessor `.

هذا الواجهة البرمجية تجريبية وقد تتضمن بعض التغييرات الطفيفة التي قد تكسر التوافق في الإصدارات القادمة.

#### save_pretrained[[transformers.VideoProcessorMixin.save_pretrained]]

```python
save_pretrained(save_directory: str | os.PathLike, push_to_hub: bool = False, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/video_processing_utils.py#L248)

**المعاملات:**

save_directory (`str` أو `os.PathLike`) : المجلد الذي سيُحفظ فيه ملف JSON الخاص بمعالج الفيديو (سيتم إنشاؤه إذا لم يكن موجودًا).

push_to_hub (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان سيتم دفع نموذجك إلى مستودع نماذج Hugging Face بعد حفظه. يمكنك تحديد المستودع الذي تريد الدفع إليه باستخدام `repo_id` (سيكون الافتراضي هو اسم `save_directory` ضمن نطاقك).

kwargs (`dict[str, Any]`، *اختياري*) : حُجج إضافية تُمرَّر إلى طريقة [push_to_hub()](/docs/transformers/main/ar/main_classes/model#transformers.utils.PushToHubMixin.push_to_hub).

احفظ كائن معالج الفيديو في المجلد `save_directory`، بحيث يمكن إعادة تحميله باستخدام طريقة الفئة `~video_processing_utils.VideoProcessorBase.from_pretrained`.

#### to_dict[[transformers.VideoProcessorMixin.to_dict]]

```python
to_dict()
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/video_processing_utils.py#L472)

**يعيد:** `dict[str, Any]`

قاموس بجميع السمات التي تُشكّل هذا المعالج الفيديوي.

يسلسل هذه النسخة إلى قاموس بايثون.

## BaseVideoProcessor[[transformers.BaseVideoProcessor]]

#### transformers.BaseVideoProcessor[[transformers.BaseVideoProcessor]]

```python
transformers.BaseVideoProcessor(**kwargs: *<class 'transformers.processing_utils.VideosKwargs'>)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/video_processing_utils.py#L587)

#### convert_to_rgb[[transformers.BaseVideoProcessor.convert_to_rgb]]

```python
convert_to_rgb(video: torch.Tensor)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/video_processing_utils.py#L588)

**المعاملات:**

video (`"torch.Tensor"`) : الفيديو المراد تحويله.

**يعيد:** `torch.Tensor`

الفيديو المحوّل.

يحوّل الفيديو إلى تنسيق RGB.

#### sample_frames[[transformers.BaseVideoProcessor.sample_frames]]

```python
sample_frames(metadata: VideoMetadata, num_frames: int | None = None, fps: int | float | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/video_processing_utils.py#L605)

**المعاملات:**

metadata (`VideoMetadata`) : بيانات وصفية للفيديو تتضمن معلومات حول المدة الإجمالية، ومعدل الإطارات في الثانية، وإجمالي عدد الإطارات.

num_frames (`int`، *اختياري*) : الحد الأقصى لعدد الإطارات التي يجب أخذ عينات منها. القيمة الافتراضية هي `self.num_frames`.

fps (`int` أو `float`، *اختياري*) : عدد الإطارات المستهدفة التي يجب أخذ عينات منها في الثانية. القيمة الافتراضية هي `self.fps`.

**يعيد:** `np.ndarray`

الفهارس التي تُستخدم لعينة إطارات الفيديو.

دالة العينة الافتراضية التي تعيّن عدد الإطارات المطلوب بشكل منتظم بين 0 والعدد الكلي للإطارات. إذا تم تمرير `fps` مع البيانات الوصفية، يتم أخذ `fps` إطارًا في الثانية بشكل منتظم. الحجتان `num_frames` و`fps` متنافيتان.

