欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > ffmpeg采用gpu加速增加水印

ffmpeg采用gpu加速增加水印

2025/2/23 19:45:30 来源:https://blog.csdn.net/zs520ct/article/details/141260244  浏览:    关键词:ffmpeg采用gpu加速增加水印

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 subprocessimport 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可以用这个libx264subprocess.run(ffmpeg_command)print(tarMp4Path)return tarMp4Pathdef 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文件上面加水印效果是这样的

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词