实现两视频叠加时上层剪辑透明部分不遮挡下层内容的两种方案

2023-11-04

☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython

一、引言

在《moviepy音视频剪辑:使用rotate函数实现视频变换处理以及参数expand取值为True时的花屏问题解决方案》介绍了视频旋转的方法和花屏问题解决方案,Baby CY博友提了个问题:“旋转后会出现黑色的背景填充,请问能把黑色去掉变成透明吗?”,该问题是视频旋转时,由于视频内容为矩形,旋转时部分区域有内容,部分区域无内容为黑色透明色,且随着旋转这部分的范围是变化的,Baby CY希望当该视频和其他视频叠加时,旋转视频的黑色部分不遮挡下层视频的内容。

老猿以前没有对这个进行过研究,但觉得用使用遮罩是可以的,后来仔细研究了一下,发现可以使用遮罩或图像处理技术都可以实现,下面两篇博文分别介绍了这两种实现方式,之所以独立成文,一是考虑提高文章的检索概率,二是确实内容可以相互独立。

二、具体实现

下面两博文中就是具体的两种实现方案,这两文都是付费专栏的文章,不过在文章开头都提供了跳转到免费文章的链接:

  1. 通过Moviepy的遮罩实现叠加(实际上在叠加图片时也用到了部分OpenCV的图像处理能力),具体实现请参考《moviepy音视频剪辑:使用mask遮罩剪辑实现叠加透明效果
  2. 通过OpenCV图像运算+Moviepy实现图像叠加,具体实现请参考《使用OpenCV图像运算+Moviepy实现视频叠加案例

实际上述遮罩模式和OpenCV图像运算模式的两种实现方案应用程序共用了大部分函数,只是遮罩模式在处理时将上层剪辑转换成了带遮罩的剪辑,通过moviepy的视频合成方式生成结果剪辑,而OpenCV图像运算模式是利用输出结果剪辑时构建帧的函数中进行图像运算合成新帧从而构建新剪辑。

三、两种实现方式的对比

经对比两种实现方式,老猿发现二者有如下异同点:

  1. 两种模式效率差异有点大,OpenCV图像运算模式是遮罩模式的处理效率一倍以上;
  2. 使用遮罩模式的上层视频边界更圆润,而OpenCV模式的效果显得有点粗糙,这应该和老猿的实现有关,如果用更好的算法肯定也有好的效果;
  3. 遮罩模式整个上层视频前景部分有半透明效果,而OpenCV是上层前景完全遮挡下层视频,当然通过改变二者叠加时的算法公式也可以实现半透明效果。具体哪种效果更好与视频合成人员的目标相关。

另外两种实现方式老猿都没有特殊考虑性能优化,如果对于批量处理来说,性能的问题是要重点关注的。

四、小结

本文介绍了实现两视频叠加时上层剪辑透明部分不遮挡下层内容的遮罩模式和OpenCV图像运算模式两种方案,在相关链接中提供了完整的代码,并对比了两种实现方式的差异。阅读本文有助于大家理解视频mask遮罩、OpenCV图像处理运算以及音视频剪辑合成的方法。

如果觉得本文可以,老猿请大家帮忙点个赞、加个收藏,谢谢!

更多moviepy的介绍请参考《PyQt+moviepy音视频剪辑实战文章目录》或《moviepy音视频开发专栏》。这2个专栏内容的导读请参考《Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载》。

更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理 》
专栏网址https://blog.csdn.net/laoyuanpython/category_9979286.html

关于老猿的付费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用 https://blog.csdn.net/laoyuanpython/category_9607725.html》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏 https://blog.csdn.net/laoyuanpython/category_10232926.html》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,都适合有一定Python基础但无相关知识的小白读者学习。这2个收费专栏都有对应免费专栏,只是收费专栏的文章介绍更具体、内容更深入、案例更多。

付费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》。

关于Moviepy音视频开发的内容,请大家参考《Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载》的导览式介绍。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录 https://blog.csdn.net/laoyuanpython/category_9831699.html》从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython/article/details/98245036

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现两视频叠加时上层剪辑透明部分不遮挡下层内容的两种方案 的相关文章

  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P

