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 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文件上面加水印效果是这样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值