# [FFmpeg] OpenCL 過濾器 若要使用 OpenCL 過濾器,必須先使用 `-init_hw_device` 選項初始化一個新的 OpenCL 類型的硬體裝置並命名一個名稱,然後將此名稱作為 `-filter_hw_device` 選項的引數,即將該裝置傳遞給過濾器流程圖內的所有過濾器。 初始化一個新的 OpenCL 類型的硬體裝置並命名為 `name` 並傳遞給過濾器流程圖內的所有過濾器: ```text -init_hw_device opencl=name -filter_hw_device name ``` 承上,選擇使用第二個平台上的第一個裝置: ```text -init_hw_device opencl=name:1.0 -filter_hw_device name ``` > 既然使用了硬體加速過濾器,也別忘了加入 `-hwaccel` 選項以使用硬體加速解碼器,再進一步減少 CPU 的壓力。 由於 OpenCL 過濾器無法正常存取系統記憶體,必須先使用 `hwupload` 過濾器將影格資料上傳到硬體表面連接合適裝置,之後再以 `hwdownload` 過濾器下載硬體影格資料回系統記憶體。 `hwupload` 過濾器將上傳一個與軟體影格相同的布局至硬體表面,因此可能需要再這之前使用 `format` 過濾器將輸出轉換成正確的格式。且 `hwdownload` 過濾器不支援所有的格式輸出,在它之後接著 `format` 過濾器,以藉此獲得輸出的支援格式。 ```text format=yuv420p,hwupload,nlmeans_opencl,hwdownload,format=yuv420p ``` **範例:** 使用 `nlmeans_opencl` 過濾器與並應用預設值去噪點: ```powershell ffmpeg -init_hw_device opencl=gpu -filter_hw_device gpu -hwaccel dxva2 -i input.mp4 -vf "format=yuv420p,hwupload,nlmeans_opencl,hwdownload,format=yuv420p" -c:v libx264 output.mp4 ``` ###### tags: `ffmpeg`