FFmpeg 編譯支持NVIDIA硬件編解碼-windows平臺(tái)

目錄

  1. 參考
  2. NVENC/NVDEC介紹
  3. 編譯步驟
  4. 問(wèn)題記錄

1. 參考

2. NVENC/NVDEC介紹

NVENC和NVDEC是NVIDIA的硬件加速編碼和解碼API扎阶,以前叫CUVID渠牲。在Windows和Linux平臺(tái)支持玻蝌。

使用NVENC和NVDEC的前提[1]:

  1. GPU的支持
  2. 顯卡驅(qū)動(dòng)的支持。
  3. 安裝NIVIDA Codec SDK

3. 編譯步驟

說(shuō)明:

  • 使用的FFmpeg的版本4.1.

3.1 下載nv-codec-headers

FFmpeg為NVIDIA的CUDA/NVENC/NVDEC相關(guān)庫(kù)使用它自己稍微修改過(guò)的運(yùn)行時(shí)加載器塘辅。需要安裝nv-codec-headers,否則編譯時(shí)會(huì)報(bào)錯(cuò)提示缺少ffnvcodec:ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec

[1] 中介紹的安裝步驟如下:

git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
make
sudo make install
  • 工程中一個(gè)Makefile: make install PREFIX=/usr皆撩。FFmpeg將查找它的pkg-config文件扣墩,名為ffnvcodec.pc。確保它位于PKG_CONFIG_PATH中扛吞。

我在msys下執(zhí)行make遇到問(wèn)題make : cygpath command not found呻惕,具體參見(jiàn)“4.問(wèn)題記錄#問(wèn)題2”

3.2 編譯FFmpeg

configure配置如下:

./configure --prefix=../build_out_cuda --enable-shared \
--enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp \
--extra-cflags=-I/d/programfiles/Video_Codec_SDK_9.0.20/Video_Codec_SDK_9.0.20/include \
--extra-ldflags=-L/d/programfiles/Video_Codec_SDK_9.0.20/Video_Codec_SDK_9.0.20/Lib/x64
make
make install

3.3 運(yùn)行

1. 使用NVENC進(jìn)行h264編碼:

ffmpeg -s 1280*720 -i input_yuv -c:v h264_nvenc -pixel_format yuv420p -preset default output.mp4

2. NVEDC進(jìn)行h264解碼

ffmpeg -hwaccel nvdec -i input.mp4 output_yuv

更多示例可以參考[2]中“How to use FFmpeg/libav with NVIDIA GPU-acceleration”部分。

4. 問(wèn)題記錄

問(wèn)題1:npp.h: No such file or directory

ffbuild/config.log中的錯(cuò)誤信息:

check_lib libnpp npp.h nppGetLibVersion -lnppi -lnppc -lnppidei
check_func_headers npp.h nppGetLibVersion -lnppi -lnppc -lnppidei
test_ld cc -lnppi -lnppc -lnppidei
test_cc
BEGIN /tmp/ffconf.KIurJSQG/test.c
    1   #include <npp.h>
    2   #include <stdint.h>
    3   long check_nppGetLibVersion(void) { return (long) nppGetLibVersion; }
    4   int main(void) { int ret = 0;
    5    ret |= ((intptr_t)check_nppGetLibVersion) & 0xFFFF;
    6   return ret; }
END /tmp/ffconf.KIurJSQG/test.c
gcc -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1 -D__MSVCRT_VERSION__=0x0700 -D_WIN32_WINNT=0x0600 -D__printf__=__gnu_printf__ -I/d/programfiles/Video_Codec_SDK_9.0.20/Video_Codec_SDK_9.0.20/include -std=c11 -fomit-frame-pointer -c -o /tmp/ffconf.KIurJSQG/test.o /tmp/ffconf.KIurJSQG/test.c
C:/Users/gavinxu/AppData/Local/Temp/ffconf.KIurJSQG/test.c:1:17: fatal error: npp.h: No such file or directory
 #include <npp.h>
                 ^
compilation terminated.
ERROR: libnpp not found
  • Video_Codec_SDK_9.0.20/include中的確沒(méi)有npp.h文件滥比。
  • 需要支持npp則還需要安裝CUDA toolkit[4]亚脆。
  • 安裝CUDA-toolkit遇到visual studio環(huán)境的問(wèn)題,目前還用不到npp盲泛,我就先把--enable-libnpp去掉了濒持。

