Linux(Centos)服务器探索ffmpeg笔记 (命令行、Nvidia硬件加速、GPU、CPU、CUDA、h264_nvenc、过滤器、加水印)

news2024/11/18 10:43:15

目录

  • 前言
    • 内容简介
    • 为什么会有这篇文章
  • 1、服务器上怎么使用ffmpeg
    • 1.1 使用编译好的(需要root权限)
    • 1.2 自己怎么编译(需要root权限)
  • 2 、非Root用户要怎么安装和使用
  • 3、ffmpeg命令的一些使用引导和参数介绍
    • 3.1 编译参数
    • 3.2 查询支持的编解码器过滤器
    • 3.3 官方wike文档
    • 3.4 怎么搜索过滤器的使用案例和参数说明
    • 3.5 怎么搜索硬件加速方面内容
  • 4、服务器怎么安装硬件加速GPU环境(Nvidia案例)
    • 4.1 推荐文档文章
    • 4.2 需要安装GPU驱动
    • 4.3 安装CUDA工具包(硬件加速支持的接口)
  • 5、服务器显卡工具包命令介绍(NVIDIA-SMI)。
    • 推荐文章
  • 怎么使用硬件加速,加水印案例(CUDA、GPU编解码、处理过滤器)
  • 结束

前言

内容简介

 1. 服务器上怎么使用ffmpeg(手动编译/使用编译好的)。
 2. 非Root用户要怎么安装和使用(仅做引导)。
 3. ffmpeg命令的一些使用引导和参数介绍。
 4. 服务器怎么安装硬件加速GPU环境(Nvidia案例)。
 5. 服务器显卡工具包命令介绍(NVIDIA-SMI)。
 6. 怎么使用硬件加速,加水印案例(CUDA、GPU编解码、处理过滤器)  。

为什么会有这篇文章

上周有个需求需要在服务器上需要使用ffmpeg给视频加水印、并且多线程,还要求速度不能太慢。
光是在服务器上折腾环境就浪费了一整天,搜索各种文章、都是零零碎碎,没有一篇是完整的,最后发现其实云服务商里就有完整的文章,直接裂开(并且没有服务器root权限,不敢尝试,如果有权限会很简单)。

然后环境装好了,ffmpeg跑起来了,结果发现GPU利用率10%不到,又开始在csdn、微信文章、谷歌、github、外网技术论坛、博客,也全是零零碎碎的,一直在改命令行参数,又是折腾了一天(本地测试的时候就已经用了两三天)。
最后这个需求直接从周一做到了周六早上才完成在服务器上的测试。
总结:搜索的文章太零散、并且有效的不多。所以这里写一个总结,也给自己当一下笔记。

1、服务器上怎么使用ffmpeg

官网:ffmpeg

1.1 使用编译好的(需要root权限)

github:FFmpeg-Builds
如果没有系统和版本需求选择 ffmpeg-master-latest-linux64-gpl.tar.xz 就行。
FFmpeg-Builds是在ffmpeg官网中获取的一个构建项目,也包含了windows、linuxarm64的版本

# 如果服务器下载太慢可以自己本地电脑翻墙下载,在上传到服务器,会快一点
cd ~
mkdir toolkits
cd toolkits
wget https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl.tar.xz
tar xvf ffmpeg-master-latest-linux64-gpl.tar.xz

# 这个目录下的 ffmpeg  ffplay  ffprobe 就是可执行文件
cd ffmpeg-master-latest-linux64-gpl/bin
# 能输出就说明已经可以使用了
./ffmpeg -version

# 添加进环境变量
vi ~/.bash_profile
# 末行添加
export PATH=$PATH:/home/konglong/toolkits/ffmpeg-master-latest-linux64-gpl/build/bin
source ~/.bash_profile

后面的版本号说明(其他介绍看FFmpeg-Builds的README.md文件):
gpl - 包括所有依赖项,即使是那些需要完整的GPL而不仅仅是LGPL的依赖项。
lgpl - 缺少仅支持gpl的库。最突出的是libx264和libx265。
nonfree - 除了gpl变体的所有依赖项外,还包括fdk-aac。
gpl-shared - 与gpl相同,但带有libav*家族的共享库,而不是纯静态可执行文件。
lgpl-shared - 与lgpl相同,但是使用lgpl的依赖项集。
nonfree-shared - 与nonfree相同,是依赖项的非自由集合

1.2 自己怎么编译(需要root权限)

ffmpeg

# 如果服务器下载太慢可以自己本地电脑翻墙下载,在上传到服务器,会快一点
cd ~
mkdir toolkits
cd toolkits
wget https://ffmpeg.org/releases/ffmpeg-6.1.1.tar.xz
tar xvf ffmpeg-6.1.1.tar.xz

