Я удаляю статический водяной знак логотипа, который всегда появляется в одном и том же фиксированном прямоугольнике (например, в правом нижнем углу) для коротких клипов MP4.
Цель:
Проблема
Покадровая зарисовка работает нормально на отдельных изображениях, но в видео закрашенная область мерцает, потому что реконструкция немного меняется в зависимости от кадра (особенно вдоль краев/текстур).
Вопросы
Какой рекомендуемый подход к уменьшению мерцания при удалении логотипа фиксированной области?
Есть ли известный метод распространения реконструкции во времени (например, управление оптическим потоком, временное сглаживание)?
При использовании только OpenCV: какой минимальный инженерный подход (без обучения модели) обеспечивает согласованность результатов?
Пример: следует ли мне рисовать на ключевом кадре, а затем отслеживать/деформировать патч с помощью оптического потока?
Есть ли собственный способ сделать это в FFmpeg лучше, чем извлечение кадров (например, delogo + что-то еще) или OpenCV — правильный путь?
Меня устраивает практический ответ, даже если он не идеален, если он стабилен и достаточно быстр.
Я удаляю статический водяной знак логотипа, который всегда появляется в одном и том же фиксированном прямоугольнике (например, в правом нижнем углу) для коротких клипов MP4. Цель: [list] [*]Декодировать кадры → применить фиксированную маску → закрасить замаскированную область → перекодировать видео. [*]Сохранять стабильность вывода во всех кадрах (избегать мерцания). [*]Предпочитаю быстрое решение достаточно для пакетной обработки [/list] Ввод/информация о водяных знаках [list] [*]Ввод: H.264 MP4, 1080p, 30 кадров в секунду, длительность ~10 с. [*]Область водяного знака (фиксированная): x=1600, y=900, w=280, h=120 (пример) [*]Логотип в основном непрозрачный, иногда с полупрозрачными краями. [/list] Что я пробовал Я использовал FFmpeg для извлечения кадров, затем OpenCV для покадровой отрисовки. [b]Извлечение кадров FFmpeg[/b]: [code]ffmpeg -i input.mp4 -vsync 0 frames/%06d.png [/code] [b]OpenCV inpaint (Python)[/b] [code]import cv2 import numpy as np
result = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA) cv2.imwrite("out/000001.png", result) [/code] [b]Перекодирование FFmpeg[/b] [code]ffmpeg -framerate 30 -i out/%06d.png -c:v libx264 -pix_fmt yuv420p output.mp4 [/code] Проблема Покадровая зарисовка работает нормально на отдельных изображениях, но в видео закрашенная область мерцает, потому что реконструкция немного меняется в зависимости от кадра (особенно вдоль краев/текстур). Вопросы [list] [*]Какой рекомендуемый подход к уменьшению мерцания при удалении логотипа фиксированной области?
Есть ли известный метод распространения реконструкции во времени (например, управление оптическим потоком, временное сглаживание)? [*]При использовании только OpenCV: какой минимальный инженерный подход (без обучения модели) обеспечивает согласованность результатов?
Пример: следует ли мне рисовать на ключевом кадре, а затем отслеживать/деформировать патч с помощью оптического потока? [*]Есть ли собственный способ сделать это в FFmpeg лучше, чем извлечение кадров (например, delogo + что-то еще) или OpenCV — правильный путь? [/list] Меня устраивает практический ответ, даже если он не идеален, если он стабилен и достаточно быстр.