問(wèn)題2:make : cygpath command not found

  • 使用pkg-config --cflags ffnvcodec,發(fā)現(xiàn)ffnvcodec.pc沒(méi)有被找到。
  • 生成的ffnvcodec.pc有些問(wèn)題寺滚。
prefix=
includedir=${prefix}/include

Name: ffnvcodec
Description: FFmpeg version of Nvidia Codec SDK headers
Version: 9.0.18.2
Cflags: -I${includedir}

查看了一下make文件

PREFIX = /usr/local
LIBDIR = lib
INSTALL = install
SED = sed

all:
ifeq ($(OS),Windows_NT)
    $(SED) 's#@@PREFIX@@#$(shell cygpath -m ${PREFIX})#' ffnvcodec.pc.in > ffnvcodec.pc
else
    $(SED) 's#@@PREFIX@@#$(PREFIX)#' ffnvcodec.pc.in > ffnvcodec.pc
endif

install: all
    $(INSTALL) -m 0755 -d '$(DESTDIR)$(PREFIX)/include/ffnvcodec'
    $(INSTALL) -m 0644 include/ffnvcodec/*.h '$(DESTDIR)$(PREFIX)/include/ffnvcodec'
    $(INSTALL) -m 0755 -d '$(DESTDIR)$(PREFIX)/$(LIBDIR)/pkgconfig'
    $(INSTALL) -m 0644 ffnvcodec.pc '$(DESTDIR)$(PREFIX)/$(LIBDIR)/pkgconfig'

uninstall:
    rm -rf '$(DESTDIR)$(PREFIX)/include/ffnvcodec' '$(DESTDIR)$(PREFIX)/$(LIBDIR)/pkgconfig/ffnvcodec.pc'

.PHONY: all install uninstall
  • make執(zhí)行了生成ffnvcodec.pc然后把ffnvcodec.pc和include/ffnvcodec拷貝到了/usr/local/lib/pkgconfig目錄和usr/local/inlucde目錄的工作柑营。
  • 但是msys中執(zhí)行pkg-config命令并沒(méi)有去識(shí)別/usr/local/lib/pkgconfig目錄,沒(méi)有找到msys中安裝cygpath的方案村视,就自己來(lái)配置這個(gè)ffnvcodec.pc官套。

配置步驟

  1. 修改ffnvcodec.pc。文件內(nèi)容如下所示蚁孔。
  2. 把ffnvcodec.pc放到msys的lib\pkgconfig目錄奶赔,本機(jī)為D:\programfiles\MinGW\msys\1.0\lib\pkgconfig目錄。
  3. 把ffnvcodec頭文件目錄拷貝到msys的include目錄杠氢,本機(jī)為D:\programfiles\MinGW\msys\1.0\include站刑。

ffnvcodec.pc的內(nèi)容:

prefix=/usr/local/
includedir=${prefix}/include

Name: ffnvcodec
Description: FFmpeg version of Nvidia Codec SDK headers
Version: 9.0.18.2
Cflags: -I${includedir}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市修然,隨后出現(xiàn)的幾起案子笛钝,更是在濱河造成了極大的恐慌,老刑警劉巖愕宋,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異结榄,居然都是意外死亡中贝,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)臼朗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)邻寿,“玉大人蝎土,你說(shuō)我怎么就攤上這事⌒宸瘢” “怎么了誊涯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蒜撮。 經(jīng)常有香客問(wèn)我暴构,道長(zhǎng),這世上最難降的妖魔是什么段磨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任取逾,我火速辦了婚禮,結(jié)果婚禮上苹支,老公的妹妹穿的比我還像新娘砾隅。我一直安慰自己,他們只是感情好债蜜,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布晴埂。 她就那樣靜靜地躺著,像睡著了一般寻定。 火紅的嫁衣襯著肌膚如雪邑时。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,184評(píng)論 1 308
  • 那天特姐,我揣著相機(jī)與錄音晶丘,去河邊找鬼。 笑死唐含,一個(gè)胖子當(dāng)著我的面吹牛浅浮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捷枯,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼滚秩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了淮捆?” 一聲冷哼從身側(cè)響起郁油,我...
    開(kāi)封第一講書(shū)人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎攀痊,沒(méi)想到半個(gè)月后桐腌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苟径,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年案站,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棘街。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蟆盐,死狀恐怖承边,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情石挂,我是刑警寧澤博助,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站痹愚,受9級(jí)特大地震影響富岳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜里伯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一城瞎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疾瓮,春花似錦脖镀、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至肩碟,卻和暖如春强窖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背削祈。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工翅溺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人髓抑。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓咙崎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吨拍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子褪猛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359