返回顶部
首页 > 资讯 > 后端开发 > GO >golang去除视频水印
  • 860
分享到

golang去除视频水印

2023-05-14 22:05:25 860人浏览 安东尼
摘要

随着互联网的发展,视频分享和传播已经成为了人们日常生活中的重要组成部分。但是,在许多情况下,我们经常会在观看视频时遇到水印的问题。为了提高我们的观看体验,本文将介绍如何用golang去除水印并观看无水印的视频。一、水印的概念水印是指一种在数

随着互联网的发展,视频分享和传播已经成为了人们日常生活中的重要组成部分。但是,在许多情况下,我们经常会在观看视频时遇到水印的问题。为了提高我们的观看体验,本文将介绍如何用golang去除水印并观看无水印的视频。

一、水印的概念

水印是指一种在数字媒体(如视频、图片、文档等)中植入的图像、文字等信息,用于保护其版权和防止盗版。常见的水印有透明水印、文字水印、图片水印等。在观看视频时,水印会影响观看效果,甚至会影响视频内容的观感。

二、Golang是什么?

Golang是一种流行的编程语言,它于2009年由Google公司开发,并于2012年正式发布。Golang的特点是语法简洁、并发性强、效率高、安全性好等优点,因此在后端开发、分布式系统网络编程等领域得到了广泛应用。

三、去除视频水印的原理

知道了什么是水印,那么我们来看看去除水印的原理。一般情况下,水印的位置和内容是固定的,因此我们可以通过视频编辑软件或基于图像处理算法的方式将水印像素进行删除或改变。这种方式虽然效果较好,但也存在着一些缺点,比如需要手工处理或运行效率低下等。

而在本文中,我们将介绍一种使用Golang编写程序的方式来去除视频水印。具体实现的原理是通过对视频帧进行处理,利用图片处理算法找到水印的位置和大小,并进行像素替换等操作,最终实现去除水印的目的。

四、实现步骤

接下来,我们将依次介绍如何用Golang去除视频水印的实现步骤。

  1. 安装依赖库

在开始编写程序前,我们需要安装Golang的图像处理库和视频处理库,其中包括了对视频解码和帧处理的支持。安装命令如下:

go get -u GitHub.com/disintegration/gift

go get -u github.com/3D0c/gmf

  1. 读取视频文件并解码

我们需要通过GMF库读取视频文件,并将每个视频帧解码为图像,以便进一步处理。示例代码如下:

inputContext, _ := gmf.NewInputCtx(inputFile)

defer inputContext.Free()

videoStream, _ := inputContext.GetBestStream(gmf.AVMEDIA_TYPE_VIDEO)

videoCodec, _ := gmf.FindEncoder(gmf.AV_CODEC_ID_RAWVIDEO)

videoFrame := gmf.NewFrame()

videoSwCtx := gmf.NewSwCtx()

videoSwCtx.SetSize(videoStream.CodecCtx().Width(), videoStream.CodecCtx().Height())

videoSwCtx.SetPixelFORMat(gmf.AV_PIX_FMT_RGB24)

videoSwCtx.SetSrcDims(videoStream.CodecCtx().Width(), videoStream.CodecCtx().Height())

videoSwCtx.SetDstDims(videoStream.CodecCtx().Width(), videoStream.CodecCtx().Height())

videoSwCtx.Init()

if err := videoCodec.Open(nil); err != nil {

log.Panicln("Cannot open video codec:", err)

}

for packet := range inputContext.GetNewPackets() {

if packet.StreamIndex() == videoStream.Index() {

frame, err := packet.Decode(videoStream.CodecCtx())

if err != nil {

log.Panicln("Cannot decode packet:", err)

}

if frame != nil {

videoSwCtx.Scale(frame, videoFrame)

// 写入处理后的帧

}

}

}

  1. 对视频帧进行处理

接下来,我们需要对每个视频帧进行处理,并利用 gift 库对图像进行修改和增强。在其中,我们需要找到水印的位置和大小,以便进行像素替换等操作。示例代码如下:

filter := gift.New(

gift.Resize(videoStream.CodecCtx().Width(), videoStream.CodecCtx().Height(), gift.LanczosResampling),

gift.Convolution(

[]float32{

-1, -1, -1,

-1, 9, -1,

-1, -1, -1,

},

false, false, false, 0,

),

)

watermark, _ := gift.Open("watermark.png")

