去除視頻字幕 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
英文地址,請注明出處:http://en.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的車牌檢測和識別算法 問題描述、應用場景與難點 問題描述 車牌檢測和識別是計算機視覺領域的一個特定任務,主要包含兩個核心步驟: 車牌檢測:從圖像中準確定位車牌的位置和區域車牌識別:對檢測到的車牌區域進行字符識別&…