去除视频字幕 5: 使用 ProPainter, 记录探索过程

使用 ProPainter 去除视频上的字幕,效果演示(比之前好多了。)


1. 项目目标
去除视频 (bear.webm) 中的硬字幕。

2. 初始尝试与关键失败:IOPaint

  • 方法: 使用 IOPaint(一个图像修复工具)配合 PaddleOCR 逐帧修复。
  • 结果: 修复区域严重闪烁
  • 核心认知: 图像修复工具独立处理每一帧,缺乏时间一致性。必须使用专业的视频修复工具。

3. 正确的工具:ProPainter

  • 项目来源: https://github.com/sczhou/ProPainter
  • 优势: 专为视频设计,能感知帧间联系,从根本上解决闪烁问题。

4. 调试过程

  • A. 环境搭建

    1. git clone 仓库。
    2. 使用 conda env create -f environment.yml 创建并激活 propainter 环境。
    3. 下载预训练模型放入 checkpoints 目录。
  • B. 数据准备:遮罩 (Mask) 的陷阱

    • 问题: ProPainter 要求每一帧都必须有对应的遮罩文件。
    • 解决: 我的 OCR 脚本只为有字幕的帧生成了遮罩。因此,我编写了一个辅助脚本,为所有无字幕的干净帧创建了对应的纯黑色空白遮罩,确保文件数量和帧数完全一致。
  • C. 运行报错:ModuleNotFoundError

    • 问题: 脚本无法找到 utils 等本地模块。
    • 根源: 在错误的 Python 虚拟环境 (venv) 中运行。
    • 解决: 切换到正确的 Conda 环境 (conda activate propainter)。
  • D. 硬件瓶颈:内存耗尽 (Out of Memory)

    • 问题: 32GB 内存被瞬间占满。
    • 根源: 脚本默认将整个视频(所有帧、遮罩、光流数据)一次性加载到内存。
    • 解决: 使用 ProPainter 内置的命令行参数进行优化:
      • --subvideo_length [N]: 最关键的参数。将视频切成 N 帧的短片进行分块处理,大幅降低峰值内存。我设置为 20
      • --fp16: 启用半精度浮点数,内存占用减半。

5. 最终运行命令

500个图片 + 使用 fp16

python inference_propainter.py --video inputs/object_removal/resized-bear-500   --mask inputs/object_removal/resized_mask_500    --fp16

**6. 合并2个视频,对比2个视频。 **

这个命令解决了帧率不同步的核心问题

ffmpeg -i masked_in.mp4 -i inpaint_out.mp4 -filter_complex "[0:v]setpts=PTS-STARTPTS,fps=30[v0];[1:v]setpts=PTS-STARTPTS,fps=30[v1];[v0][v1]hstack=inputs=2[v]" -map "[v]" -an -c:v libx264 -crf 23 -preset veryfast -shortest both.mp4

最后说一下感受

  1. 视频处理,需要成本的,硬件,时间。所以,如果一个视频的质量很差,根本不值得搬运。西瓜不甜,不值得摘下来。
  2. 显存不够,会非常慢。只能: 减少帧数,降低图片大小,使用 fp16, 尝试云主机,目前就这几个办法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90973.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript HTTP 请求:从老古董到新潮流

前端开发离不开跟后端打交道,HTTP 请求就是这座桥梁。JavaScript 提供了好几种方式来发请求,从老牌的 XMLHttpRequest (XHR) 到现代的 Fetch API,再到各种好用的第三方库(像 Axios、Ky、Superagent)。咱们一个一个聊清…

Windows10系统使用Cmake4.1.0构建工具+Visual Studio2022编译Opencv4.11教程

安装提示 后续安装本Cmake和Opencv版本及以上都可以。Microsoft Visual Studio2022已默认安装,没有安装给出教程链接。 一、Cmake4.1.0下载 1.官网下载:https://cmake.org/download/,找到cmake-4.1.0-rc3-windows-x86_64.zip版本 2.压缩包…

【性能测试】Jmeter+Grafana+InfluxDB+Prometheus Windows安装部署教程

一、工具作用与整体架构 1.1 各工具核心作用 工具作用描述关键特性Jmeter性能测试工具,模拟多用户并发请求,生成测试数据支持HTTP/HTTPS、数据库等多种协议,可自定义测试场景InfluxDB时序数据库,专门存储时间序列数据&#xff0…

【Kubernetes】使用Deployment进行的资源调度,资源清理,伸缩与更新管控

Kubernetes Deployment 实战:从资源清理到伸缩与更新管控 一、基础准备:清理闲置 ReplicaSet 在使用 Deployment 时,每次更新都会生成新的 ReplicaSet(简称 RS),旧的 RS 会被保留但设置为 DESIRED0。这些闲…

stm32使用USB虚拟串口,因电脑缺少官方驱动而识别失败(全系列32单片机可用)

驱动下载地址 官网地址:https://www.st.com/en/development-tools/stsw-stm32102.html

枚举中间位置基础篇

