python实战之去除视频水印&字幕

这篇具有很好参考价值的文章主要介绍了python实战之去除视频水印&字幕。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、python去除视频水印的操作步骤

获取资源链接:https://null119.lanzoul.com/b050jscbg

1.下载资源包并解压

        结果如下图所示:

python实战之去除视频水印&字幕,woking是ing~啦,python,音视频,开发语言

2.安装运行代码所必须的解释器和包

        python软件在官网下载即可,这里我们仅对如何批量安装包进行介绍,如下所示

python实战之去除视频水印&字幕,woking是ing~啦,python,音视频,开发语言

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

#-r后是需要安装的包的名称构成的txt文档
#-i后国内的镜像地址,下载会快一点

3.放入相关视频至video文件夹

        注意:要求文件的分辨率一致,水印位置相同,否则无法进行批量操作。

python实战之去除视频水印&字幕,woking是ing~啦,python,音视频,开发语言

4.启动脚本

        打开命令行,先是输入python,回车,再数据脚本名即可运行脚本。

python实战之去除视频水印&字幕,woking是ing~啦,python,音视频,开发语言

 5.进行命令选择,然后框选去除区域即可

python实战之去除视频水印&字幕,woking是ing~啦,python,音视频,开发语言

 python实战之去除视频水印&字幕,woking是ing~啦,python,音视频,开发语言

 6.查找处理好的视频

        在output视频之中。

python实战之去除视频水印&字幕,woking是ing~啦,python,音视频,开发语言

二、实战总体代码

import os
import sys
import cv2
import numpy
from moviepy import editor

VIDEO_PATH = 'video'
OUTPUT_PATH = 'output'
TEMP_VIDEO = 'temp.mp4'


