版權(quán)聲明:本文為博主翻譯文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/Tosonw/article/details/90178195
原文鏈接:https://trac.ffmpeg.org/wiki/HWAccelIntro
一、FFmpeg:HWAccelIntro
原文(英文):https://trac.ffmpeg.org/wiki/HWAccelIntro
許多平臺(tái)提供對(duì)專用硬件的訪問(wèn),以執(zhí)行一系列與視頻相關(guān)的任務(wù)。使用這樣的硬件允許諸如解碼,編碼或過(guò)濾之類的一些操作更快地完成或使用更少的其他資源(特別是CPU),但是可能給出不同或較差的結(jié)果,或者施加僅在使用軟件時(shí)不存在的附加限制。在類似PC的平臺(tái)上,視頻硬件通常集成到GPU(來(lái)自AMD,Intel或NVIDIA),而在移動(dòng)SoC類型平臺(tái)上,它通常是獨(dú)立的IP核(許多不同的供應(yīng)商)。
硬件解碼器將為軟件解碼器生成等效輸出,但可以使用更少的功率和CPU來(lái)實(shí)現(xiàn)。功能支持各不相同 - 對(duì)于具有許多不同配置文件的更復(fù)雜的編解碼器,硬件解碼器很少實(shí)現(xiàn)所有這些(例如,硬件解碼器往往不會(huì)在H.264的8位深度處實(shí)現(xiàn)YUV 4:2:0以外的任何內(nèi)容)。許多硬件解碼器的一個(gè)共同特點(diǎn)是能夠在適合其他組件使用的硬件表面中生成輸出(使用獨(dú)立顯卡,這意味著卡片內(nèi)存中的表面而非系統(tǒng)內(nèi)存中的表面) - 這通常對(duì)回放很有用因?yàn)樵阡秩据敵鲋安恍枰M(jìn)一步復(fù)制,并且在某些情況下它也可以與支持硬件表面輸入的編碼器一起使用,以避免在轉(zhuǎn)碼情況下進(jìn)行任何復(fù)制。
硬件編碼器通常生成的輸出質(zhì)量明顯低于x264等軟件編碼器,但通常速度更快,CPU資源也不多。(也就是說(shuō),它們需要更高的比特率來(lái)使輸出具有相同的感知質(zhì)量,或者它們以相同的比特率以較低的感知質(zhì)量進(jìn)行輸出。)
具有解碼和/或編碼能力的系統(tǒng)還可以提供對(duì)其他相關(guān)過(guò)濾特征的訪問(wèn)??s放和逐行掃描等常見的事情,其他后處理可能取決于系統(tǒng)。在硬件表面可用的情況下,這些過(guò)濾器通常會(huì)作用于它們而不是系統(tǒng)存儲(chǔ)器中的普通幀。
有許多不同的標(biāo)準(zhǔn)化狀態(tài)的API可供使用。FFmpeg提供對(duì)其中許多的訪問(wèn),并提供不同的支持。
1.平臺(tái)API可用性
2.FFmpeg API實(shí)現(xiàn)狀態(tài)
與ffmpeg命令行工具一起使用
內(nèi)部hwaccel解碼器通過(guò)-hwaccel選項(xiàng)啟用。軟件解碼器正常啟動(dòng),但如果它檢測(cè)到可在硬件中解碼的流,則它將嘗試將所有重要處理委托給該硬件。如果流在硬件中不可解碼(例如,它是不受支持的編解碼器或配置文件),則它仍將自動(dòng)在軟件中解碼。如果硬件需要特定設(shè)備才能運(yùn)行(或需要區(qū)分多個(gè)設(shè)備,例如是否有多個(gè)圖形卡可用),則可以使用-hwaccel_device選擇一個(gè)。
通過(guò)使用-codec:v選項(xiàng)設(shè)置特定解碼器來(lái)使用外部包裝解碼器。通常它們被命名為codec_api(例如:h264_cuvid)。這些解碼器需要事先知道編解碼器,如果不支持流,則不支持任何軟件回退。
編碼器包裝器由-codec:v選擇。編碼器通常有很多選項(xiàng) - 有關(guān)詳細(xì)信息,請(qǐng)查看特定編碼器的文檔。
硬件過(guò)濾器可以像任何其他過(guò)濾器一樣用在過(guò)濾器圖形中。但請(qǐng)注意,它們可能不支持與軟件過(guò)濾器相同的任何格式 - 在這種情況下,可能需要使用hwupload和hwdownload過(guò)濾器實(shí)例在硬件表面和普通內(nèi)存之間移動(dòng)幀數(shù)據(jù)。
3.VDPAU
https://http.download.nvidia.com/XFree86/vdpau/doxygen/html/index.html
視頻解碼和演示API為Unix。由NVIDIA開發(fā)的Unix / Linux系統(tǒng)。要啟用此功能,您通常需要分發(fā)中的 libvdpau開發(fā)包和兼容的圖形卡。
注意,VDPAU不能用于解碼內(nèi)存中的幀,壓縮幀由libavcodec發(fā)送到VDPAU支持的GPU設(shè)備,然后可以使用VDPAU API訪問(wèn)解碼圖像。這不是由FFmpeg的自動(dòng)完成的,但必須在應(yīng)用程序級(jí)別(檢查例如做ffmpeg_vdpau.c通過(guò)使用文件ffmpeg.c)。此外,請(qǐng)注意,使用此API無(wú)法將解碼后的幀移回RAM,例如,如果您需要再次對(duì)解碼幀進(jìn)行編碼(例如,在服務(wù)器上進(jìn)行轉(zhuǎn)碼時(shí))。
目前通過(guò)libavcodec中的VDPAU支持幾個(gè)解碼器,特別是H.264,MPEG-1/2/4和VC-1。
4.VAAPI
https://trac.ffmpeg.org/wiki/Hardware/VAAPI
視頻加速API(VAAPI)是一種非專有且免版稅的開源軟件庫(kù)(“l(fā)ibva”)和API規(guī)范,最初由Intel開發(fā),但可與其他設(shè)備結(jié)合使用。
它可用于訪問(wèn)Intel GPU中的Quick Sync硬件和AMD GPU中的UVD / VCE硬件。見VAAPI。
5.DXVA2
https://msdn.microsoft.com/en-us/library/windows/desktop/cc307941(v=vs.85).aspx
直接-X視頻加速API,由微軟開發(fā)的(支持Windows和Xbox360)。
目前支持幾種解碼器,特別是H.264,MPEG-2,VC-1和WMV 3。
DXVA2硬件加速僅適用于Windows。為了構(gòu)建支持DXVA2的FFmpeg,您需要安裝dxva2api.h頭文件。對(duì)于MinGW的,這可以通過(guò)進(jìn)行下載由VLC保持頭和(在例如在包括補(bǔ)丁安裝它的/ usr /包括/)。
對(duì)于MinGW64,默認(rèn)提供dxva2api.h。安裝mingw-w64的一種方法是通過(guò)pacman存儲(chǔ)庫(kù),可以使用以下兩個(gè)命令之一安裝,具體取決于體系結(jié)構(gòu):
pacman -S mingw-w64-i686-gcc pacman -S mingw-w64-x86_64-gcc12
要啟用DXVA2,請(qǐng)使用–enable-dxva2 ffmpeg配置開關(guān)。
要測(cè)試解碼,請(qǐng)使用以下命令:
ffmpeg -hwaccel dxva2 -threads 1 -i INPUT -f null - -benchmark1
6.VideoToolbox
https://developer.apple.com/documentation/videotoolbox
VideoToolbox,只支持在MacOS。H.264解碼在FFmpeg / libavcodec中可用。
7.NVENC / NVDEC
NVENC和NVDEC是NVIDIA的硬件加速編碼和解碼API。他們?cè)?jīng)被稱為CUVID。它們可用于Windows和Linux上的編碼和解碼。
NVENC
NVENC可用于H.264和HEVC編碼。FFmpeg通過(guò)h264_nvenc和hevc_nvenc編碼器支持NVENC 。要在FFmpeg中啟用它,您需要:
一個(gè)支持GPU
支持您的操作系統(tǒng)的驅(qū)動(dòng)程序
在NVIDIA編解碼器SDK
ffmpeg使用–enable-nvenc配置(如果在配置時(shí)檢測(cè)到驅(qū)動(dòng)程序,則為默認(rèn)值)
注意: FFmpeg對(duì)NVIDIA的CUDA / NVENC /
NVDEC相關(guān)庫(kù)使用自己稍微修改過(guò)的運(yùn)行時(shí)加載程序。如果你從一個(gè)錯(cuò)誤配置抱怨缺少ffnvcodec,這個(gè)項(xiàng)目是你所需要的。它有一個(gè)帶有安裝目標(biāo)的工作Makefile:make
install PREFIX = / usr。FFmpeg將查找名為ffnvcodec.pc的
pkg-config文件。確保它在PKG_CONFIG_PATH中。
這意味著在編譯ffmpeg之前運(yùn)行以下內(nèi)容應(yīng)該足夠了:
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git cd nv-codec-headers sudo make sudo make install1234
編譯后,您可以使用NVENC。
用法示例:
ffmpeg -i input -c:v h264_nvenc -profile high444p -pixel_format yuv444p -preset default output.mp41
您可以使用ffmpeg -h encoder = h264_nvenc或ffmpeg -h encoder = hevc_nvenc查看可用的預(yù)設(shè),其他選項(xiàng)和編碼器信息。
注意:如果您發(fā)現(xiàn)無(wú)NVENC功能設(shè)備錯(cuò)誤,請(qǐng)確保您使用支持的像素格式進(jìn)行編碼。請(qǐng)參閱上面顯示的編碼器信息。
NVDEC / CUVID
NVDEC為H.264,HEVC,MJPEG,MPEG-1/2/4,VP8 / VP9,VC-1提供解碼器。編解碼器支持硬件變化(見GPU兼容性表)。
請(qǐng)注意,F(xiàn)Fmpeg提供NVDEC和CUVID hwaccel。它們?cè)趲腥绾谓獯a和轉(zhuǎn)發(fā)在內(nèi)存中有所不同。
全套編解碼器僅在Pascal硬件上可用,它增加了VP9和10位支持。關(guān)于NVENC缺少ffnvcodec的說(shuō)明也適用于NVDEC。
使用NVDEC進(jìn)行樣本解碼:
ffmpeg -hwaccel nvdec input output1
使用CUVID進(jìn)行樣本解碼:
./ffmpeg-git -hwaccel cuvid -c:v h264_cuvid -i input output1
CUVID和NVENC的全硬件轉(zhuǎn)碼:
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input -c:v h264_nvenc -preset slow output1
如果編譯了ffmpeg并支持libnpp,則可以使用它將基于GPU的縮放器插入到鏈中:
ffmpeg -hwaccel_device 0 -hwaccel cuvid -i input -vf scale_npp=-1:720 -c:v h264_nvenc -preset slow output.mkv1
該-hwaccel_device選項(xiàng)可用于指定要通過(guò)的ffmpeg的hwaccel的使用的GPU。
8.libmfx
libmfx是英特爾的專有庫(kù),用于在Linux和Windows上使用Quick Sync硬件。在Windows上,除了可通過(guò)DXVA2 / D3D11VA訪問(wèn)的功能外,它是使用更高級(jí)功能的主要方式,特別是編碼。在Linux上,它具有非常有限的功能集并且難以使用,但對(duì)于某些需要最大吞吐量的用例可能會(huì)有所幫助。
9.OpenCL
原文(英文):https://www.khronos.org/opencl/
OpenCL的可用于多個(gè)濾波器。要構(gòu)建,需要OpenCL 1.2或更高版本的頭文件以及要鏈接到的ICD或ICD加載器 -
建議(但不要求)與ICD加載器鏈接,以便可以在運(yùn)行時(shí)選擇實(shí)現(xiàn),而不是建立時(shí)間。在運(yùn)行時(shí),需要一個(gè)OpenCL 1.2驅(qū)動(dòng)程序 -
大多數(shù)GPU制造商將提供一個(gè)作為其標(biāo)準(zhǔn)驅(qū)動(dòng)程序的一部分。CPU實(shí)現(xiàn)也可以使用,但可能比直接在ffmpeg中使用本機(jī)過(guò)濾器慢。
OpenCL可以與其他GPU API互操作,以避免GPU和CPU內(nèi)存之間的冗余副本。支持的方法是:
DXVA2:僅適用于所有平臺(tái)的NV12表面。
D3D11:僅限Intel上的NV12紋理。
VAAPI:所有表面類型。
ARM Mali:所有表面類型,通過(guò)DRM對(duì)象共享。
libmfx:僅通過(guò)VAAPI或DXVA2的NV12表面。
10.AMD UVD / VCE
AMD UVD可用于通過(guò)Linux上的Mesa中的VDPAU和VAAPI進(jìn)行解碼。VCE也通過(guò)VAAPI對(duì)編碼有一些初步支持,但應(yīng)該被認(rèn)為是實(shí)驗(yàn)性的。
在Windows上,UVD可通過(guò)標(biāo)準(zhǔn)DXVA2 / D3D11VA API訪問(wèn),而VCE則通過(guò)AMF支持。
11.外部資源
multimedia.cx:如何玩硬件加速視頻在Mac:https://multimedia.cx/eggs/mac-hwaccel-video/
libav用戶:硬件加速解碼:https://lists.ffmpeg.org/pipermail/libav-user/2013-September/005463.html
堆棧溢出:如何使用硬件加速與ffmpeg的:https://stackoverflow.com/questions/23289157/how-to-use-hardware-acceleration-with-ffmpeg
二、硬件:VAAPI
原文(英文):https://trac.ffmpeg.org/wiki/Hardware/VAAPI
1.平臺(tái)支持
Intel / i965
請(qǐng)參閱QuickSync:https://trac.ffmpeg.org/wiki/Hardware/QuickSync
AMD / Mesa
Mesa VAAPI驅(qū)動(dòng)程序使用所有最新AMD顯卡和APU中的UVD(統(tǒng)一視頻解碼器)和VCE(視頻編碼引擎)硬件。
所有GCN GPU(自Southern Islands以來(lái))都支持H.264,MPEG-2,MPEG-4第2部分和VC-1解碼。GCN 3(火山島)和H.265 10位與GCN 4(北極群島)一起增加了H.265支持??赡苤С忠部赡懿恢С州^舊的GPU。
默認(rèn)情況下,由于VAAPI限制,MPEG-4第2部分被禁用(主要的英特爾驅(qū)動(dòng)程序從未實(shí)現(xiàn)它,所以它沒有得到太多測(cè)試)。將環(huán)境變量VAAPI_MPEG4_ENABLED設(shè)置為1,無(wú)論如何都要嘗試使用它。
H.264編碼正在使用GCN GPU,但仍然不完整。Mesa還沒有其他編解碼器支持編碼。
由于GPU內(nèi)存中的數(shù)據(jù)布局,Mesa中的編碼和隔行掃描支持是不兼容的。默認(rèn)情況下,幀被分隔為字段,并且支持隔行掃描視頻,但不支持編碼。將環(huán)境變量VAAPI_DISABLE_INTERLACE設(shè)置為1以便能夠使用編碼器(但沒有任何隔行視頻支持)。
2.設(shè)備選擇
需要將libva驅(qū)動(dòng)程序連接到DRM設(shè)備才能工作。這可以直接連接,也可以通過(guò)正在運(yùn)行的X服務(wù)器連接。在使用Standlone時(shí),通常最好使用DRM渲染節(jié)點(diǎn)(/ dev / dri / render *) - 如果您確實(shí)想要處理X內(nèi)的表面(例如,使用DRI2),則僅使用X連接。
在ffmpeg中,可以使用-init_hw_device選項(xiàng)創(chuàng)建命名的全局設(shè)備:
ffmpeg -init_hw_device vaapi=foo:/dev/dri/renderD1281
通過(guò)解碼hwaccel,可以使用-hwaccel_device選項(xiàng)為每個(gè)輸入流提供先前初始化的設(shè)備:
ffmpeg -init_hw_device vaapi=foo:/dev/dri/renderD128 -hwaccel vaapi -hwaccel_device foo -i ...1
如果只使用一個(gè)流,-hwaccel_device也可以直接接受設(shè)備路徑:
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -i ...1
如果過(guò)濾器需要設(shè)備(例如,hwupload過(guò)濾器),則可以使用-filter_hw_device選項(xiàng)指定過(guò)濾器圖中使用的設(shè)備:
ffmpeg -init_hw_device vaapi=foo:/dev/dri/renderD128 -i ... -filter_hw_device foo -filter_complex ...hwupload... ...1
如果您在同一臺(tái)計(jì)算機(jī)上有多個(gè)可用設(shè)備(例如,Intel集成GPU和AMD獨(dú)立顯卡),則可以同時(shí)使用它們來(lái)解碼不同的流:
ffmpeg -init_hw_device vaapi=intel:/dev/dri/renderD128 -init_hw_device vaapi=amd:/dev/dri/renderD129 -hwaccel vaapi -hwaccel_device intel -i ... -hwaccel vaapi -hwaccel_device amd -i ...1
(參見< http://www.ffmpeg.org/ffmpeg.html#toc-Advanced-Video-options >有關(guān)這些選項(xiàng)的更多細(xì)節(jié))。
最后,在帶有過(guò)濾器的單設(shè)備情況下,-vaapi_device選項(xiàng)可能更方便。
ffmpeg -vaapi_device /dev/dri/renderD1281
行為等同于:
ffmpeg -init_hw_device vaapi=vaapi0:/dev/dri/renderD128 -filter_hw_device vaapi01
3.Surface Formats
VAAPI使用的硬件編解碼器無(wú)法訪問(wèn)任意內(nèi)存中的幀數(shù)據(jù)。因此,在使用之前,需要將所有幀數(shù)據(jù)上載到連接到適當(dāng)設(shè)備的硬件表面。ffmpeg中的所有VAAPI硬件表面都由vaapi pixfmt 表示(但內(nèi)部布局在此處不可見)。
hwaccel解碼器通常以相關(guān)的硬件格式輸出幀,但默認(rèn)情況下,ffmpeg實(shí)用程序?qū)⑤敵鰩螺d到普通內(nèi)存,然后再將它們傳遞給下一個(gè)組件。這使得解碼器可以在沒有任何其他選項(xiàng)的情況下更快地進(jìn)行解碼:
ffmpeg -hwaccel vaapi ... -i input.mp4 -c:v libx264 ... output.mp41
對(duì)于其他輸出,選項(xiàng)-hwaccel_output_format可用于指定要使用的格式。這可以是軟件格式(格式可用,取決于驅(qū)動(dòng)程序),也可以是vaapi硬件格式,表示不應(yīng)下載表面。
例如,要僅解碼并對(duì)結(jié)果不執(zhí)行任何操作:
ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi ... -i input.mp4 -f null -1
這可以僅用于測(cè)試解碼器的速度/ CPU使用(下載操作通常會(huì)增加大量額外開銷)。
當(dāng)解碼器輸出位于硬件表面時(shí),幀將以該形式提供給后續(xù)濾波器或編碼器。該scale_vaapi和deinterlace_vaapi過(guò)濾器作用于VAAPI格式的畫面縮放和respecitvely隔行他們。也有一些通用的過(guò)濾器- hwdownload,hwupload和hwmap -支持所有硬件格式,包括VAAPI(參見< http://www.ffmpeg.org/ffmpeg-filters.html#hwdownload >)。
例如,采用隔行輸入,解碼,去隔行,縮放到720p,下載到普通內(nèi)存并使用libx264進(jìn)行編碼:
ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi ... -i interlaced_input.mp4 -vf 'deinterlace_vaapi,scale_vaapi=w=1280:h=720,hwdownload,format=nv12' -c:v libx264 ... progressive_output.mp41
4.編碼
編碼器僅接受輸入作為VAAPI表面。如果輸入在普通存儲(chǔ)器中,則需要在將幀提供給編碼器之前上載 - 在ffmpeg實(shí)用程序中,可以使用hwupload過(guò)濾器。它將上傳到與軟件框架布局相同的表面,因此可能需要在之前添加格式過(guò)濾器以使輸入格式正確(硬件通常需要nv12布局,但大多數(shù)軟件功能使用yuv420p)布局)。所述hwupload濾波器還需要一個(gè)設(shè)備上傳到,需要?jiǎng)?chuàng)建過(guò)濾器圖形之前被定義。
因此,要為某些輸入使用默認(rèn)解碼器,然后將幀上傳到VAAPI并使用H.264和默認(rèn)設(shè)置進(jìn)行編碼:
ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf 'format=nv12,hwupload' -c:v h264_vaapi output.mp41
如果已知輸入是硬件可解碼的,那么我們可以使用hwaccel:
ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device /dev/dri/renderD128 -i input.mp4 -c:v h264_vaapi output.mp41
最后,當(dāng)輸入可能是或不是硬件可解碼時(shí),我們可以這樣做:
ffmpeg -init_hw_device vaapi=foo:/dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device foo -i input.mp4 -filter_hw_device foo -vf 'format=nv12|vaapi,hwupload' -c:v h264_vaapi output.mp41
這是因?yàn)榻獯a器將輸出vaapi表面(如果hwaccel可用)或軟件幀(如果不可用)。在第一種情況下,它匹配vaapi格式,而hwupload什么都不做(它通過(guò)硬件幀不變)。在第二種情況下,它匹配nv12格式并將輸入轉(zhuǎn)換為該格式,然后上載。但是,根據(jù)選擇的路徑,性能可能會(huì)有很大的變化。
支持的編碼器是:
編碼 | API |
---|---|
H.262 / MPEG-2第2部分 | mpeg2_vaapi |
H.264 / MPEG-4第10部分(AVC) | h264_vaapi |
H.265 / MPEG-H第2部分(HEVC) | hevc_vaapi |
MJPEG / JPEG | mjpeg_vaapi |
VP8 | vp8_vaapi |
VP9 | vp9_vaapi |
對(duì)于編解碼器選項(xiàng)的說(shuō)明,請(qǐng)參見< http://www.ffmpeg.org/ffmpeg-codecs.html#VAAPI-encoders >。
5.從libx264映射選項(xiàng)
目前不支持類似CRF的模式。唯一的恒定質(zhì)量模式是CQP(恒定量化參數(shù)),其對(duì)場(chǎng)景內(nèi)容沒有適應(yīng)性。但是,它允許不同幀類型的不同質(zhì)量設(shè)置,通過(guò)在未引用的B幀上花費(fèi)更少的比特來(lái)改善壓縮 - 參見(i | b)_q(因子|偏移)選項(xiàng)。CQP模式不能與最大比特率或緩沖區(qū)大小組合。
支持CBR和VBR模式,但它們的輸出因驅(qū)動(dòng)器和設(shè)備而異(默認(rèn)為VBR,設(shè)置-maxrate等于-b:v用于CBR)。HRD緩沖選項(xiàng)(rc_max_rate,rc_buffer_size)是有效的,并且編碼器將在適當(dāng)時(shí)生成buffering_period和pic_timing SEI。
沒有完全類似的-preset選項(xiàng)。該-compression_level選項(xiàng)控制在編碼器本地速度/質(zhì)量權(quán)衡(即,努力花費(fèi)在試圖從當(dāng)?shù)剡x擇喜歡的運(yùn)動(dòng)估計(jì)和模式選擇最佳效果的量),用一個(gè)模糊的每個(gè)設(shè)備的規(guī)模。參數(shù)是一個(gè)小整數(shù),從1到某個(gè)極限取決于設(shè)備(不超過(guò)7) - 更高的值更快/更低的流質(zhì)量。另外,某些硬件(Intel gen9)支持具有更多限制功能的低功耗模式??梢酝ㄟ^(guò)-low_power選項(xiàng)訪問(wèn)它。
根本不支持雙通道編碼和前瞻 - 只能進(jìn)行本地速率控制。VBR模式應(yīng)該在接近總體比特率目標(biāo)方面做得相當(dāng)不錯(cuò),但如果復(fù)雜性變化,質(zhì)量將在流中發(fā)生顯著變化。
三、硬件/QuickSync
原文(英文):https://trac.ffmpeg.org/wiki/Hardware/QuickSync
警告:請(qǐng)勿在不確定需要的情況下安裝Intel Media SDK,尤其是在Linux上。在許多情況下,你不需要它,嘗試使用它可能會(huì)破壞其他東西。
“Intel Quick Sync Video”是許多英特爾GPU內(nèi)部可用的一組硬件功能的營(yíng)銷名稱。
1.硬件支持
2.API支持
可以通過(guò)許多不同的API訪問(wèn)硬件:
DXVA2 / D3D11VA
這些是標(biāo)準(zhǔn)的Windows API,由英特爾圖形驅(qū)動(dòng)程序?qū)崿F(xiàn),以支持視頻解碼。libmfx on Linux
這是英特爾的一個(gè)庫(kù),可以作為Intel Media SDK的一部分安裝,并支持編碼和解碼案例的子集。libmfx on Windows
這是一個(gè)隨英特爾圖形驅(qū)動(dòng)程序提供的庫(kù),支持所有編碼和解碼案例。Media Foundation
另一個(gè)Windows API,通過(guò)英特爾圖形驅(qū)動(dòng)程序支持一些編碼和解碼案例。ffmpeg不支持。VAAPI with i965 driver
這是libva / VAAPI 結(jié)構(gòu)的主要免費(fèi)驅(qū)動(dòng)程序。大多數(shù)Linux發(fā)行版打包它。VAAPI with iHD driver
Linux上libmfx的后端使用修改后的libva和VAAPI驅(qū)動(dòng)程序; 這也可以由用戶直接使用。
3.Linux
您可以從二進(jìn)制安裝媒體服務(wù)器工作室https://software.intel.com/en-us/intel-media-server-studio/。 但是,Media Server Studio僅支持有限的HW平臺(tái)和Linux發(fā)行版。 整個(gè)開源媒體堆棧提供了更廣泛的硬件平臺(tái)和支持的Linux發(fā)行版。
Intel open source media stack
項(xiàng)目名: 支持的Gen Graphics | Open Source Repo |
---|---|
MSDK: gen9 + | https://github.com/Intel-Media-SDK/MediaSDK |
Libva: GEN5 + | https://github.com/intel/libva |
i965驅(qū)動(dòng)程序: gen5~gen9.5 | https://github.com/intel/intel-vaapi-driver |
iHD驅(qū)動(dòng)程序: gen9 + | https://github.com/intel/media-driver |
VAAPI VS libmfx
如果可能,強(qiáng)烈建議將VAAPI與i965驅(qū)動(dòng)程序一起使用。如果您的用例特別需要其特定功能集,則僅使用libmfx。
VAAPI / i965
在大多數(shù)Linux發(fā)行版中標(biāo)準(zhǔn)打包。
運(yùn)行所有可用的硬件,包括舊的和更便宜的設(shè)備。
更廣泛的編解碼器支持。
適用于可能也使用AMD / Nvidia硬件和Mesa的應(yīng)用程序的通用API。
可與標(biāo)準(zhǔn)API(EGL / OpenGL,OpenCL)互操作。libmfx / iHD
在某些情況下可能會(huì)提供更好的編碼質(zhì)量(?)。
在某些情況下可能會(huì)提供更高的編碼吞吐量(特別是在Iris圖形上)。
適用于也可在Windows上運(yùn)行的應(yīng)用程序的通用API。
可與英特爾OpenCL實(shí)施互操作。
4.Windows
Windows版本MSDK可以從得到 https://software.intel.com/media-sdk
5.運(yùn)行
VAAPI
請(qǐng)參閱硬件/ VAAPI:https://trac.ffmpeg.org/wiki/Hardware/VAAPI
libmfx
該庫(kù)具有大量可供選擇的選項(xiàng),可能的有效值取決于版本和硬件。libavcodec嘗試將常見選項(xiàng)明智地映射到libmfx選項(xiàng),但映射是粗略的并且有漏洞,尤其是圍繞速率控制。
使用無(wú)效組合可能會(huì)激發(fā)消息:“QSV運(yùn)行時(shí)不支持選定的速率控制模式。請(qǐng)選擇其他模式。” 通常這條消息是準(zhǔn)確的,但它也可以指其他問(wèn)題,如缺乏可用的設(shè)備。
6.在Linux上安裝Media SDK
請(qǐng)注意,內(nèi)核修補(bǔ)程序和修改過(guò)的系統(tǒng)庫(kù)都是必需的。建議不要將它安裝在任何也用于其他目的的機(jī)器上,因?yàn)樗皇褂谜5姆峙錂C(jī)制,并且可能意外地被其他軟件包破壞/破壞。
建造機(jī)器:
建立和安裝打包調(diào)度:< https://github.com/lu-zero/mfx_dispatch >。(也可以按照安裝手冊(cè)中的說(shuō)明從Media SDK安裝中提取必要的文件 - 不建議這樣做,只需使用包。)
使用–enable-libmfx構(gòu)建ffmpeg。目標(biāo)機(jī)器:
確保目標(biāo)計(jì)算機(jī)具有受支持的CPU。當(dāng)前版本僅在昂貴的CPU(“Xeon”/“Core i”品牌)上支持gen8 / gen9圖形。更便宜的CPU(“Pentium”/“Celeron”/“Atom”品牌)上的相同圖形核心被明確禁用,可能是出于商業(yè)原因。
得到一個(gè)干凈的版本支持的內(nèi)核版本(目前4.4:< https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.tar.xz >),并應(yīng)用所提供的補(bǔ)丁。構(gòu)建和安裝。
構(gòu)建并安裝提供的libva和libdrm樹。
運(yùn)行Media SDK安裝腳本以安裝專有組件。
重啟。
————————————————
版權(quán)聲明:本文為CSDN博主「Tosonw」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Tosonw/article/details/90178195
評(píng)論
查看更多