参考资料来源灵神在力扣所发的题单,仅供分享学习笔记和记录,无商业用途。 核心思路: 一:直接直接用数据结构记录需要的数据,在枚举右,维护左的循环中,删除当前位置的元素即可达成一样效果 二…

企业选择将服务器放在IDC机房托管的优势

在服务器作为数据存储和传输的核心设备的社会环境中,服务器的稳定性和安全性会直接影响到企业业务的连续性和用户的满意程度,随着云计算技术和大数据的兴起,企业对于服务器的需求也在日益增加,而如何高效、安全的管理服务器则是各…

自动化UI测试工具TestComplete的AI双引擎:即时数据集 + 自愈测试

随着敏捷开发和持续交付模式的普及,传统的软件测试方法正面临着前所未有的挑战。测试团队在追求快速迭代的同时,往往陷入测试数据准备和测试维护的泥潭,严重制约了交付效率和质量保障能力。 TestComplete作为业界领先的自动化测试工具&#…

用KNN实现手写数字识别:基于 OpenCV 和 scikit-learn 的实战教学 (超级超级超级简单)

用KNN实现手写数字识别:基于 OpenCV 和 scikit-learn 的实战教学在这篇文章中,我们将使用 KNN(K-Nearest Neighbors)算法对手写数字进行分类识别。我们会用 OpenCV 读取图像并预处理数据,用 scikit-learn 构建并训练模…

数据结构自学Day15 -- 非比较排序--计数排序

一、计数排序(Counting Sort)计数排序是一种非比较型的排序算法,它的核心思想是:利用“元素的值”来确定它在结果数组中的位置,通过“统计每个数出现的次数”来完成排序。二、如何实现计数排序(核心步骤&am…

k8s的权限

来自博客:25-k8s集群中-RBAC用户角色资源权限_权限 资源 角色-CSDN博客 一.RBAC概述(基于角色的访问控制) 1.图解 用户: 1.user 2.serviceAccount 3.Group 用户角色 1.Role:局部资源角色 2.clusterRole:全局资源角色额 角色绑…

C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(三)

目录 队列数据管理 代码实现 测试代码 绑定信息(交换机-队列)管理 代码实现 测试代码 队列数据管理 当前队列数据的管理,本质上是队列描述信息的管理,描述当前服务器上有哪些队列。 定义队列描述数据类 队列名称是否持久化标志是否独占标志是否自…

51c自动驾驶~合集9

自己的原文哦~ https://blog.51cto.com/whaosoft/11627386 #端到端1 说起端到端,每个从业者可能都觉得会是下一代自动驾驶量产方案绕不开的点!特斯拉率先吹响了方案更新的号角,无论是完全端到端,还是专注于planner的模…

时间长了忘记jupyter的环境是哪个了

有这些但是忘记是哪个了jupyter kernelspec list查看内核路径,这个内核是用来告诉jupyter 去哪找内核配置的到这个路径下打开json文件查看使用的python环境从而确定是哪个conda环境为jupyter使用的python环境jupyter的工作原理:在创建conda环境后会安装j…

PYTHON从入门到实践-15数据可视化

数据可视化是数据分析中不可或缺的一环,它能够将抽象的数据转化为直观的图形,帮助我们更好地理解数据特征和发现潜在规律。本文将介绍如何使用Python中的Matplotlib和Plotly库进行数据可视化,并通过掷骰子的概率模拟案例展示可视化的实际应用…

Spring IOC 容器 **默认注册 Bean** 的 8 条规则

Spring IOC 容器 默认注册 Bean 的 8 条规则 (Spring Framework 6.x 源码级总结)阅读提示:把下面 8 条规则背下来,再读 Spring 源码时,你会在任何一行代码里立刻知道「这个 BeanDefinition 是从哪儿来的」。1️⃣ 环境…

29.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--用户配置服务

用户配置服务是孢子记账中最简单的部分。简单说,用户配置服务就是用户自定义的配置项存储服务,用于我们的APP根据用户的配置实现指定的功能。它提供了一个简单的接口,允许用户存储和检索他们的配置数据。就目前来说,用户配置只有一…

Python实现PDF按页分割:灵活拆分文档的技术指南

Python实现PDF按页分割:灵活拆分文档的技术指南 PDF文件处理是日常工作中的常见需求,特别是当我们需要将大型PDF文档拆分为多个部分时。本文将介绍如何使用Python创建一个灵活的PDF分割工具,能够根据用户指定的页数范围任意分割文档。 需求分…

「iOS」——GCD其他方法详解

GCD学习GCD其他方法dispatch_semaphore (信号量)**什么是信号量**dispatch_semaphore主要作用dispatch_semaphore主要作用异步转同步设置一个最大开辟的线程数加锁机制dispatch_time_t 两种形式GCD一次性代码(只执行一次)dispatch_barrier_async/sync栅栏…

【图像处理基石】如何实现一个车辆检测算法?

基于AI的车牌检测和识别算法 问题描述、应用场景与难点 问题描述 车牌检测和识别是计算机视觉领域的一个特定任务,主要包含两个核心步骤: 车牌检测:从图像中准确定位车牌的位置和区域车牌识别:对检测到的车牌区域进行字符识别&…