class WatermarkRemover():

    def __init__(self, threshold: int, kernel_size: int):
        self.threshold = threshold  # 阈值分割所用阈值
        self.kernel_size = kernel_size  # 膨胀运算核尺寸


    #根据用户手动选择的ROI(Region of Interest,感兴趣区域)框选水印或字幕位置。
    def select_roi(self, img: numpy.ndarray, hint: str) -> list:
        '''
    框选水印或字幕位置,SPACE或ENTER键退出
    :param img: 显示图片
    :return: 框选区域坐标
    '''
        COFF = 0.7
        w, h = int(COFF * img.shape[1]), int(COFF * img.shape[0])
        resize_img = cv2.resize(img, (w, h))
        roi = cv2.selectROI(hint, resize_img, False, False)
        cv2.destroyAllWindows()
        watermark_roi = [int(roi[0] / COFF), int(roi[1] / COFF), int(roi[2] / COFF), int(roi[3] / COFF)]
        return watermark_roi


    #对输入的蒙版进行膨胀运算,扩大蒙版的范围
    def dilate_mask(self, mask: numpy.ndarray) -> numpy.ndarray:

        '''
    对蒙版进行膨胀运算
    :param mask: 蒙版图片
    :return: 膨胀处理后蒙版
    '''
        kernel = numpy.ones((self.kernel_size, self.kernel_size), numpy.uint8)
        mask = cv2.dilate(mask, kernel)
        return mask
    
    #根据手动选择的ROI区域,在单帧图像中生成水印或字幕的蒙版。
    def generate_single_mask(self, img: numpy.ndarray, roi: list, threshold: int) -> numpy.ndarray:
        '''
    通过手动选择的ROI区域生成单帧图像的水印蒙版
    :param img: 单帧图像
    :param roi: 手动选择区域坐标
    :param threshold: 二值化阈值
    :return: 水印蒙版
    '''
        # 区域无效,程序退出
        if len(roi) != 4:
            print('NULL ROI!')
            sys.exit()

        # 复制单帧灰度图像ROI内像素点
        roi_img = numpy.zeros((img.shape[0], img.shape[1]), numpy.uint8)
        start_x, end_x = int(roi[1]), int(roi[1] + roi[3])
        start_y, end_y = int(roi[0]), int(roi[0] + roi[2])
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        roi_img[start_x:end_x, start_y:end_y] = gray[start_x:end_x, start_y:end_y]

        # 阈值分割
        _, mask = cv2.threshold(roi_img, threshold, 255, cv2.THRESH_BINARY)
        return mask

    #通过截取视频中多帧图像生成多张水印蒙版,并通过逻辑与计算生成最终的水印蒙版
    def generate_watermark_mask(self, video_path: str) -> numpy.ndarray:
        '''
    截取视频中多帧图像生成多张水印蒙版,通过逻辑与计算生成最终水印蒙版
    :param video_path: 视频文件路径
    :return: 水印蒙版
    '''
        video = cv2.VideoCapture(video_path)
        success, frame = video.read()
        roi = self.select_roi(frame, 'select watermark ROI')
        mask = numpy.ones((frame.shape[0], frame.shape[1]), numpy.uint8)
        mask.fill(255)

        step = video.get(cv2.CAP_PROP_FRAME_COUNT) // 5
        index = 0
        while success:
            if index % step == 0:
                mask = cv2.bitwise_and(mask, self.generate_single_mask(frame, roi, self.threshold))
            success, frame = video.read()
            index += 1
        video.release()

        return self.dilate_mask(mask)

    #根据手动选择的ROI区域,在单帧图像中生成字幕的蒙版。
    def generate_subtitle_mask(self, frame: numpy.ndarray, roi: list) -> numpy.ndarray:
        '''
    通过手动选择ROI区域生成单帧图像字幕蒙版
    :param frame: 单帧图像
    :param roi: 手动选择区域坐标
    :return: 字幕蒙版
    '''
        mask = self.generate_single_mask(frame, [0, roi[1], frame.shape[1], roi[3]], self.threshold)  # 仅使用ROI横坐标区域
        return self.dilate_mask(mask)

    def inpaint_image(self, img: numpy.ndarray, mask: numpy.ndarray) -> numpy.ndarray:
        '''
    修复图像
    :param img: 单帧图像
    :parma mask: 蒙版
    :return: 修复后图像
    '''
        telea = cv2.inpaint(img, mask, 1, cv2.INPAINT_TELEA)
        return telea


    def merge_audio(self, input_path: str, output_path: str, temp_path: str):
        '''
    合并音频与处理后视频
    :param input_path: 原视频文件路径
    :param output_path: 封装音视频后文件路径
    :param temp_path: 无声视频文件路径
    '''
        with editor.VideoFileClip(input_path) as video:
            audio = video.audio
            with editor.VideoFileClip(temp_path) as opencv_video:
                clip = opencv_video.set_audio(audio)
                clip.to_videofile(output_path)

    def remove_video_watermark(self):
        '''
    去除视频水印
    '''
        if not os.path.exists(OUTPUT_PATH):
            os.makedirs(OUTPUT_PATH)

        filenames = [os.path.join(VIDEO_PATH, i) for i in os.listdir(VIDEO_PATH)]
        mask = None

        for i, name in enumerate(filenames):
            if i == 0:
                # 生成水印蒙版
                mask = self.generate_watermark_mask(name)

            # 创建待写入文件对象
            video = cv2.VideoCapture(name)
            fps = video.get(cv2.CAP_PROP_FPS)
            size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
            video_writer = cv2.VideoWriter(TEMP_VIDEO, cv2.VideoWriter_fourcc(*'mp4v'), fps, size)

            # 逐帧处理图像
            success, frame = video.read()

            while success:
                frame = self.inpaint_image(frame, mask)
                video_writer.write(frame)
                success, frame = video.read()

            video.release()
            video_writer.release()

            # 封装视频
            (_, filename) = os.path.split(name)
            output_path = os.path.join(OUTPUT_PATH, filename.split('.')[0] + '_no_watermark.mp4')  # 输出文件路径
            self.merge_audio(name, output_path, TEMP_VIDEO)

    if os.path.exists(TEMP_VIDEO):
        os.remove(TEMP_VIDEO)

    def remove_video_subtitle(self):
        '''
    去除视频字幕
    '''
        if not os.path.exists(OUTPUT_PATH):
            os.makedirs(OUTPUT_PATH)

        filenames = [os.path.join(VIDEO_PATH, i) for i in os.listdir(VIDEO_PATH)]
        roi = []

        for i, name in enumerate(filenames):
            # 创建待写入文件对象
            video = cv2.VideoCapture(name)
            fps = video.get(cv2.CAP_PROP_FPS)
            size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
            video_writer = cv2.VideoWriter(TEMP_VIDEO, cv2.VideoWriter_fourcc(*'mp4v'), fps, size)

            # 逐帧处理图像
            success, frame = video.read()
            if i == 0:
                roi = self.select_roi(frame, 'select subtitle ROI')

            while success:
                mask = self.generate_subtitle_mask(frame, roi)
                frame = self.inpaint_image(frame, mask)
                video_writer.write(frame)
                success, frame = video.read()

            video.release()
            video_writer.release()

            # 封装视频
            (_, filename) = os.path.split(name)
            output_path = os.path.join(OUTPUT_PATH, filename.split('.')[0] + '_no_sub.mp4')  # 输出文件路径
            self.merge_audio(name, output_path, TEMP_VIDEO)

        if os.path.exists(TEMP_VIDEO):
            os.remove(TEMP_VIDEO)


if __name__ == '__main__':
    sel=input('1:去水印, 2:去字幕\n')
    if sel=='1':
        remover = WatermarkRemover(threshold=80, kernel_size=5)
        remover.remove_video_watermark()
    if sel=='2':
        remover = WatermarkRemover(threshold=80, kernel_size=5)
        remover.remove_video_subtitle()

三、图片去除水印方法

