【FFMPEG】Install FFmpeg CUDA gltransition in Ubuntu

2024-09-06 00:12

本文主要是介绍【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.")

这篇关于【FFMPEG】Install FFmpeg CUDA gltransition in Ubuntu的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140451

相关文章

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

SpringBoot使用ffmpeg实现视频压缩

《SpringBoot使用ffmpeg实现视频压缩》FFmpeg是一个开源的跨平台多媒体处理工具集,用于录制,转换,编辑和流式传输音频和视频,本文将使用ffmpeg实现视频压缩功能,有需要的可以参考... 目录核心功能1.格式转换2.编解码3.音视频处理4.流媒体支持5.滤镜(Filter)安装配置linu

Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题

《Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题》:本文主要介绍Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录一、前言二、系统架构检测三、卸载旧版 Go四、下载并安装正确版本五、配置环境变量六、验证安装七、常见

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

ubuntu系统使用官方操作命令升级Dify指南

《ubuntu系统使用官方操作命令升级Dify指南》Dify支持自动化执行、日志记录和结果管理,适用于数据处理、模型训练和部署等场景,今天我们就来看看ubuntu系统中使用官方操作命令升级Dify的方... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

双系统电脑中把Ubuntu装进外接移动固态硬盘的全过程

《双系统电脑中把Ubuntu装进外接移动固态硬盘的全过程》:本文主要介绍如何在Windows11系统中使用VMware17创建虚拟机,并在虚拟机中安装Ubuntu22.04桌面版或Ubunt... 目录一、首先win11中安装vmware17二、磁盘分区三、保存四、使用虚拟机进行系统安装五、遇见的错误和解决

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设