由于最近要在视频流上Mask R-CNN模型,cuda硬解也要上,又要折腾一下环境搭建,在此记录一下。
这里的硬解说的是调用nvidia的video codec sdk来加速编解码,使用cuvid硬解的方式有两种,一种是调用ffmpeg已经嵌入的硬解方案,另外一种是先调用ffmpeg再调用codec sdk。
从开发难度来说,第一种要稍微简单一些,只需要指定ffmpeg的video codec就可以启用硬解。 下面是我搭建的一些记录
安装依赖
由于我的机器搭建了各种各样的开发环境,这次编译缺少的一个是yasm包,执行下面命令就可以安装。如果有缺少其它包,自行搜索一下应该可以解决。
sudo apt-get install yasm
安装nv codec header
由于编译ffmpeg需要用到nv codec的一些header,在这里下载,由于我用的ffmpeg版本最新的master分支(commit: d6489d),所以nv_header也要用最新的9.0版本,下载地址是:
https://github.com/FFmpeg/nv-codec-headers/releases
下载之后,执行
sudo make install
就可以完成header的安装。如果要卸载, 可以执行sudo make uninstall
命令
编译ffmpeg
从 https://git.ffmpeg.org/ffmpeg.git clone 一下ffmpeg的源码
然后配置一下
./configure --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
sudo make -j6
sudo make install
到这里基本就安装成功了,下面验证一下硬解是否生效
验证一下
由于是硬解,所以要验证一下是否生效,我用本地的一个视频文件试了一下, 用time命令对比一下同一个转码任务,哪个时间更短
ffmpeg的命令参数比较多,可以自行搜索看一下:
ffmpeg -y -i jiaofu2.rmvb -t 200 -c:v h264_nvenc output2.mp4
- -i 输入文件
- -c:v 编解码器video codec, h264_nvenc表示使用nvidia的video codec
- -t 目标时长
如果不指定c:v, 就是用默认CPU软解
使用硬解:
time ffmpeg -y -i jiaofu2.rmvb -t 200 -c:v h264_nvenc output2.mp4
ffmpeg version N-93679-gd6489ddb7a Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 7 (Ubuntu 7.3.0-27ubuntu1~18.04)
configuration: --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
libavutil 56. 26.100 / 56. 26.100
libavcodec 58. 52.100 / 58. 52.100
libavformat 58. 27.103 / 58. 27.103
libavdevice 58. 7.100 / 58. 7.100
libavfilter 7. 50.100 / 7. 50.100
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
[rm @ 0x555690d38040] Invalid stream index 2 for index at pos 2438339235
Input #0, rm, from 'jiaofu2.rmvb':
Metadata:
title : �̸�2.The.Godfather.Part.II.1974.720p.Bluray
author