cd ffmpeg-6.1.1
# 因为设置不同的编译参数需要安装不同的环境和一些编解码器,所以这里只做最小安装的案例。
# 具体参数怎么配置和需要安装什么环境建议去搜索其他文章或者看文档,或者cat ./configure 看里面的设置的参数作用进行配置
# 这是最小安装的参数,如果需要使用到其他的编码器之类的东西在 ./configure后面加-- 进行配置。
./configure --prefix=/home/konglong/toolkits/ffmpeg-6.1.1/build --disable-x86asm 
make # 如果服务器允许建议使用 make -j8 这是开启8个进程进行加速编译,不然会非常慢
make install # 这是把编译好的ffmpeg移动到你配置好的--prefix,如果没配置会默认安装到configure中配置的prefix_default中

cd build/bin
./ffmpeg -version

# 添加到环境变量
vi ~/.bash_profile
# 末行添加 
export PATH=$PATH:/home/konglong/toolkits/ffmpeg-6.1.1/build/bin
source ~/.bash_profile

2 、非Root用户要怎么安装和使用

原理:编译完成的ffmpeg和要使用到的一些编解码器、工具包指向的存放的目录一般都是需要root权限的,不管是使用还是访问,普通用户都没有权限。
所以:非root需要把所有需要用到的比如ffmpeg、编解码器、等工具环境自己进行编译,并且编译之前需要把所有的存放目录都指向当前用户的home目录下。
建议:非Root用户,不建议在非root上进行安装和编译。最好还是找服务器管理员,去把编译完成的ffmpeg放到服务器目录上,在给你开使用权限,不然会很麻烦。不仅仅是ffmpeg,包括后面如果需要使用硬件加速需要安装显卡驱动、cuda工具包、特定编解码器,这些都是需要root权限进行安装或者编译的。

3、ffmpeg命令的一些使用引导和参数介绍

3.1 编译参数

ffmpeg -h

最上面这一坨东西只需要关注configuration: 这后面内容,这些是ffmpeg编译时的参数、包括你有没有启用某些编码器、支持哪些编解码都能在上面展示。
在这里插入图片描述

3.2 查询支持的编解码器过滤器

有时候我们不知道我们当前系统、版本的ffmpeg支持哪些编解码器过滤器记可以通过这几个命令去进行查询,找到关键词后在去具体的使用方式,或者看源码文档也能找到使用案例。
在这里插入图片描述

3.3 官方wike文档

Wike

3.4 怎么搜索过滤器的使用案例和参数说明

  1. 官方wiki-Filtering 可以找到一些简单例子
  2. 官方开发文档 内容有限仅仅能够了解
  3. ⭐️【强烈推荐】下载源码,源码目录下的doc/filters.texi文件,可以清楚的看到每个过滤器的作用、支持的参数、参数名。(这东西可能是在什么网站上挂着的,但是没有找到,只能看源码了)

3.5 怎么搜索硬件加速方面内容

  1. ⭐️【强烈推荐】官方wiki-HWAccelIntro
  2. ⭐️【强烈推荐】英伟达NVIDA社区

4、服务器怎么安装硬件加速GPU环境(Nvidia案例)

如果你使用的是云GPU服务器,并且没有使用官方的镜像也是需要安装的。

# 查看NVIDIA显卡型号
lspci | grep NVIDIA # 没有的话就是空

注意:安装GPU驱动和CUDA的时候要选择好对应的版本。
查到显卡型号后再去对应GPU驱动和支持的CUDA工具包

4.1 推荐文档文章

  1. nvidia驱动文档
  2. cuda文档
  3. GPU服务器环境安装文档(抖音火山引擎)
  4. GPU服务器环境安装文档(腾讯云)
  5. FFmpeg在 Windows 环境编译(64位)支持h264,h265,和Intel QSV,Nvidia Cuda,AMD amf 硬件加速(CSDN)

4.2 需要安装GPU驱动

需要root权限
新版本的CUDA工具包好像包含了GPU驱动,如果服务器GPU毕竟新可以跳过这一步,直接使用安装CUDA同时安装GPU驱动,也可以手动安装GPU驱动在安装CUDA工具包

  1. 驱动搜索页面NVIDIA 驱动程序下载 ,搜索对应自己系统和GPU型号的驱动进行下载
  2. 下载完成后应该是一个.run 文件,在服务器中 赋予可执行权限 chmod +x 在直接输入文件名就可以运行了,然后安装提示说明进行安装。
  3. 安装完成后使用 nvidia-smi 进行验证,如果不生效可以重启一下服务器试试。
    在这里插入图片描述