随机推荐

  • 数字图像处理,经典对比度增强算法

    关于图像增强必须清楚的基本概念 1 图像增强的目的 1 改善图像的视觉效果 2 转换为更适合于人或机器分析处理的形式 3 突出对人或机器分析有意义的信息 4 抑制无用信息 提高图像的使用价值 5 增强后的图像并不一定保真 2 图像增强的方法
  • select函数的分析

    select函数位于头文件 include
  • 索引合并Intersection、union (3)--单表访问方法(三十八)

    上篇文章我们说了 使用索引的注意事项 前面我们总结了查询数据库的方式有const ref ref or null range index all 而使用时候需要注意 当where语句后面全是索引查询 当where语句后面跟着非索引的时候 当
  • 语音的基础知识

    1 语音信号的处理基础 1 语音信号的产生模型 语音是由发生器官产生的 肺呼进空气 由气管呼出形成气流 气流经由声门 使声带振动 产生一系列离散脉冲 再经由咽腔和口腔 有时还经由鼻腔 随着发音的不同 口的张合程度不同 舌在口中位置的不同 气
  • istreambuf_iterator和ostreambuf_iterator用法简单总结

    std istreambuf iterator 是单趟迭代器 从用来构造它的 std basic streambuf 对象读取相继字符 默认构造的 std istreambuf iterator 迭代器被称为流尾迭代器 合法的 std is
  • 怎么同时运行两个tomcat?

    转载至 http ask zol com cn x 4522378 html 这几天由于在搞那个jenkins的自动部署项目所以要使用到两个tomcat 因为重新部署的时候要先关闭Tomcat重启 只有一个的话jenkins就不能运行了 一
  • Native层HIDL服务的注册原理-Android10.0 HwBinder通信原理(六)

    Android取经之路 的源码都基于Android Q 10 0 进行分析 Android取经之路 系列文章 系统启动篇 Android系统架构Android是怎么启动的Android 10 0系统启动之init进程Android10 0系
  • Altium Designer20下绘制原理图、原理图库文件

    文章目录 前言 一 新建工程 二 原理图绘制 1 原理图的图纸大小设置 2 原理图的放大与缩小 3 元器件的选择与放置 4 画图及技巧 三 原理图库文件的绘制 总结 前言 本文的主要内容是使用Altium Designer20软件绘制原理图
  • Springboot整合easyExcel

    Springboot整合easyExcel 介绍 Entity实体类 下载模板 上传Excel文件 上传Excel 前端页面 测试 介绍 平时工作中 我们经常都会用到excel文件上传或者下载的问题 比如将表数据导出为excel表格或者进行
  • 流媒体领域信息

    1 原力 p2p 点播系统 http www forcetech net cn index html
  • 将el-table的每一行变成超链接

    需求描述 最近接到一个奇怪的需求 产品说想要在右击el table的每一行后弹出浏览器的右击菜单 浏览器在你右击一个超链接之后弹出的菜单 因为交流出现问题 刚开始我以为要模拟浏览器的右击菜单 调整了一堆样式 调好之后问产品 才知道是要弹出浏
  • SourceTree简介

    声明 1 4是来自简书的非个人作品 仅仅保存资料学习使用 一 SourceTree简介 SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端 拥有可视化界面 容易上手操作 同时它也是Mercuri
  • Java入门知识(超详细讲解)

    作者简介 练习时长两年半的Java up主 个人主页 老茶icon ps 点赞 是免费的 却可以让写博客的作者开兴好久好久 系列专栏 Java全栈 计算机系列 火速更新中 格言 种一棵树最好的时间是十年前 其次是现在 动动小手 点个关注不迷
  • 网页中有大量图片加载很慢,用什么方法进行优化

    图片预加载 原理 在网页全部加载之前 提前加载图片 当用户需要查看图片时 可以从本地缓存中直接渲染 提供用户更好的体验 减少等待时间 const imgs https alifei01 cfp cn creative vcg veer 80
  • linux编译谷歌浏览器方法,构建Linux版本的谷歌Chrome浏览器

    Chromium编译说明 Linux版 此页描述如果在Linux操作系统上编译构建Chromium浏览器 假如你对测试chromium或想移植chromium到别的平台请你继续阅读 小提示 目前还没有在Linux运行的Chromium浏览器
  • 虚拟机扩容——非LVM分区

    虚拟机扩容 非LVM分区 前提说明 实验环境 一 加载到已有路径 在原有磁盘基础上扩容 1 准备工作 2 开机 查看磁盘扩容后的状态 3 进行分区扩展磁盘 记住根分区起始位置和结束位置 4 删除根分区 切记不要保存 5 创建分区 箭头位置为
  • php使用curl_exec 获取响应头存在多个HEADER问题解决

    前言 近期在接一个第三方支付的时候 遇到一个比较头大的问题 因为第三方会把部分响应结果放在header里传输 需要从头里取数据后解密使用 我在本地是正常的 但是放到服务器上就一直是失败 因为取不到对应的头部信息 找了很久原因也没能找到具体问
  • 【云原生之Docker实战】使用docker部署nginx-proxy-manager-zh反向代理工具

    云原生之Docker实战 使用docker部署nginx proxy manager zh反向代理工具 一 nginx proxy manager zh介绍 1 nginx proxy manager zh简介 2 nginx proxy
  • Git的使用(三)——保存用户名和密码

    通过上两篇我们对Git应该都有了基本的了解了 但是有一个问题对于生性懒惰的程序员 说的是我 来说是非常枯燥无味的 那就是每次的提交都要输入密码 每次都要干重复的事情 这对于程序员来说是最不喜欢干的事情了 重复 所以这次就先把这个问题解决了再
  • 实现两视频叠加时上层剪辑透明部分不遮挡下层内容的两种方案

    前往老猿Python博客 https blog csdn net LaoYuanPython 一 引言 在 moviepy音视频剪辑 使用rotate函数实现视频变换处理以及参数expand取值为True时的花屏问题解决方案 介绍了视频旋转