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

目录

  • 前言
    • 内容简介
    • 为什么会有这篇文章
  • 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

结束

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解读六西格玛培训:企业为何不能忽视其重要性?

六西格玛培训,听起来可能是一个陌生的名词,但当深入探索其内涵后,会发现它实际上是企业追求卓越的必由之路。 想象一下,你正在驾驶一辆赛车,在赛道上追求极致的速度与精准。然而,每一个微小的失误都可能导致…

window平台C#实现软件升级功能(控制台)

window平台C#实现软件升级功能 之前用window窗体实现过一个升级功能,后来发现多个项目都需要升级功能,现改成可接收参数实现一种通用的exe.改用控制台方式实现这个升级功能,这样不仅实现了接收参数,升级程序体积也比原来的窗体形式…

如何让Ubuntu上的MySQL开发更便捷

前言 作为一款开源的数据库开发与数据库管理协同工具,(OceanBase Developer Center,简称ODC),针对MySQL数据源,已提供了涵盖SQL开发、变更风险管控、数据安全合规等多个方面的功能,从而为MySQL…

Java集合框架-Collection-List-vector(遗留类)

目录 一、vector层次结构图二、概述三、底层数据结构四、常用方法五、和ArrayList的对比 一、vector层次结构图 二、概述 Vector类是单列集合List接口的一个实现类。与ArrayList类似,Vector也实现了一个可以动态修改的数组,两者最本质的区别在于——Vec…

# 使用 Hystrix 的线程池,idea 报错显示 HystrixThreadPoo1Properties.Setter 报红。

使用 Hystrix 的线程池,idea 报错显示 HystrixThreadPoo1Properties.Setter 报红。 一、可能的原因: 1、拼写错误: HystrixThreadPoo1Properties.Setter 中的 “Poo1” 可能是拼写错误,应为“Pool”。 2、类或方法不存在&#…

BGP配置和应用案例

策略路由的配置步骤 l 策略路由的配置步骤如下: 创建route-map 通过ACL匹配感兴趣的数据,定义策略动作 在指定接口下通过ip policy 命令应用route-map l 最终实现对通过该接口进入设备的数据进行检查,对匹配的数据执行规定的策略…

Selenium IDE 常见错误笔记

错误1:Failed:Exceeded waiting time for new window to appear 2000ms 这个错误通常出现在第一次运行时,有两个原因: Firefox阻止了弹出式窗口,在浏览器设置里允许这个操作即可。 有些网站设置了反扒机制,脚本运行…

【1569】jsp学生学籍管理系统Myeclipse开发sqlserver数据库web结构jsp编程计算机网页项目

一、源码特点 jsp 学生学籍管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为sqlserver2…

Cmake入门学习指南

Cmake入门学习指南 Cmake 官方教程 cmake 提供了一个很好的教程,里面的内容很简单,并且有简单的习题帮助你理解 cmake。 开始前需要的准备 这里默认你使用 windows 环境的电脑进行学习,如果是 Linux 系统就更简单了,直接各种 a…

企业微信hook接口协议,ipad协议http,发送大视频文件

发送大视频文件 参数名必选类型说明uuid是String每个实例的唯一标识,根据uuid操作具体企业微信send_userid是long要发送的人或群idisRoom是bool是否是群消息 请求示例 {"uuid":"1688853790xxx", //uuid 默认随机生成如果初始化传了id则用初始…

苍穹外卖学习

并不包含全部视频内容&#xff0c;大部分都按照操作文档来手搓代码&#xff0c;资料&#xff0c;代码都上传git。 〇、实际代码 0.1 Result封装 package com.sky.result;import lombok.Data;import java.io.Serializable;/*** 后端统一返回结果* param <T>*/ Data pub…

【iconv】Linux c++ 中文字符串转十六进制 GBK 编码/内码

文章目录 问题描述c 代码CMakeLists.txt参考链接 问题描述 Linux 系统默认使用的是 UTF-8 编码&#xff0c;并且 c 中没有标准库可以直接将中文字符转为 GBK 编码/内码。因此需要借助 iconv 库来实现。 在实现代码之前&#xff0c;可以在一下在线工具网站进行中文字符到各个编…

Docker 的数据管理 端口映射 容器互联 镜像的创建

目录 概念 概念 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。总结&#xff1a;因为容器数据是临时保存的为了安全&#xff0c;就要让数据保持持久化。 1&#…

面试ssss

深拷贝和浅拷贝 深拷贝和浅拷贝是关于对象&#xff08;包括数组&#xff09;复制的两个概念。 浅拷贝在复制对象属性的时候&#xff0c;复制的是指针&#xff08;引用&#xff09;&#xff0c;所以&#xff0c;修改目标对象的属性值会影响到原对象的对应属性值 obj。assign …

互联网大厂ssp面经,数据结构part2

1. 什么是堆和优先队列&#xff1f;它们的特点和应用场景是什么&#xff1f; a. 堆是一种特殊的树形数据结构&#xff0c;具有以下特点&#xff1a;i. 堆是一个完全二叉树&#xff0c;即除了最后一层外&#xff0c;其他层都是满的&#xff0c;并且最后一层的节点都靠左对齐。i…

深入探索MySQL:成本模型解析与查询性能优化

码到三十五 &#xff1a; 个人主页 在数据库管理系统中&#xff0c;查询优化器是一个至关重要的组件&#xff0c;它负责将用户提交的SQL查询转换为高效的执行计划。在MySQL中&#xff0c;查询优化器使用了一个称为“成本模型”的机制来评估不同执行计划的优劣&#xff0c;并选择…

一般神经网络的微分与网络参数的初始化

(文章的主要内容来自电科的顾亦奇老师的 Mathematical Foundation of Deep Learning, 有部分个人理解) 一般深度神经网络的微分 上周讨论的前向和反向传播算法可以推广到任意深度神经网络的微分。 对于一般的网络来说&#xff0c;可能无法逐层分割&#xff0c;但仍然可以用流…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(三)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 4 - 6节&#xff09; P5《04.快速入门》 本节来实现一个 HelloWorld 效果&#xff1a; 1、打开编辑器&#xff0c;选择新建项目&…

洁盟超声波清洗机怎么样?希亦好用还是洁盟?超声波清洗机推荐

是不是还有很多朋友在选超声波清洗机方面还是觉得是越贵的就越好用&#xff01;或者说是不是还有很多小伙伴是不知道怎么选超声波清洗机&#xff1f;盲目跟风选超声波清洗机后才会知道真的很容易话冤枉钱&#xff0c;也并不是越贵的超声波清洗机就是越好的&#xff0c;在选超声…

Pandas 模块-操纵数据(11)-二元运算--超级add、sub、mul、div、mod、pow等等

目录 1. DataFrame.add 1.1 DataFrame.add 语法结构 1.2 DataFrame.add 参数说明 1.3 DataFrame.add 用法示例 1.3.1 正常的使用 1.3.2 需要注意类型相符合 2. DataFrame.sub 2.1 DataFrame.sub 语法结构 2.2 DataFrame.sub 参数说明 2.3 DataFrame.sub 用法示例 3.…