Как замаскировать и закрасить фиксированную область в видеокадрах с помощью 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
Проблема
Покадровая зарисовка работает «нормально» на отдельных изображениях, но в видео закрашенная область мерцает, поскольку реконструкция немного меняется в зависимости от кадра (особенно по краям/текстурам).
Вопросы

1. Какой подход к уменьшению мерцания рекомендуется использовать для удаления логотипа фиксированной области?

• Существует ли известный метод распространения реконструкции во времени (например, управление оптическим потоком, временное сглаживание)?

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

• Пример: следует ли мне рисовать на ключевом кадре, а затем отслеживать/деформировать патч с помощью оптического потока?

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

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

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

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

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

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

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