(一)手机——乐奇爱水印精灵

        有点免费去除水印,可以无效其操作,但是每天只能保存一张,好就好在邀请一个人可以活得60此保存机会,那个被邀请的也能获得十次,可以P图。

(二)电脑——quququ.cn

        把图片拖到网站,调整画笔大小,抹除文字就可以p图完成,免费下载就可以了。

四、参考引用

[1]使用Python轻松去除视频水印/字幕,手把手教程,一学就会_哔哩哔哩_bilibili

[2]https://ztjun.fun/(B站:治廷君)文章来源地址https://www.toymoban.com/news/detail-729867.html

到了这里,关于python实战之去除视频水印&字幕的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于python实现去除视频的水印

    在终端下载相关依赖包 将要去除水印的视频放在video目录下,运行一下         用鼠标操作去除的部分,回车即可 去除了水印的视频输出到了output文件夹下 查看效果,还不错   

    2024年02月16日
    浏览(40)
  • 视频中的水印如何去除?教你几种简单去除视频水印方法

    视频中的水印如何去除掉呢?如果我们经常观看视频,可能会注意到一些视频上有水印。水印是在视频中嵌入的品牌标志或文字。这些水印可能会影响视频的观感,去除水印可以帮助我们在学习和研究方面更有效地使用视频资源。有时候,我们可能需要将视频插入到演示文稿

    2024年02月16日
    浏览(42)
  • 剪映怎么去除视频水印?分享这3个方法助你视频去除水印!

    如何在剪映中去除水印?剪映是一款广泛使用的短视频剪辑软件,但是有时我们使用的素材可能带有水印。今天我将分享三种方法,帮助你在剪映中去除水印。 方法一:放大视频画面 在剪映中导入视频后,你会发现视频的左上角和右下角有抖音号水印。单击视频素材。 选中

    2024年02月07日
    浏览(46)
  • 铅华洗尽,粉黛不施,人工智能AI基于ProPainter技术去除图片以及视频水印(Python3.10)

    视频以及图片修复技术是一项具有挑战性的AI视觉任务,它涉及在视频或者图片序列中填补缺失或损坏的区域,同时保持空间和时间的连贯性。该技术在视频补全、对象移除、视频恢复等领域有广泛应用。近年来,两种突出的方案在视频修复中崭露头角:flow-based propagation和

    2024年02月08日
    浏览(59)
  • 怎么下载抖音视频无水印?教你三个无水印下载抖音视频方法

    怎么下载抖音视频无水印?抖音已经成为了我们日常生活与工作的无法割舍的一部分,每天数以亿计的用户在进行创作分享。在这个平台上,用户可以通过自己的所见所想进行创作和分享记录美好瞬间。然而,有些用户希望能够将自己喜欢的抖音视频保存到相册中,以便随时

    2024年02月03日
    浏览(57)
  • js 视频水印去除

    参考文档:http://txapi.cn/api 收费 识别要解析的类型(需要收费) 不收费:(这边只说下大概实现思路,具体操作没试过,因为我们这边是通过接口python来实现的) 抖音去水印 逻辑: 通过短链获取到视频mid,通过mid获取到视频详情,再通过视频详情拿到视频地址,将有水印替

    2024年02月14日
    浏览(47)
  • 音视频添 加水印

    在视频中增加文字水印需要准备的条件比较多,需要有文字字库处理的相关文件,在编译FFmpeg时需要支持FreeType、FontConfig、iconv,系统中需要有相关的字库,在FFmpeg中增加纯字母水印可以使用drawtext滤镜进行支持,下面就 来看一下drawtext的滤镜参数 参数 类型 说明 text 字符串

    2024年02月10日
    浏览(56)
  • 抖音视频解析,无水印解析下载抖音视频

    抖音视频解析,你是否经常遇到这样的情况,看到一些非常精彩的抖音视频,想要保存下来,但因为下载速度慢或者视频带有水印而感到困扰?那么,这款(抖音无水印解析工具)将是你的得力助手!它可以轻松解决这些问题,使你能够更轻松、更便捷地批量解析和下载抖音

    2024年01月20日
    浏览(62)
  • 抖音视频批量提取采集软件|视频无水印下载工具

    高效批量提取抖音视频,轻松应对营销需求! 在抖音视频营销中,如何高效地获取大量视频资源是许多市场人员面临的挑战。针对这一需求,我们开发了一款功能强大的抖音视频批量提取采集软件,帮助您快速、方便地获取所需视频,满足您的营销需求。 简介: 我们的软件

    2024年04月14日
    浏览(61)
  • 使用Java实现去除和屏蔽视频水印

    使用Java实现去除和屏蔽视频水印 在视频编辑和处理过程中,常常会遇到需要去除或屏蔽视频水印的需求。水印是一种在视频中插入的标识,通常用于版权保护或品牌展示。然而,有时候我们希望在编辑或分享视频时去除这些水印,以获得更干净和专业的效果。本文将介绍如

    2024年03月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包