Wie kann ich mit FFmpeg + OpenCV einen festen Bereich über Videobilder hinweg maskieren und einmalen?Python

Python-Programme
Anonymous
 Wie kann ich mit FFmpeg + OpenCV einen festen Bereich über Videobilder hinweg maskieren und einmalen?

Post by Anonymous »

Ich entferne ein statisches Logo-Wasserzeichen, das bei kurzen MP4-Clips immer im gleichen festen Rechteck (z. B. in der unteren rechten Ecke) angezeigt wird.
Ziel:
  • Frames dekodieren → eine feste Maske anwenden → maskierten Bereich einfärben → Video neu kodieren
  • Ausgabe über Frames hinweg stabil halten (Flimmern vermeiden)
  • Eine schnelle Lösung bevorzugen Ausreichend für die Stapelverarbeitung
Eingabe-/Wasserzeicheninformationen
  • Eingabe: H.264 MP4, 1080p, 30fps, Dauer ~10s
  • Wasserzeichenbereich (fest): x=1600, y=900, w=280, h=120 (Beispiel)
  • Das Logo ist größtenteils undurchsichtig, manchmal mit halbtransparenten Kanten
Was ich versucht habe
Ich habe FFmpeg verwendet, um Frames zu extrahieren, dann OpenCV, um einzelne Frames einzuzeichnen.
FFmpeg extrahiert Frames:

Code: Select all

ffmpeg -i input.mp4 -vsync 0 frames/%06d.png
OpenCV inpaint (Python)

Code: Select all

import cv2
import numpy as np

x, y, w, h = 1600, 900, 280, 120

img = cv2.imread("frames/000001.png")
mask = np.zeros(img.shape[:2], dtype=np.uint8)
mask[y:y+h, x:x+w] = 255

result = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)
cv2.imwrite("out/000001.png", result)
FFmpeg neu kodieren

Code: Select all

ffmpeg -framerate 30 -i out/%06d.png -c:v libx264 -pix_fmt yuv420p output.mp4
Problem
Das Frame-by-Frame-Inpainting funktioniert bei einzelnen Bildern „gut“, aber im Video flackert der Inpaint-Bereich, da die Rekonstruktion je nach Frame leicht variiert (insbesondere entlang von Kanten/Texturen).
Fragen
  • Was ist für die Entfernung eines Logos in einem festen Bereich der empfohlene Ansatz, um Flimmern zu reduzieren?

    Gibt es eine bekannte Technik dazu? die Rekonstruktion zeitlich verbreiten (z. B. optische Flussführung, zeitliche Glättung)?
  • Wenn Sie nur OpenCV verwenden: Was ist ein minimaler technischer Ansatz (ohne Training eines Modells), um die Ergebnisse konsistent zu halten?

    Beispiel: Soll ich auf einem Keyframe einfärben und dann den Patch mithilfe des optischen Flusses verfolgen/verzerren?
  • Gibt es eine FFmpeg-native Möglichkeit, dies besser zu machen als die Frame-Extraktion? (z. B. delogo + etwas), oder ist OpenCV der richtige Weg?
Ich bin mit einer praktischen Antwort einverstanden, auch wenn sie nicht perfekt ist, solange sie stabil und einigermaßen schnell ist.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post