ffmpeg采用gpu加速增加水印

news2024/9/21 8:01:08

1.环境需要

  • 系统 windows10

  • ffmpeg,ffprobe

  • 字体文件

  • python3以上版本

2.环境配置

从官网上下载ffmpeg版本https://github.com/BtbN/FFmpeg-Builds/releases,这里我用的是这个,解压之后里面包含ffmpeg,ffprobe,ffplay

然后将这个参数配置到环境变量中,如下图所示,在环境变量的path增加一项,值为上面ffmpeg解压的文件夹路径(注意指定到bin目录下)

cmd一下查看ffmpeg -v出现下面代表好了

查看一下电脑是否支持gpu,显示cuda代表硬件支持GPU的(其他牌子的gpu可以对应找一下),这边我的电脑是n卡,所以我这边就去下载GPU对应n卡的驱动

ffmpeg -hwaccels

  1. 安装 NVIDIA 驱动程序:确保您的系统安装了适用于您的 GPU 的 NVIDIA 驱动程序。你可以在这里下载驱动drivers download,或者在Geforce Experience软件下载(电脑上有这个的就可以省略

  2. 下载并安装 CUDA Toolkit:从 NVIDIA 官方网站下载适用于您操作系统的 CUDA Toolkit,并按照说明进行安装。cuda download根据你的操作系统来选择你需要的安装包,你可以选择在线安装和离线安装,离线安装的安装包相对大一点,但是安装速度更快

3.傻瓜式安装,直接我同意下一步下一步

到这我们依赖的设计ffmpeg和GPU加速的环境就配置好了,如果没有GPU加速也不要紧,只需要把处理视频的参数修改为cpu支持的参数就行,不过速度会慢很多


3.代码部分

# -*- coding: utf-8 -*-

import os
import subprocess

import ffmpeg
def gpu_cover_1080(sourceMp4Path,tarMp4Path):
    """
    sourceMp4Path:源文件
    tarMp4Path:生成之后的目标文件
    """
    probe = ffmpeg.probe(sourceMp4Path)
    width = probe['streams'][0]['width']
    height = probe['streams'][0]['height']
    text1 = "水印1".encode('utf-8').decode('utf-8')
    text2 = "水印2".encode('utf-8').decode('utf-8')
    # 字体样式文件 格式必须是 盘符\\:路径,不然的话生成视频乱码
    font_file='E\\:/simsun.ttc'
    ffmpeg_command = [
        'ffmpeg',
        '-i', sourceMp4Path,
        '-vf', f"pad={width}:{height+120}:(ow-iw)/2:0:black,setsar=sar=1/1,drawtext=text='{text1}':fontfile='E\\:/simsun.ttc':y=h-line_h-60:x=(w-text_w)/2:fontsize=48:fontcolor=white:shadowy=2,drawtext=text='{text2}':fontfile='E\\:/simsun.ttc':y=h-line_h-10:x=(w-text_w)/2:fontsize=48:fontcolor=white:shadowy=2",
        '-c:v','h264_nvenc',
        '-y',
        tarMp4Path
    ]
    # 命令解读
    # -vf pad={width}:{height+120}:(ow-iw)/2:0:black,setsar=sar=1/1 画一个黑色(black)背景,宽为width高为height+120 然后将视频放置在(ow-iw)/2:0位置上 setsar=sar=1/1设置色块为1:1
    # -c:v h264_nvenc为gpu加速渲染的格式,cpu可以用这个libx264

    subprocess.run(ffmpeg_command)
    print(tarMp4Path)
    return tarMp4Path

def task_dir_run(video_list_dir):
    """
    短视频集合文件夹
    :param video_list_dir:
    :return:
    """
    mv_dir = os.path.join(video_list_dir,"out")
    if not os.path.exists(mv_dir):
        os.makedirs(mv_dir)
    # video_list=os.listdir(video_list_dir)
    video_files = sorted([f for f in os.listdir(video_list_dir) if f.endswith('.mp4')],
                         key=lambda x: int(''.join(filter(str.isdigit, x))))

    for file in video_files:
        gpu_cover_1080(os.path.join(video_list_dir,file),os.path.join( mv_dir,file))

video_dir = os.getcwd()
# video_dir="E:\\BaiduNetdiskDownload\\autosend\\"
print(f"当前处理路径为{video_dir}")
task_dir_run(video_dir)
print("处理完成")

这样就可以mp4文件上面加水印效果是这样的

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

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

相关文章

使用Kernel Memory进行RAG评估:AI助力企业知识管理新突破

在现代企业知识管理中,随着业务的不断发展和扩展,各种文档和数据呈现爆炸式增长。为了有效且高效地管理这些知识,企业通常会导入大量文档。然而,当涉及到对文档切片质量和回答准确度的判断时,传统的人工方法显得既费时…

复现dom破坏案例和靶场

目录 1.dom型xss平台 第一关 Ma Spaghet !: (1):当get参数中存在somebody时,h2回显 (2):当get参数中不存在somebody时,h2回显 第二关Jefff: 第三关:Ugan…

【前端面试】挖掘做过的nextJS项目(中)

https://blog.csdn.net/weixin_43342290/article/details/141170360?spm1001.2014.3001.5501文章浏览阅读105次。需求:快速搭建宣传官网1.适应pc、移动端2.基本的路由跳转3.页面渲染优化4.宣传的图片、视频资源的加载优化5.seo优化全栈react web应用、tailwind css原子工具的支…

动态规划篇--代码随想录算法训练营第三十二天|343. 整数拆分,96.不同的二叉搜索树,01背包理论,01背包优化

343. 整数拆分 题目链接:. - 力扣(LeetCode) 讲解视频: 动态规划,本题关键在于理解递推公式!| LeetCode:343. 整数拆分 题目描述: 给定一个正整数 n ,将其拆分为 k …

c++47 二级指针

二级指针的输入和输出模型 指针的输入&#xff1a;主调函数分配内存 指针输出 &#xff1a;被调用函数分配内存 指针做输入第一种模型 #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h>// 二级指针做输…

《计算机组成原理》(第3版)第8章 CPU的结构和功能 复习笔记

第8章 CPU的结构和功能 一、CPU的结构 &#xff08;一&#xff09;CPU的含义 CPU实质包括运算器和控制器两大部分。 对于冯诺依曼结构的计算机而言&#xff0c;一旦程序进入存储器后&#xff0c;就可由计算机自动完成取指令和执行指令的任务&#xff0c;控制器就是专用于完成…

Python爬虫图片:从入门到精通

在数字化时代&#xff0c;图片作为信息传递的重要媒介之一&#xff0c;其获取和处理变得越来越重要。Python作为一种功能强大且易于学习的编程语言&#xff0c;非常适合用来编写爬虫程序&#xff0c;帮助我们自动化地从互联网上获取图片资源。本文将从基础到高级&#xff0c;详…

CTF密码学小结

感觉没啥好总结的啊 基础的永远是RSA、流密码、哈希、对称密码、古典密码那一套&#xff08;密码学上过课都会&#xff09;&#xff0c;其他的就是数论的一些技巧 似乎格密码也很流行&#xff0c;以及一些奇奇怪怪的性质利用也很多 1、random设置种子后随机的性质&#xff1a…

【LiteX】【开发板】【BoChenK7】使用Python开发FPGA【Hello World、LED点灯、Memory测速、替换BIOS】

目录 开发板介绍下载仓库工程设计工程构建构建流程 工程测试Hello WorldLED点灯Memory测速替换BIOS 开发板信息 开发板介绍 手头目前只有一个购买的BoChenK7开发板&#xff0c;后续会用它来进行LiteX FPGA SoC的构建 测试可能会包括&#xff1a; LED&#xff1a;本篇文章 DDR …

【区块链+乡村振兴】“蜜链盟”乡村振兴基层治理数字化平台 | FISCO BCOS应用案例

在国家战略政策推动和新一代信息化发展应用的合力之下&#xff0c;数字乡村是互联网化、信息化和数字化在农业农村经 济社会发展中的表现。为进一步加强乡村基层治理&#xff0c;根据《中共海南省委农村工作领导小组办公室海南省农业农 村厅关于在我省乡村治理中推广运用积分制…

【Docker】Docker Volume(存储卷)

一、什么是存储卷 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着&#xff0c;当我们在容器中的这个目录下写入数据时&#xff0c;容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。 在宿主…

xss-靶场

一、环境地址 XSS Game - Learning XSS Made Simple! | Created by PwnFunction 二、案例复现 案列1——Ma Spaghet&#xff01; <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHTML (new URL(location).searchParams…

idea2022新建jsp项目并配置Tomcat服务器

1、创建项目 2、添加jdk 步骤如下&#xff0c;然后点击下边的create 创建项目即可 3、点击file 4、选择模块添加web 5、配置tomcat 6、依次点击 7、新建jsp文件 8、成功显示

Python 全栈系列262 使用sqlalchemy(clickhouse)

说明 再补充一篇。之前连不上的原因也挺搞笑&#xff0c;大概是deepseek把我带偏了&#xff0c; 应该是 pip3 install clickhouse-sqlalchemy -i https://mirrors.aliyun.com/pypi/simple/ 但是它教我 pip3 install sqlalchemy-clickhouse -i https://mirrors.aliyun.com/py…

Keepalived总结笔记

环境准备&#xff1a;两台安装ka的服务器&#xff0c;两台客户机&#xff0c;IP无要求&#xff0c;关闭火墙和selinux 1.在两台主机上安装ka 全局配置文件在/etc/keepalived/keepalived.conf 可以改写邮件地址和发送邮件的地址和主机唯一标识以及组播地址 配置虚拟路由&…

基于单片机的智能晾衣系统设计

摘 要 &#xff1a;在网络信息技术的推动下&#xff0c;智能家居得到了广泛应用&#xff0c;文章根据当前的市场动态&#xff0c;针对基于单片机的智能晾衣系统设计展开论述&#xff0c;具体包括两个方面的内容———硬件设计和软件设计。 关键词 &#xff1a;单片机&#xff…

经方药食两用服务平台

TOC springboot226经方药食两用服务平台 绪论 1.1研究背景与意义 信息化管理模式是将行业中的工作流程由人工服务&#xff0c;逐渐转换为使用计算机技术的信息化管理服务。这种管理模式发展迅速&#xff0c;使用起来非常简单容易&#xff0c;用户甚至不用掌握相关的专业知识…

【经典算法】BFS_最短路问题

1. 最短路问题介绍 最短路径问题是图论中的一类十分重要的问题。本篇文章只介绍边权为1(或边权相同)的最简单的最短路径问题。所谓边权&#xff0c;就是两点之间的距离。 这类问题通俗的说就是告诉你起点和终点&#xff0c;要你找出最短的路径或是最短路径是多少。 解决方法&…

每日OJ_牛客_DP3跳台阶扩展问题

目录 DP3跳台阶扩展问题 题解代码1&#xff08;dp&#xff09; 题解代码2&#xff08;找规律&#xff09; DP3跳台阶扩展问题 跳台阶扩展问题_牛客题霸_牛客网 题解代码1&#xff08;dp&#xff09; 假定第一次跳的是一阶&#xff0c;那么剩下的是n-1个台阶&#xff0c;跳法…

汇编语言:jcxz 指令

‌ 在汇编语言中&#xff0c;jcxz 标号 指令是一个有条件转移指令&#xff0c;用于检测CX寄存器的值&#xff0c;如果CX寄存器的值为0&#xff0c;则跳转到指令中标号所指定的地址处执行&#xff1b;否则&#xff0c;指令将继续顺序执行。‌ 1. jcxz 标号 &#xff0…