for {

frame, err := videoStream.ReadPacket()

if err != nil {

if err == io.EOF {

break

}

log.Panicln("Cannot read packet:", err)

}

videoFrame.SetPts(frame.Pts())

videoSwCtx.Scale(frame, videoFrame)

watermarkMask := gift.NewPolarMask(watermark.Bounds(), watermark.Bounds().Center(), 0.5)

maskSize := gift.Resize(watermark.Bounds().Dx()/2, watermark.Bounds().Dy()/2, gift.LanczosResampling)

watermark = maskSize.Resample(watermark, nil)

watermark = gift.Mask(watermark, watermarkMask)

filter.DrawAt(videoFrame, watermarkedFrame, image.Point{0, 0}, gift.OverOperator)

}

  1. 保存处理后的视频文件

经过处理后,我们需要用GMF库对修改后的视频帧重新进行编码,并写入到新的文件中。示例代码如下:

outputContext, _ := gmf.NewOutputCtx(outputFile)

defer outputContext.Free()

outputStream := outputContext.NewStream(codec)

if err := outputStream.CodecCtx().SetPixFmt(gmf.AV_PIX_FMT_YUV420P); err != nil {

log.Panicln("Cannot set codec pixel format")

}

if err := outputStream.CodecCtx().SetWidth(videoStream.CodecCtx().Width()); err != nil {

log.Panicln("Cannot set codec width")

}

if err := outputStream.CodecCtx().SetHeight(videoStream.CodecCtx().Height()); err != nil {

log.Panicln("Cannot set codec height")

}

if err := outputStream.CodecCtx().SetTimeBase(avrational.AVR{Num: 1, Den: 25}); err != nil {

log.Panicln("Cannot set codec time base")

}

if err := outputStream.CodecCtx().SetProfile(gmf.FF_PROFILE_H264_HIGH_444_PREDICTIVE); err != nil {

log.Panicln("Cannot set codec profile:", err)

}

if err := outputStream.CodecCtx().Open(nil); err != nil {

log.Panicln("Cannot open codec:", err)

}

swFrameCtx := gmf.NewSwCtx()

swFrameCtx.SetSize(videoStream.CodecCtx().Width(), videoStream.CodecCtx().Height())

swFrameCtx.SetPixelFormat(gmf.AV_PIX_FMT_YUV420P)

swFrameCtx.SetSrcDims(videoStream.CodecCtx().Width(), videoStream.CodecCtx().Height())

swFrameCtx.SetDstDims(videoStream.CodecCtx().Width(), videoStream.CodecCtx().Height())

swFrameCtx.Init()

for i := 0; i < len(watermarkedFrames); i++ {

swFrameCtx.Scale(watermarkedFrames[i], outputStream.CodecCtx(), gmf.SWS_FAST_BILINEAR)

pkt, err := outputStream.CodecCtx().Encode(watermarkedFrames[i])

if err != nil {

log.Panicln("Cannot encode frame:", err)

}

pkt.SetPts(int64(i))

if err := outputStream.WritePacket(pkt); err != nil {

log.Panicln("Cannot write packet:", err)

}

pkt.Free()

}

outputContext.CloseOutputAndNullify()

五、总结

本文介绍了如何用Golang编写程序去除视频水印,并提供了实现步骤和示例代码。这种方式相对于传统的手工处理和基于图像处理算法的方式更加高效和准确,并且代码实现相对简单。

但是,在实际使用中,我们也需要注意保护被去除水印的视频版权和知识产权,避免侵犯他人权益。

以上就是golang去除视频水印的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: golang去除视频水印

