LINUX.ORG.RU

FFmpeg - фильтр убрать горизонтальную полосу в разных местах

 , ,


0

2

Доброго всем!

Оцифровал с кассеты. Ко мне кассета уже попала такая, похоже она была изначально записана в NTSC, затем ее переписали в PAL еще на видеомагнитофоне. Вот имеем такой артефакт.

Помогите найти фильтр в FFmpeg (или возможно другой софт) убрать горизонтальную полосу в разных местах. Ведь теоретически возможно путем сравнения предыдущего кадра и следующего восстановить текущий. Линк на пример 10 сек. ниже:

https://drive.google.com/file/d/1087srAtn2XuLg7pvnvwzsF-9gL5Ynivm/view?usp=drivesdk

попробовал всякие разные фильтры из ffmpeg, ничего особо не получилось. если что-то типа tblend=all_mode=lighten или lagfun, то ерунда полная получается. хотя в tblend можно писать свои выражения с условиями; я не пробовал.

если смотреть на разницу двух соседних кадров, как ты предлагаешь, то там всё очень не однозначно, тем более на таком трясущемся и зашумлённом видео:

ffplay -vf format=gray,tblend=difference,scale=1:576,scale=720:576,eq=1:0.45,eq=256 composit_deinterlaced.mkv

если это использовать как маску для слияния с предыдущим кадром:

ffmpeg -i composit_deinterlaced.mkv -filter_complex "
    [0]tpad=1,split[orig][mask_in];
    [mask_in]format=gray,tblend=difference,scale=1:576,scale=720:576,eq=1:0.45,eq=256[mask];
    [orig][0][mask]maskedmerge" -c:v yuv4 -f avi - | ffplay -

то получаются вот такие забавные эффекты: 1 2 3 4. наверное надо как-то по-другому фильтровать. для maskedmerge, кстати, не обязательно бинарное изображение, он может смешивать кадры на основании значения маски.

поспрашивай лучше на профильном форуме, может кто-то уже сталкивался с таким. из программ могу только opencv посоветовать :)

anonymous
()

Могу только посоветовать применить фильтр -vf yadif=1
Так как видео интерлейсное, это позволит получить 50p и высокую плавность движения.

anonymous
()

Не думаю что для такого могут быть фильтры. По крайней мере чтобы сделать качественно.

kirill_rrr ★★★★★
()

Теоретически это возможно. Но нужно быть спецом. Надо написать скрипт, который детектит (ожидая в определенных местах) полосы, потом пометить эту область, взять ее из предыдущего кадра, применить оценку движения, чтобы примерно совпало со следующим кадром (в принципе, можно и просто с предыдущего кадра взять, но надо смотреть будет ли это заметно). Полосы можно не детектить, а самому указать, просматривая покадрово и записывая номера плохих кадров. В принципе, все реально. Вопрос в автоматизации и знаниях. На спец форумах тебе подскажут больше, может и скрипт какой накидают.

anonymous
()
Ответ на: комментарий от anonymous

Есть одна мысль… Где то в соседних темах обсуждался софт, дорисовывающий кадры для увеличения частоты. Учитывая что тут полосы смещаются по полэкрана на кадр, с высокой вероятностью кадры до и после окажутся в нужных местах чистыми.

Допустим, разбираем видео на кадры, берём подобную софтину и для каждого кадра n дорисовываем среднее между кадрами n+1 и n-1. Т.е. для каждого кадра получаем как бы его же, построеный по предположению из соседних.

Потом надо каким то образом автоматизировать пакетное запихивание оригинальнй и предполагаемой версии кадра как слоёв в графическом редакторе, оригинальный в верхнем и предполагаемый в нижнем. Дальше остаётся взять ластик нужного размера, стереть место с полосой в верхнем слое и сохранить результат. Ну и собрать кадры обратно в видео.

Под вопросом само существование софтины, которая будет строить среднее по двум кадрам. Если она есть, то её надо заскриптовать. Потом надо заскриптовать условное засовывание двух .png как слои на холст в условный гимп. Если всё прокатит, то дальше ручная обратока по 3-10 секунд на кадр, вполне приемлимо.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.