LINUX.ORG.RU

Новая разработка: Фильтр, улучшающий любое видео. Требуются специалисты ⓐⓔⓢⓣⓗⓔⓣⓘⓒ

 , ,


2

3

Идет активная разработка SECAM-фильтра, альфа-версии от разных участников уже доступны.

Версия mertvoprog для ffmpeg:

У ffmpeg’овских фильтров куча ограничений, geq максимум 9 регистров может, ну и вообще оно люто костыльное и медленное. На полноценном ЯП лучше выйдет, тупо жахнем yuv420p через пайп в него и из него.

Мы почитали матчасть и вроде наконец поняли, как SECAM-факелы образуются: из-за того, что там цветность и свет в одной модуляции, а полоса цветности внутри полосы цветности — в местах резких перепадов яркости сигнал яркости пересекает сигнал цветности, и декодер цветности некоторое время отслеживает не тот сигнал. Чтобы это произошло — производные сигналов в точке пересечения должны быть примерно равны (посему это случается не в любых таких местах, а лишь в некоторых).

Выраженно красные/синие факелы потому, что из-за намного большей ширины полосы яркости для декодера цветности сигнал вне полосы цветности — это лютый перегруз.

Следить «не за тем сигналом» декодер может долго. Мы нашли запись арабского телевидения, там это особенно наглядно: на однотонных зелёных простынях факелы просто огромные.

Факелы же в произвольных местах кадра возникают из-за шума в сигнале яркости: резкие перепады возникают в произвольных местах. Ещё перепад яркости в VBI тоже может восприниматься декодером цвета, отчего возникает полоса факелов у левого края.

Короче, надо будет это всё формализовать и закодить. А то в ffmpeg-реализацию заложены более грубые принципы, а ещё она ложно срабатывает на кадрах без цветности, чего вообще быть не должно. Можно даже изи добавить режим «пропадания цвета», с выводом OSD PAL/AUTO/MESECAM/AUTO :3

#!/bin/sh
ffmpeg -i video.mp4 -lavfi '
nullsrc=s=80x360, geq=lum=128:cb=128+tan(random(12389)*1.5)*4*sin(Y/10):cr=128[blue_noise];
nullsrc=s=80x360, geq=lum=128:cr=128+tan(random(22893)*1.5)*5*sin(Y/10):cb=128[red_noise];
[0:v] geq=
lum=p(X+0.5*sin((Y+100*T)/5)\,Y)+(random(3)*10-5):
cb=p(X+2*sin((Y+T*20)/10)\,Y):
cr=p(X+2*sin((2+Y+T*20)/10)\,Y)
[distorted];
[blue_noise][red_noise] blend=all_mode=lighten [secam_noise];
[secam_noise] scale=w=6*iw:h=ih,setsar=1/1 [secam_noise_widened];
[distorted] geq=cr=
st(mod(X\,8)+1\, clip(lum(X/SW\,Y/SH)-cr(X\,Y)/5-cb(X\,Y)/3\, 0\, 255))\;
st(9\, cos(Y*3+5*T)*8)\;
cr(X\,Y)+clip(exp(
max( max( max(
ld(clip(1\, 1\, ld(9)))\,
ld(clip(2\, 1\, ld(9)))
)\, max(
ld(clip(3\, 1\, ld(9)))\,
ld(clip(4\, 1\, ld(9)))
))\, max( max(
ld(clip(5\, 1\, ld(9)))\,
ld(clip(6\, 1\, ld(9)))
)\, max(
ld(clip(7\, 1\, ld(9)))\,
ld(clip(8\, 1\, ld(9)))
)))
/51)*sin(cos(Y*3)+sin(T))*5-lum(X/SW\,Y/SH)/2\, 0\, 255-cr(X\,Y)):
cb=cb(X\,Y):lum=lum(X\,Y) [distorted_fired];
[distorted_fired][secam_noise_widened] blend=shortest=1:all_mode=grainmerge [out]' -map '[out]' \
 -filter_threads 2 \
result.mp4

Результат: https://0x0.st/iBRI.mp4

##########

Версия Thetan для frei0r: https://github.com/xoffy/secamiz0r

Результат: https://0x0.st/iBRU.mp4

Представляю местной публике свой генератор факелов (цветовых помех) SECAM: https://github.com/xoffy/secamiz0r.

Факелы SECAM это такие красные и синие (редко зелёные и чёрные) горизонтальные полосы, характерные для системы цветного аналогового ТВ SECAM, от которых каждый из вас когда-то давно пытался избавиться. В отличие от бездуховных помех NTSC и PAL, наши родные советские помехи намного зрелищнее и красивее. Одним словом, aesthetic.

Если вы и ваша тульпа по каким-то причинам не понимаете, о чём идёт речь, то вот.

Проєкт реализован в виде плагина для frei0r — замшелого свободного API для видеоэффектов.

Сборка:

$ git clone https://github.com/xoffy/secamiz0r
$ cd secamiz0r
$ meson build
$ cd build
$ ninja
$ mkdir -p ~/.frei0r-1/lib
$ cp secamiz0r.so ~/.frei0r-1/lib/secamiz0r.so
Для сборки нужны: meson, инклуды frei0r и библиотека gavl.

Проверка через ffmpeg:

$ ffplay -f lavfi -i testsrc=size=768x576 -vf 'frei0r=secamiz0r'
Результат должен быть примерно таким.

Фильтр имеет 4 параметра (вещественные числа от 0 до 1), которые в ffmpeg можно указать следующим образом:

-vf 'frei0r=secamiz0r:0.3|0.15|0.15|0.3'

  1. процент случайных факелов;
  2. процент факелов на перепадах яркости;
  3. процент факелов на перенасыщенных местах;
  4. цветовой шум.

Ещё важно учитывать, что для корректной работы плагинов frei0r в ffmpeg требуется, чтобы изображение было строго 4:3, иначе по какой-то причине всё съедет. Можно использовать либо 640x480, либо 768x576.

Кроме того, плагины frei0r можно применить в видеоредакторах Pitivi или Kdenlive.

★★

Последнее исправление: Moderators (всего исправлений: 4)
Ответ на: комментарий от mertvoprog

Вообще, тут не то что факелов почти нет — их ВООБЩЕ нет, даже на тексте https://pic4a.ru/03/xAK.png Так что не годится, отметаем. У Них в группе в VK где-то выкладывались эксперименты с советскими магнитофонами (кажется, Электроника ВМ-12 и ЛОМО какой-то), вот там факелы точно были, но материала маловато будет.

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

Я что-то уже не уверен в нейросети.
Вообще, готовность продукта можно определить тестом среди понимающей фокус-группы. Если 8 из 10 будут утверждать, что демонстрируется реальная запись, а не SECAM-фильтр, то такой продукт можно считать готовым.

Moderators ★★
() автор топика
Ответ на: комментарий от Moderators

роль как минимум еще и предыдущий кадр

Да это-то не беда, можно обучать на парах из U с одного кадра и V со второго, и наоборот. «Внахлёст».

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

8 из 10 будут утверждать

Тут многие вообще не поняли, что смысл затеи в имитации помех, а не в очистке. А Вы на такие цифры замахиваетесь :D

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

То есть не нужен, понятно. Кроме одного-двух всепланетных языков. У русского были шансы стать таковым, но давно и безповоротно потеряны.

mertvoprog
()
16 августа 2020 г.
Ответ на: комментарий от Thetan

Кстати, было бы хорошо, если бы вы разработали этот эффект на Соньке, главное чтобы не появились школьники, которые бы делали поддельные записи с этим эффектом.

GordonFreeman
()
29 января 2021 г.

Я нихую не понял. Но вообще, любое видео можно сделать, если сверху наложить Владимира.

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

Заглавный пост так плохо написан, что не прочитав всю ветку, совершенно не понятно, что вы там пытаетесь сделать.

anonymous
()

Забудьте о нейронках.

Согласен с тем, что нужно пытаться моделировать помеху, а по обучающей выборке уже подстроить небольшое количество параметров этой модели. В общем, классический computer vision и всё такое.

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

Лучше всего смоделировать по максимуму аналоговый сигнал.

Но нужно курить много матчасти ;)

Корень факелов проистекает из того, что в SÉCAM яркость и цветность передаются одинаково (частотной модуляцией), более того — в одной полосе частот (полоса цветности входит в полосу яркости). Когда частота несущей волны яркости попадает в полосу цветности — возникает путаница И ВНЕЗАПНЫЙ ПЕРЕГРУЗ, ОТТОГО МАКСИМАЛЬНЫЙ СДВИГ ПО U/V.

По идее, можно грубо смоделировать это, просто вычислив значения яркости/цветности (U/V попеременно, но на самом деле нет, надо умножать на коэффициенты, чтобы добиться чётко красного/синего, а не оранжевого/голубого), класть их в один кортеж, всегда отсортированный по min/max, и эвристически (хотя бы по ближайшему значению) определять, которое значение от которого сигнала, чтобы при пересечениях возникала такая же путаница, пример:

Y∈[0;255], U∈[180;230]
Y=30  U=190
Y=60  U=185
Y=20  U=191
Y=80  U=192
Y=178 U=203
Y=250 U=205
Y=203 U=208
Y=202 U=212
Y=190 U=210
Y=180 U=205
Y=206 U=203
Y=166 U=207
Y=93  U=220

Кладём в кортежи:

(30; 190)
(60; 185)
(20; 191)
(80; 192)
(178;203)
(205;250)
(203;208)
(202;212)
(190;210)
(180;205)
(203;206)
(166;207)
(93; 220)

Пытаемся вернуть обратно:

Y=30  U=190
Y=60  U=185
Y=20  U=191
Y=80  U=192
Y=178 U=203
Y=250 U=205
Y=208 U=203 !-- оппачки — вот тут пошла путаница, а с ней и факел очек;)
Y=212 U=202
Y=210 U=190
Y=205 U=180
Y=206 U=203 !-- опять перепутались обратно, факел прервался
Y=207 U=166 !-- новый факел, С ПЕРЕГРУЗОМ, ПОКЛАМПАЕМ ПОТОМ
Y=220 U=93

Модель кривовата, но уже что-то. Лучше не за текущими значениями следить, а брать производную и триггерить путаницу, когда её значения у яркости и цветности почти совпадают. Также отпускать, когда ПЕРЕГРУЗ УЖ СЛИШКОМ ЯВНЫЙ (превысил threshold).

А в идеале надо моделировать волны, частотную модуляцию, а потом декодировать их этими вашими анализами фуррей, да-да ;)

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

Видимо, я плохо представляю себе, как работает декодер цветового сигнала. Не понимаю, почему факелы возникают на границах (перепадах яркости).

Попробую покурить этот ваш SECAM чуть подробнее.

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

яркость

амплитудной

Пруф. Зачем ей тогда широченная полоса частот, и почему картинка не превращается в кашу от малейшего дуновения ветерка? :P

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

Зачем ей тогда широченная полоса частот

Потому что для передачи сигнала s(t) амплитудной модуляцией несущей частоты w, мы должны передавать s(t)sin(wt), что порождает частоты выше и ниже несущей частоты. Если сигнал s(t) ограничен сверху частотой f, то нам нужна полоса как минимум от w-f до w+f. И если в случае звука f можно ограничить 20кГц или даже 10кГц, то для аналогового видео всё будет сильно хуже (25 кадров по 525*455 точек в секунду даже с интерлейсингом беда).

и почему картинка не превращается в кашу от малейшего дуновения ветерка? :P

А должна? Как-то AM радио нормально играет и ничё.

Пруф.

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

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

Мда.

Мы лет 15 неверно осознавали суть амплитудной модуляции, наивно полагая, что смена амплитуды на частоту не влияет. И это при том, что ещё в советском каталоге радиолюбительской литературы вычитали про эти ваши SSB/USB, но вникать не стали.

Посыпаем голову пеплом.

Как-то AM радио нормально играет

Да в том и дело, что его глушит всё, что шевелится, особенно на коротких волнах ;) — а уж что тогда об ультракоротких говорить.

mertvoprog
()

А зачем всё это? Делаете виртуальный экран, берёте пиксель с изображения видео модулируете его в сигнал развёртки, пускаете луч в экран получате выход, всё. Значением фокусировки луча, а также погрешностями его попадания в цель миксуете цвет финальный. В итоге у вас да жрущий фильтр, но итог будет 1 в 1 как на теликах.

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

Мы лет 15 неверно осознавали суть амплитудной модуляции, наивно полагая, что смена амплитуды на частоту не влияет. И это при том, что ещё в советском каталоге радиолюбительской литературы вычитали про эти ваши SSB/USB, но вникать не стали.

Не очень понял, это сарказм или нет? :)

Да в том и дело, что его глушит всё, что шевелится, особенно на коротких волнах ;) — а уж что тогда об ультракоротких говорить.

Ну, глушит, телек тоже можно глушить. В американском NTSC и цветность амплитудной (на самом деле, квадратурной, но не суть) модуляцией передаётся. И как-то они при этом всём жили же :)

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

Не очень понял, это сарказм или нет? :)

Чистейшая правда, ну разве что со сроками могли на пару лет напутать ;)

Оно ж получается, что при коррекции амплитуды кривизна временно меняется, и в конкретной точке с конкретной фазой совпадает по наклону с синусоидой другой частоты! Позор, позор!

телек тоже можно глушить

Можно-то можно, только далеко не тривиально. АМ-радио даже с ближних передатчиков без постороннего пердёжа ловить нереально, а аналоговое ТВ не то что десятки километров переживает без особых искажений, но и тропосферную проводимость. Вот и вопрос — как, если с чистой АМ избыточности даже больше, чем с ОМ?

И как-то они при этом всём жили же :)

Так хорошо жили, что даже в новейших ящиках из этого века для NTSC ручная регулировка тона была, ага. И это при том, что туда почти сразу напихали костылей, чтобы поползновения тона минимизировать. Первый блин комом, а дальше менять было поздно. Да и цифровизация ТВ впереди планеты всей кагбэ намекаэ, как «хорошо» им жилось на аналоге.

Мы всё думаем, уж не потому ли в СССР на самом деле избрали SÉCAM, явно каличный на фоне даже раннего PAL, что помехи красные ;D

mertvoprog
()
Последнее исправление: mertvoprog (всего исправлений: 1)
Ответ на: комментарий от anonymous

Ну вот и делайте, можно на Electron, редактор любой ©. Только в описанном виде не взлетит, цель-то стоит моделировать SÉCAM, а не ЭЛТ.

mertvoprog
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.