4.3 安装CUDA工具包(硬件加速支持的接口)

  1. 选择对应版本的CUDA进行下载,整个包有4~5G大小,所以最好是本地下载,然后上传到服务器不然非常慢。
  2. 如果没有安装GPU驱动,可以直接使用rpm(local),如果安装了驱动更可以用runfile(local) 然后在安装的时候取消安装GPU驱动。
  3. 安装完成后使用/usr/local/cuda/bin/nvcc -V进行验证,如果不生效可以重启一下服务器试试。
    在这里插入图片描述

5、服务器显卡工具包命令介绍(NVIDIA-SMI)。

直接看其他人的文章把,已经总结的很好了

推荐文章

  1. 通过 NVIDIA-SMI 统计GPU使用情况
  2. nvidia-smi命令详解和一些高阶技巧介绍
  3. nvidia-smi简介及各参数的详解与字段的详解和使用
  4. 查看GPU使用的最佳方式

怎么使用硬件加速,加水印案例(CUDA、GPU编解码、处理过滤器)

基础命令

ffmpeg -i "input.mp4" \
	   -i "watermark.png" \
	   -filter_complex "[1:v]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:-1:-1:color=black[wm];[0:v]format=yuv420p[main];[main][wm]overlay[outvideo]"  \
	   -map "[outvideo]" \
	   -map 0:a "output.mp4" \
	    -y

GPU编解码

ffmpeg -c:v h264_cuvid -i "input.mp4" \
	   -i "watermark.png" \
	   -filter_complex "[1:v]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:-1:-1:color=black[wm];[0:v]format=yuv420p[main];[main][wm]overlay[outvideo]"  \
	   -map "[outvideo]" \
	   -map 0:a -c:v h264_nvenc "output.mp4" \
	    -y

使用CUDA,并且处理过滤器

# 1、使用-hwaccel cuda -hwaccel_output_format cuda -i "input.mp4"  会使用cuda gpu加速解码,并且数据会放到gpu显存中
# 2、[1:v]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:-1:-1:color=black,hwupload_cuda[wm] 这里多了hwupload_cuda 是把前面处理的过滤滤镜上传到cuda gpu显存,变为cuda帧
# 3、对于[0:v]视频帧即使保持分辨率不变也需要将其转换为cuda帧,所以使用了scale_cuda,否则无法合成
# 4、然后使用overlay_cuda进行合成叠加
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i "input.mp4" \
	   -i "watermark.png" \
	   -filter_complex "[1:v]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:-1:-1:color=black,hwupload_cuda[wm];[0:v]scale_cuda=1080:1920:format=yuv420p[main];[main][wm]overlay_cuda[outvideo]"  \
	   -map "[outvideo]" \
	   -map 0:a -c:v h264_nvenc "output.mp4" \
	    -y

结束

如果文章内容有什么地方不对,欢迎评论或者私信提醒。

如果你有更多的案例也可以私信我添加到文章内容中。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

labview中TDMS读写波形图

TDMS与二进制读写速度区别不大,但是它具备关系型数据库的一些优点,经常用于存取波形数据。

数据库工程师的工作职责(合集)

数据库工程师的工作职责1 职责: 1. 日常数据库的基本安装,维护,升级,监控的; 2. 配合研发部门进行数据库设计支持,协助开发、设计和进行SQL语言优化; 3. 配合相关部门数据库相关的任务,比如数据导入导出&am…

单片机LCD1602显示电子时钟设计,含汇编程序、仿真、论文

目录 1、摘要 2 系统方案 2.1 系统整体方案的论证 3 硬件设计与实现 3.1单片机最小系统 3.2振荡电路的工作原理 3.2时钟电路的工作原理 3.3单片机最小系统电路图 3.4 时钟芯片 3.5 液晶显示电路 4 实物调试及测试 4.1 实物图 4.2仿真结果图如下所示 5、单片机源…

JAVA实现easyExcel动态生成excel

添加pom依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency><!--工具类--> <dependency><groupId>cn.hutool</groupId><…

请编写一个函数void fun(char*ss),其功能是:将字符串ss中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 请编…

三星电脑文件夹误删了怎么办?恢复方案在此

在使用三星电脑的过程中&#xff0c;我们可能会不小心删除了某个重要的文件夹&#xff0c;其中可能包含了工作文件、家庭照片、视频或其他珍贵的数据。面对这种突发情况&#xff0c;不必过于焦虑。本文将为您提供几种有效的恢复方案&#xff0c;希望能帮助您找回误删的文件夹及…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Java面试八股之Java中为什么没有全局变量

Java中为什么没有全局变量 Java中没有传统意义上的全局变量&#xff0c;这是因为Java语言设计遵循面向对象的原则&#xff0c;强调封装性和模块化&#xff0c;以及避免全局状态带来的副作用。 封装性&#xff1a; 全局变量违反了面向对象编程中的封装原则&#xff0c;即隐藏对…

【ARM 裸机】模仿 STM32 驱动开发

