Как замаскировать и закрасить фиксированную область в видеокадрах с помощью FFmpeg + OpenCV?Python

Программы на Python
Ответить
Anonymous
 Как замаскировать и закрасить фиксированную область в видеокадрах с помощью FFmpeg + OpenCV?

Сообщение Anonymous »

Я удаляю статический водяной знак логотипа, который всегда появляется в одном и том же фиксированном прямоугольнике (например, в правом нижнем углу) для коротких клипов MP4.
Цель:
  • Декодировать кадры → применить фиксированную маску → закрасить замаскированную область → перекодировать видео.
  • Сохранять стабильность вывода во всех кадрах (избегать мерцания).
  • Предпочитаю быстрое решение достаточно для пакетной обработки
Ввод/информация о водяных знаках
  • Ввод: H.264 MP4, 1080p, 30 кадров в секунду, длительность ~10 с.
  • Область водяного знака (фиксированная): x=1600, y=900, w=280, h=120 (пример)
  • Логотип в основном непрозрачный, иногда с полупрозрачными краями.
Что я пробовал
Я использовал FFmpeg для извлечения кадров, затем OpenCV для покадровой отрисовки.
Извлечение кадров FFmpeg:

Код: Выделить всё

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

Код: Выделить всё

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

Код: Выделить всё

ffmpeg -framerate 30 -i out/%06d.png -c:v libx264 -pix_fmt yuv420p output.mp4
Проблема
Покадровая зарисовка работает нормально на отдельных изображениях, но в видео закрашенная область мерцает, потому что реконструкция немного меняется в зависимости от кадра (особенно вдоль краев/текстур).
Вопросы
  • Какой рекомендуемый подход к уменьшению мерцания при удалении логотипа фиксированной области?

    Есть ли известный метод распространения реконструкции во времени (например, управление оптическим потоком, временное сглаживание)?
  • При использовании только OpenCV: какой минимальный инженерный подход (без обучения модели) обеспечивает согласованность результатов?

    Пример: следует ли мне рисовать на ключевом кадре, а затем отслеживать/деформировать патч с помощью оптического потока?
  • Есть ли собственный способ сделать это в FFmpeg лучше, чем извлечение кадров (например, delogo + что-то еще) или OpenCV — правильный путь?
Меня устраивает практический ответ, даже если он не идеален, если он стабилен и достаточно быстр.

Подробнее здесь: https://stackoverflow.com/questions/798 ... peg-opencv
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»