【FFMPEG】Install FFmpeg CUDA gltransition in Ubuntu

因为比较复杂,记录一下自己安装过程,方便后续查找,所有都是在docker环境安装cuda11.7的
**ffmpeg 4.2.2
nv-codec-headers-9.1.23.3 ** 手动下载安装吧

https://github.com/aperim/docker-nvidia-cuda-ffmpeg/blob/v0.1.10/ffmpeg/Dockerfile
最好手动一个一个安装,错误跳过,后面报错再说。apt-get update && \apt-get -y --allow-change-held-packages full-upgrade && \apt-get -y install \build-essential \cmake \curl \flite1-dev \frei0r-plugins-dev \git \ladspa-sdk \libaom-dev \libass-dev \libavc1394-dev \libbluray-dev \libbs2b-dev \libc6 \libc6-dev \libcaca-dev \libcdio-dev \libcdio-paranoia-dev \libcdparanoia-dev \libchromaprint-dev \libcodec2-dev \libdav1d-dev \libdc1394-dev \libdrm-dev \libgles2-mesa-dev \libgme-dev \libgnutls28-dev \libgsm1-dev \libiec16022-dev \libiec61883-dev \libjack-dev \liblilv-dev \libmfx-dev \libmp3lame-dev \libmysofa-dev \libnettle8 \libnuma-dev \libnuma1 \libomxil-bellagio-dev \libopenal-dev \libopengl-dev \libopenjp2-7-dev \libopenmpt-dev \libopus-dev \libpocketsphinx-dev \libpulse-dev \librabbitmq-dev \librsvg2-dev \librubberband-dev \libsdl2-gfx-dev \libshine-dev \libsnappy-dev \libsoxr-dev \libspeex-dev \libsrt-gnutls-dev \libssh-dev \libtheora-dev \libtool \libtwolame-dev \libunistring-dev \libvidstab-dev \libvpx-dev \libwebp-dev \libx264-dev \libx265-dev \libxvidcore-dev \libzimg-dev \libzmq3-dev \libzvbi-dev \lzip \pkg-config \unzip \wget \yasm
apt-get install git -y
apt-get install -y vim
apt-get install -y   x265-devel
apt install libavcodec-dev libavformat-dev libavutil-dev(最好对比最上面的apt-get是否安装了)
(比如yasm在上面已输入命令,但是还是需要手动安装的原因,是因为上述安装报错了,导致一些安装包没安装,虽然一些安装包也不需要,这里需要一步一步对照测一下哪些安装包是上述没有安装好的,后面又报错的,上述有的再apt-get install 安装包)
apt-get install wget
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
sudo tar -xvf yasm-1.3.0.tar.gz
time tar -xvf yasm-1.3.0.tar.gz
ls
cd yasm-1.3.0
./configure
make
后面修改显卡计算能力查询用:https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
apt install libavcodec-dev libavformat-dev libavutil-dev
在ffmpeg文件下
git clone https://github.com/transitive-bullshit/ffmpeg-gl-transition.git#修改文件
#在libavfilter/Makefile里加入
OBJS-$(CONFIG_GLTRANSITION_FILTER) += vf_gltransition.o
#在Libavfilter/aLLfiLters.c加入
extern AVFilter ff_vf_gltransition;cp ffmpeg-gl-transition/vf_gltransition.c libavfilter/RUN grep -v "define GL_TRANSITION_USING_EGL" ffmpeg-gl-transition/vf_gltransition.c > ffmpeg/libavfilter/vf_gltransition.c
 apt-get install libglew libglew-devapt-get install  libassapt-get install -y glfw glew-develapt-get install -y lrzsz./configure --prefix=/usr --extra-version=0ubuntu0.20.04.1 --extra-cflags=-I/usr/local/cuda-11.7/include --extra-ldflags=-L/usr/local/cuda-11.7/lib64 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-nonfree --enable-cuda --enable-cuda-nvcc --enable-cuvid --enable-gnutls --enable-libass --enable-libfontconfig --enable-libnpp --enable-nvdec --enable-nvenc --enable-opencl --enable-libx264 --enable-shared --enable-filter=gltransition --enable-gpl --enable-opengl --extra-libs='-lGLEW -lglfw -ldl'```htmltip:注意--extra-version=0ubuntu0.20.04.1 --extra-cflags=-I/usr/local/cuda-11.7/include --extra-ldflags=-L/usr/local/cuda-11.7/lib64要修改对应自己的服务器。报ffbuild/config.log显卡错误时,查看
https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
设置configure合适显卡计算力参数
4234 
4235 if enabled cuda_nvcc; then
4236     nvcc_default="nvcc"
4237     nvccflags_default="-gencode=arch=compute_86,code=sm_86 -O2"
4238 else
4239     nvcc_default="clang"
4240     nvccflags_default="--cuda-gpu-arch=sm_30 -O2"
4241     NVCC_C=""
4242 fimake -j12
make install
验证安装是否成功# ffmpeg -v 0 -filters|grep gltranT.. gltransition      VV->V      OpenGL blend transitions
Xvfb :1 -screen 0 1280x1024x16 (安装apt-get install xvfb)

tip:默认glsl生成效果差,需要手动修改glsl。

env DISPLAY=:1 ffmpeg -t 1 -loop 1 -i 1.jpg -t 1 -loop 1 -i 2.jpg -filter_complex "gltransition=offset=0.5:duration=0.5:source=/root/ffmpeg-gl-transition/gl-transitions/transitions/crosswarp.glsl" -y out1.mp4
下载一些其他特效库
https://github.com/gl-transitions/gl-transitions/tree/master/transitionsenv DISPLAY=:1 ffmpeg -t 2 -loop 1 -i 0.png -t 2 -loop 1 -i 59.png -filter_complex "gltransition=offset=1:duration=0.5:source=/opt/src/ffmpeg/ffmpeg-gl-transition/transitions/wind.glsl"  -c:v h264_nvenc -y zzz.mp4**使用注意事项看这:效果不理想修改相应的xxx.glsl文件变量参数**
https://blog.csdn.net/Asa_Ho/article/details/116096500-c:v h264_nvenc报错误可以修改自己cuda驱动相对应的两个so文件
libnvidia-encode.so.1 libnvcuvid.so.1是与自己驱动适配的两个so文件。
可参考:最好手动
cp libnvidia-encode.so.1 libnvcuvid.so.1 /lib64/ /usr/lib/x86_64-linux-gnu/#!/usr/bin/env bash
# 获取驱动程序版本和CUDA版本driver=$(nvidia-smi | grep "Driver Version" | awk '{print $6}')
cuda=$(nvidia-smi | grep "Driver Version" | awk '{print $9}')
echo "Driver Version: $driver"
echo "CUDA Version: $cuda"
# rm /etc/apt/sources.list.d/cuda.list注释防止误操作!根据实际需要。
# rm /etc/apt/sources.list.d/nvidia-ml.list
apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub
apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub
echo "deb https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu2004/x86_64 /" |  tee -a /etc/apt/sources.list
apt-get update
# 提取版本号
driver_version=$(echo $driver | awk -F'.' '{print $1}')
package_name_encode="libnvidia-encode"
package_name_decode="libnvidia-decode"
package_name_compute="libnvidia-compute"
full_package_name_encode="$package_name_encode-$driver_version"
full_package_name_decode="$package_name_decode-$driver_version"
full_package_name_compute="$package_name_compute-$driver_version"
# 输出版本号
echo "Driver Version Extracted: $driver_version"
echo "Full Package Name for Encoding: $full_package_name_encode"
echo "Full Package Name for Decoding: $full_package_name_decode"# 获取可用版本号
Version_encode=$(apt-cache madison $full_package_name_encode | grep $driver | awk '{print $3}')
Version_decode=$(apt-cache madison $full_package_name_decode | grep $driver | awk '{print $3}')# 安装
apt-get install $full_package_name_encode=$Version_encode  $full_package_name_decode=$Version_encode $full_package_name_compute=$Version_encode
import os
import subprocess# Define the directory containing the GLSL transition files
transitions_dir = "/opt/src/ffmpeg/ffmpeg-gl-transition/transitions/"
output_dir = "./outputs"  # Directory to save the generated videos
os.makedirs(output_dir, exist_ok=True)# Define the input images and other ffmpeg parameters
input_1 = "0.png"
input_2 = "59.png"
display_env = "DISPLAY=:1"
duration = 2
transition_offset = 1
transition_duration = 0.5
codec = "h264_nvenc"# Get all GLSL files in the transitions directory
glsl_files = [f for f in os.listdir(transitions_dir) if f.endswith('.glsl')]# Loop through each GLSL file and run the ffmpeg command
for glsl_file in glsl_files:# Construct the full path to the GLSL fileglsl_path = os.path.join(transitions_dir, glsl_file)# Define the output file nameoutput_file = os.path.join(output_dir, f"{glsl_file.replace('.glsl', '.mp4')}")# Construct the ffmpeg commandffmpeg_command = ['ffmpeg', '-t', str(duration), '-loop', '1', '-i', input_1,'-t', str(duration), '-loop', '1', '-i', input_2,'-filter_complex', f"gltransition=offset={transition_offset}:duration={transition_duration}:source={glsl_path}",'-c:v', codec, '-y', output_file]# Set the DISPLAY environment variableenv = os.environ.copy()env["DISPLAY"] = ":1"# Print and run the ffmpeg commandprint(f"Running ffmpeg for {glsl_file}...")try:subprocess.run(ffmpeg_command, env=env, check=True)print(f"Successfully created {output_file}")except subprocess.CalledProcessError as e:print(f"Error processing {glsl_file}: {e}")print("All transitions processed.")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/419614.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何通过商品id商品链接来获取淘宝商品主图详情图等数据?

在电子商务领域,获取商品信息,尤其是商品的主图、详情图以及其他相关数据,对于商家进行竞品分析、价格监控、商品上架前的信息整合等场景至关重要。淘宝作为中国最大的电子商务平台之一,其商品信息的获取更是众多商家和开发者关注…

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速…

【Python】数据可视化之核密度

KDEPlot(Kernel Density Estimate Plot,核密度估计图)是seaborn库中一个用于数据可视化的函数,它基于核密度估计(KDE)这一非参数统计方法来估计数据的概率密度函数。KDEPlot能够直观地展示数据的分布特征&a…

《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》Chapter 1课件2024

每一轮备课都有新的感悟。 禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码

位运算技巧总结

一、常见位运算操作 1、基础位运算 & 按位与 有0则0 | 按位或 有1则1 ^ 按位异或 相同为0 不同为1 2、确定数n的二进制位中第x位是0还是1 目的:是0返回0,是1返回1 (n >> x) & 1 思路:1除了第一位其他位都是0&a…

Docker 部署 Kafka (图文并茂超详细)

部署 Kafka ( Docker ) Kafka对于zookeeper是强依赖,保存kafka相关的节点数据,所以安装Kafka之前必须先安装zookeeper [Step 1] : 部署 Zookeeper -> 拉取 Zookeeper 镜像 ➡️ 启动 Zookeeper 容器 docker pull zookeeper:3.4.14 docker run -d --…

Qt/C++编写的Onvif调试助手调试神器工具/支持云台控制/预置位设置等/有手机版本

一、功能特点 广播搜索设备,支持IPC和NVR,依次返回。可选择不同的网卡IP进行对应网段设备的搜索。依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。可对指定的Profile获取视频流Rtsp地址,比如主码流地址、子码流地址。可对每个设备设…

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件 filename your_file.nc; % 替换为你的文件名% 使用 netcdf.open 函数打开文件 ncid netcdf.open(filename, NC_NOWRITE);% 查看文件中的组 …

手把手教你使用亚马逊云服务器创建EC2实例

陈老老老板🤴 🧙‍♂️本文专栏:生活(主要讲一下自己生活相关的内容)生活就像海洋,只有意志坚强的人,才能到达彼岸。 🧙‍♂️本文简述:如何使用亚马逊云服务器创建EC2实例。 🧙‍♂…

钢琴灯哪个牌子好?五款学生钢琴灯测评

在这个快节奏的时代,孩子们都面临着长时间用眼的问题,而长时间处于室内不良的光线环境很容易对孩子的视力健康产生影响,对于目前有娃的家庭,很多家长都在给孩子寻找可以提高室内光学环境的钢琴灯,钢琴灯作为一种通过专…

【分支-快速排序】

【分支-快速排序】 1. 颜色分类1.1 题目来源1.2 题目描述1.3 题目解析 2. 排序数组2.1 题目来源2.2 题目描述2.3 题目解析 3. 数组中的第K个最大元素3.1 题目来源3.2 题目描述3.3 题目解析 4. 库存管理 III4.1 题目来源4.2 题目描述4 .3 题目解析 1. 颜色分类 1.1 题目来源 7…

如何使用QT完成记事本程序的UI界面布局

每日QT技巧查询表-CSDN博客 会持续更新记事本编写的全部过程,关注不迷路 一、相关控件 ①水平和垂直布局 ②按键 ③文本框 ④水平弹簧 ⑤标签 ⑥Widget 二、控件使用方法 1、PushButton 拖出三个按键,并对其进行命名,两处地方命名可以不一…

数据结构——线性表(顺序存储结构和单链表结构)

线性表的定义 线性表(List):由零个或多个数据元素组成的有限序列。 (1)它是一个序列,也就是元素之间有个先来后到的; (2)若元素有多个,则第一个元素无前驱…

[数据集][目标检测]人脸口罩佩戴目标检测数据集VOC+YOLO格式8068张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8068 标注数量(xml文件个数):8068 标注数量(txt文件个数):8068 标注…

Spring Boot实现文件上传和下载

1.背景 项目中经常会有上传和下载的需求&#xff0c;这篇文章简述一下springboot项目中实现简单的上传和下载。 2.代码工程 实验目标 实现简单的文件上传和下载 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://…

JDBC:连接数据库

文章目录 报错 报错 Exception in thread “main” java.sql.SQLException: Can not issue SELECT via executeUpdate(). 最后这里输出的还是地址&#xff0c;就是要重写toString()方法&#xff0c;但是我现在还不知道怎么写 修改完的代码&#xff0c;但是数据库显示&#…

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标…

第三次去银行办事,核心是犯了抓不住重点这个毛病

手机银行不小心输错了两次密码&#xff0c;然后就限制了交易&#xff0c;只能在柜台操作。 由此引发了比如提示密码错误、定期转活期、转账等功能的异常。 前两次去银行&#xff0c;竟然只是去解决了这些附带问题。 核心问题是限制非柜面交易啊。 哎 这就是抓不住重点&…

2024年9月最新界面:自己如何在电脑上注册新的Google谷歌账号,图文详解和关键点解析、常见问题

有一些朋友需要通过谷歌账号来工作、学习或娱乐&#xff08;例如很多游戏需要用谷歌账号来注册和使用&#xff09;&#xff0c;但是不知道如何注册谷歌账号&#xff0c;或者知道如何注册&#xff0c;但是对于一些步骤或者注意事项不太熟悉&#xff0c;导致注册不成功&#xff0…

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配&#xff08;Exact Match&#xff09;2. 正则表达式匹配&#xff08;Regex Match&#xff09;3. 前缀匹配&#xff08;Prefix Match&#xff09; 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中&#xff0…