1、修改驱动 对于 STM32 来说&#xff0c;使用了一个结构体将一个外设的所有寄存器都放在一起&#xff0c;在上一节的基础上进行修改&#xff1b; 1.1、添加清除 bss 段代码&#xff0c; 1.2、添加寄存器结构体 新建一个文件&#xff0c;命名imx6u.h&#xff0c;注意地址的连…

JS手写set与map

目录 setaddhas与equalsdelete迭代器完整实现 map set set是一个没有重复元素的集合&#xff0c;事实上我们无法完全的使用js来模拟出set的全部功能&#xff0c;因为浏览器原生的set底层是使用c实现&#xff0c;能直接访问内存&#xff0c;所以我们只能实现set的一部分功能 这…

Django与mysqlclient链接不成功

先检查自己的python是什么版本&#xff0c;是64位还是32位&#xff0c;这个自己去网上查。 我的是32位的&#xff0c;因为直接pip下载不了&#xff0c;网上也没有32位的whl&#xff0c;所以卸载重装一个64位的3.9.6的python 网上直接搜mysqlclient&#xff0c;找到对应py39也…

WPF2 样式布局

样式布局 WPF中的各类控件元素, 都可以自由的设置其样式。 诸如: 字体(FontFamily) 字体大小(FontSize) 背景颜色(Background) 字体颜色(Foreground) 边距(Margin) 水平位置(HorizontalAlignment) 垂直位置(VerticalAlignment) 等等。 而样式则是组织和重用以上的重要工具。…

ray.tune调参学习笔记1:超参数优化器tuner设置

最近研究中学习使用python的ray.tune进行神经网络调参。在这里记录学习过程中的收获&#xff0c;希望能够帮助到有同样需求的人。学习过程主要参考ray官网文档&#xff0c;但由于笔者使用的ray为2.2.0版本&#xff0c;而官方文档为更高级版本&#xff0c;笔者代码和官方文档代码…

Python实现本地视频/音频播放器

Python实现本地视频/音频播放器 在Python中&#xff0c;有几个库可以用于视频播放&#xff0c;但是没有一个库是完美的&#xff0c;因为它们可能依赖于外部软件或有一些限制。 先看介绍用Python实现本地视频播放器&#xff0c;再介绍用Python实现本地音乐播放器。 Python实现…

【C 数据结构】图

文章目录 【 1. 基本原理 】1.1 无向图1.2 有向图1.3 基本知识 【 2. 图的存储结构 】2.1 完全图2.2 稀疏图和稠密图2.3 连通图2.3.1 (普通)连通图连通图 - 无向图非连通图 的 连通分量 2.3.2 强连通图强连通图 - 有向图非强连通有向图 的 强连通分量 2.3.3 生成树 - 连通图2.3…

重仓比特币

作者&#xff1a;Arthur Hayes Co-Founder of 100x. 编译&#xff1a;liam ccvalue (下文中表达的任何观点均为作者的个人观点&#xff0c;不应作为投资决策的依据&#xff0c;也不应被视为参与投资交易的建议或意见&#xff09;。 我们中断牛市常规节目&#xff0c;为您播报这…

【研发管理】产品经理知识体系-产品创新中的市场调研

导读&#xff1a;在产品创新过程中&#xff0c;市场调研的重要性不言而喻。它不仅是产品创新的起点&#xff0c;也是确保产品成功推向市场的关键步骤。对于产品经理系统学习和掌握产品创新中的市场调研相关知识体系十分重要。 目录 概述&#xff1a;市场调研重要性 1、相关概…

华为数字化转型与数据管理实践介绍(附PPT下载)

华为作为全球领先的信息与通信技术&#xff08;ICT&#xff09;解决方案提供商&#xff0c;在数字化转型和数据管理领域拥有丰富的实践经验和技术积累。其数字化转型解决方案旨在帮助企业通过采用最新的ICT技术&#xff0c;实现业务流程、组织结构和文化的全面数字化&#xff0…

Kafka 3.x.x 入门到精通(03)——对标尚硅谷Kafka教程

Kafka 3.x.x 入门到精通&#xff08;03&#xff09;——对标尚硅谷Kafka教程 2. Kafka基础2.1 集群部署2.2 集群启动2.3 创建主题2.4 生产消息2.4.1 生产消息的基本步骤2.4.2 生产消息的基本代码2.4.3 发送消息2.4.3.1 拦截器2.4.3.1.1 增加拦截器类2.4.3.1.2 配置拦截器 2.4.3…

Spring Bean 的生命周期与作用域解析及实战

引言 在Spring框架中&#xff0c;Bean是构成应用的核心组件&#xff0c;它们负责执行应用中的业务逻辑。理解Spring Bean的生命周期和作用域对于开发高效、稳定的Spring应用至关重要。本文将详细解析Spring Bean的生命周期和作用域&#xff0c;并通过实战案例加深理解。 一、…