本文链接: https://lsjlt.com/news/206802.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • golang去除视频水印
    随着互联网的发展,视频分享和传播已经成为了人们日常生活中的重要组成部分。但是,在许多情况下,我们经常会在观看视频时遇到水印的问题。为了提高我们的观看体验,本文将介绍如何用Golang去除水印并观看无水印的视频。一、水印的概念水印是指一种在数...
    99+
    2023-05-14
  • 利用Golang和FFmpeg实现视频水印的去除
    要使用Golang和FFmpeg实现视频水印的去除,可以按照以下步骤进行操作:1. 安装FFmpeg:首先需要安装FFmpeg,可以...
    99+
    2023-10-08
    Golang
  • 利用python OpenCV去除视频水印
    上面的图片展示的是视频中的某一帧,需要将图片中的,实体拓展和退出全屏以及右上角的两个圆圈按钮给删除掉。 解决思路一个很简单的想法就是,从图片上其它两块背景相同的地方,拷贝两个块替换...
    99+
    2024-04-02
  • 基于python实现去除视频的水印
    我们再搬运视频的时候常常会遇到视频有水印的问题 如下 下面就通过python来实现对视频水印的去除 在pycharm新建一个项目,创建image,video目录其他不用 必要条件 在终端下载相关依赖包 pip install moviep...
    99+
    2023-09-14
    python 音视频 numpy
  • windows会声会影如何去除视频水印
    本篇内容主要讲解“windows会声会影如何去除视频水印”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“windows会声会影如何去除视频水印”吧!会声会影去除视频水印的方法首先我们点击视频框下方...
    99+
    2023-07-01
  • windows会声会影x10如何去除视频水印
    本文小编为大家详细介绍“windows会声会影x10如何去除视频水印”,内容详细,步骤清晰,细节处理妥当,希望这篇“windows会声会影x10如何去除视频水印”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。会声会...
    99+
    2023-07-01
  • windows会声会影2018如何去除视频水印
    这篇文章主要讲解了“windows会声会影2018如何去除视频水印”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“windows会声会影2018如何去除视频水印”吧!会声会影2018去除视频水...
    99+
    2023-07-01
  • windows会声会影2019如何去除视频水印
    这篇文章主要介绍“windows会声会影2019如何去除视频水印”,在日常操作中,相信很多人在windows会声会影2019如何去除视频水印问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”windows会声会影...
    99+
    2023-07-01
  • windows会声会影2020如何去除视频水印
    本篇内容主要讲解“windows会声会影2020如何去除视频水印”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“windows会声会影2020如何去除视频水印”吧!会声会影2020去除视频水印的方...
    99+
    2023-07-01
  • php怎么实现抖音视频去水印
    本篇内容主要讲解“php怎么实现抖音视频去水印”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php怎么实现抖音视频去水印”吧!这里说的解析抖音无水印视频是通过调用第三方接口来完成的,这个第三方平...
    99+
    2023-06-04
  • 怎么用Python实现抖音视频去水印
    这篇文章主要介绍“怎么用Python实现抖音视频去水印”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用Python实现抖音视频去水印”文章能帮助大家解决问题。Videoparse提供视频去水印解...
    99+
    2023-06-04
  • 两种方法教大家如何快速去除视频中的水印
    现在也是有很多平台有投稿视频的功能,有很多原创视频作者,当然也会出现一些搬运视频的人。然而国内无非就是在油管中搬运视频。很多视频网站都会对用户上传的视频添加水印,这就对了搬运视频的作者设了一道坎。但这还是可以解决的。也就是使用软件 把视频左...
    99+
    2015-06-06
    两种方法教大家如何快速去除视频中的水印
  • 短视频(douyin)去水印工具的实现代码
    目录1.先拿到第一个链接2.嗯,在浏览器打开这个链接3. 打开地址发现有302跳转4.然后播放左侧的视频,竟然变成了带水印的视频。5.在控制台发现有ajax请求,返回了该视频的全部信...
    99+
    2024-04-02
  • photoshop水印如何去除
    这篇文章主要介绍了photoshop水印如何去除的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇photoshop水印如何去除文章都会有所收获,下面我们一起来看看吧。ps去水印的方法:方法一: 首先通过左上角“文...
    99+
    2023-07-01
  • 利用Golang和FFmpeg实现视频水印的添加
    下面是一个使用Golang和FFmpeg实现视频水印添加的示例代码:```gopackage mainimport ("fmt""l...
    99+
    2023-10-08
    Golang
  • 【Python】Python 去除图片水印
    在Python中,你可以使用一些图像处理库来去除图片中的水印。其中一个常用的库是OpenCV,它提供了一些强大的图像处理功能。 首先 你需要安装OpenCV库。你可以使用以下命令在终端中安装它: pi...
    99+
    2023-10-18
    python opencv 计算机视觉
  • 2020年最新快手无水印视频解析代码,快手解析在线去水印,支持抖音视频解析
    这里说的解析获取无水印视频是通过调用第三方接口的方式实现的,具体的代码如下:以PHP代码为例: <php //www.videoparse.cn后台生成的appid$appId = '&...
    99+
    2023-06-04
  • python opencv加水印 去水印
    收到的需求是在一个图上匹配到水印 然后将原来的水印换成一个新水印 先要安装一个库 库文件代码如下: # coding=utf-8 import cv2 import numpy as np # 膨胀算法 Kernel _DILATE_K...
    99+
    2023-01-31
    水印 python opencv
  • C#实现为视频添加水印
    目录文章描述开发环境开发工具实现代码实现效果文章描述 以下主要还是使用到了ffmpeg命令,分别实现了给视频添加图片水印以及文字水印。 开发环境 .NET Framework版本:...
    99+
    2023-01-09
    C#视频添加水印 C#视频水印 C# 添加水印
  • 运用python去除图片水印
    目录OpenCV + Numpy函数简介色彩转换PIL  + itertools由于图片水印的种类有很多,今天我们先讲最简单的一种。 即上图中的①类水印,这种水印存在白色背景上的文档里,水印是灰色,需要保...
    99+
    2022-06-02
    python去水印 python 图片水印
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作