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)
Ответ на: комментарий от Moderators

Такие раздачи безусловно есть, но только это, как правило, единственное доступное качество. DVD-версий нет. Может быть, какой-нибудь, «Осторожно, Модерн!»

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

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

Придется скрапать всякие там торрентсру для начала, чтобы найти одни и те же фильмы в разном качестве…

shkolnick-kun ★★★★★
()
Последнее исправление: shkolnick-kun (всего исправлений: 1)
Ответ на: комментарий от Moderators

Лучше изучить литературу по помехам в SECAM и воспроизвести эффекты руками, - по соотношению усилия/результат - оптимальный вариант.

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

Нет модели, нужно проводить собственное научное исследование. Программы делались на глаз. Оборудования для работы с сигналами, естественно, нет.

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

https://ru.wikipedia.org/wiki/SECAM

Главной особенностью системы SECAM, отражённой в её названии, является передача во время интервала одной строки только одного цветоразностного сигнала из двух, передаваемых поочерёдно[1]. В приёмнике сигнал, передаваемый в течение одной строки, воспроизводится в течение двух строк за счёт использования строчной памяти. В момент передачи сигнала R-Y, из строчной памяти в декодер поступает сигнал предыдущей строки B-Y и наоборот. Поскольку система SECAM используется только с европейским стандартом разложения 625/50, длительность запоминания, равная периоду одной строки, составляет 64 микросекунды[3].

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

http://www.chipinfo.ru/literature/radio/199908/p19_20.html

Использование в канале цветности ультразвуковой линии задержки (УЛЗ) приводило к тому, что в декодере одновременно присутствовали сигналы цветности из смежных строк, т. е. «красной» R и «синей» В, имеющих разные частоты. Взаимодействие между этими сигналами вызывает интерференцию, создающую искажения в виде синусоидальных насадок на горизонтальных участках импульсов демодулированных цветоразностных сигналов.

Вот и всё. Звон УЛЗ дает теплые ламповые эффекты.

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

Ничего сколь-либо полезного нигде для нашей задачи нет, тем более в паспортах на устройства.

Ты же эксперт по нейросетям, по крайней мере один из разработчиков так считает. Что можешь предложить из своей области?

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

Ты же эксперт по нейросетям, по крайней мере один из разработчиков так считает. Что можешь предложить из своей области?

Ну, не совсем эксперт, тут скорее с @peregrine надо советоваться.

Но, как радиофоизик, могу сказать, что задачу проще решить без машоба, что часто бывает в анализе и обработке данных.

А из статьи в прошлом посте про УЛЗ видно, что когда звук циркулирует по треугольному пути, он создает те самые эффекты, которых вы хотите добиться.

Надо смоделировать эту самую циркуляцию звука с затуханием + навалить шумов.

shkolnick-kun ★★★★★
()
Последнее исправление: shkolnick-kun (всего исправлений: 1)
Ответ на: комментарий от shkolnick-kun

А у нас радиофизиков нет, и оборудования. На нейросети вся надежда. Ну так что, что лучше использовать? У меня есть затычка NVIDIA на 2 Gb, что лучше подойдет?

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

А у нас радиофизиков нет, и оборудования. На нейросети вся надежда. Ну так что, что лучше использовать? У меня есть затычка NVIDIA на 2 Gb, что лучше подойдет?

Тогда peregrine

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

Вы правы, достаточно вооружиться китайским трансмиттером и ТВ-тюнером…

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

Ну тогда в любом случае выйдет херня, способная имитировать только искажения на чистом сигнале без шума. Но зачем тогда в ней крутилки? ;-)

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

зумерки-хипсторки

Путаете. Хипстеры — это миллениалы, поколение 90-х, между бумерами (из 80-х) и зумерами (из 00-х). А зумерки уже не хипстеры, а хайпбисты.

Хипстеры дохрена нонкомформные, а хайпбисты наоборот: жрут всякую попсу (один только откопанный ими Киркоров чего стоит!) и этим гордятся. Стыдно такое путать.

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

Так меня звали с нейронками. Что надо сделать? Сделать шумогенератор или шумоподавитель? Это, конечно всё очень ресурсоёмко станет, если серьёзную (промышленного уровня и качества) сетку учить то месяцы на таком железе, а так можно и с более простым поиграться. Варианта 2 классических - GAN-сети и их модификации или автокодировщик с глубоким обучением, как вариант какая-то их комбинация, но там думать надо долго (вполне потянет на кандидатскую если хорошо всё продумать), можно ли или нельзя и что именно можно и насколько оно от этого станет медленным. GAN скорее всего, будет лучше в общем случае, комбинации которая сочетала бы их сильные стороны не беря недостатки обоих, нет на текущий момент или она мне не известна, я про изображения только теорию немного знаю, на практике пока только текст и статистические данные, например статистику продаж, лопатил, да и не только нейронками.

GAN более фотореалистичен, автоэнкодер, возможно, будет более эффективен если шум сильный.

А вообще я бы начал с классических методов, например, этих. Гуглить по запросу denoise image algorithms.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от shkolnick-kun

Поскольку система SECAM используется только с европейским стандартом разложения

а ведь товарищ киселев нас давно предупреждал, что Европа разлагается, но что для этого у них свои стандарты - еще нет

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

Задача такая: Есть 2 одинаковых видео - в качестве VHSRip и DVDRip. Нужно обучить GAN делать шумы как в версии VHSRip.
Что для этого нужно использовать? Может есть готовые решения типа - укажите файл-1 и файл-2, и кнопка Старт обучения?

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

Готовые, не знаю и не думаю, что они есть, обычно такое на раз пишут под задачу. А не совсем готовые - питон в руки, разобрать видео на кадры, обработать, собрать обратно. Но учить придётся очень долго.

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

Да, разобрать оба видео на кадры для обучения это понятно. Какая GAN-программа на данный момент самая дружественная к пользователю?

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

Что-то не то, я например пользовался FakeApp, только там лица, нужно что-то такое для общего случая. И моя затычка вполне за двое суток рекомендованный «Weights» набрала.

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

У тебя как минимум полный цикл разработки. Обучишь, качество плохое, переделываешь модель, опять учишь... Ну и учить только на лица против чего угодно тоже сокращение ресурсов. Так что тебе придётся моделей 20 обучить, прежде чем хорошо получится.

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

Может тот же FakeApp 1.1 удастся для этого использовать? Очень удобная программа. Или уже есть альтернативы получше за 5 лет? (как я понимаю, более новые версии FakeApp для этого не годятся вообще, да и требуют более 2Gb VRAM)

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

Но зачем тогда в ней крутилки? ;-)

Чтобы искажения всё-таки были разными.

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

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

Кстати, факелы в твоей версии слишком быстро пропадают, возможно увеличение времени их пребывания на экране в ~1.5 раза было бы реалистичней

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

Да VHSRip хоть жопой жуй, вот найти бы оцифровки непосредственно с эфира, чтобы видеть артефакты чисто SECAM, без добавленных VHS искажений…

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

Воистину, и почему ради поддержания духовных скрепов в России не ввести свою частоту переменного тока? 33, например — по числу лет жизни Христа.

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

А должны быть два, сигнал цветности же переиспользуется два раза, исходя из сути SECAM. Да и угасает ЭЛТ не мгновенно.

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

VHSRip вполне могут быть и не MESECAM, какие живые раздачи знаешь? И главное, чтобы был еще и чистый образец.

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

Мы пробовали, помимо нынешнего простого, ещё два варианта:

  • Одни и те же факелы используются два кадра подряд;
  • Так же, но красные факелы появляются в первом кадре, а синие — во втором (это была чистая импровизация).

В первом случае ощущение выглядит слишком медленно, во втором — как новогодняя гирлянда.

Thetan ★★★
()

В идеале, конечно, лучше шейдер написать, который в любом нормальном плеере подключить можно.

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

VHSRip вполне могут быть и не MESECAM

С французских видаков? Ну это редкость, да и характеристики сигнала там чуть другие.

какие живые раздачи знаешь

Да был же даже на рутрекере вроде целый раздел с оцифровками этих ваших Володарских с Михалёвыми. Мы не так давно еле нашли где-то «Как я провёл лето» в озвучке Михалёва, правда, видео там прогнано через конвертер цветовых систем и наглухо убито, но это скорее исключение.

Можно взять банальные озвучки пней от agent_diego, что под этих самых гнусавых и косит, записывая на настоящие видаки. Правда, факелов там почти не заметно, хоть и MESECAM — то ли сигнал слишком сильный, то ли декодер слишком вумный. Оригиналы стянуть из раздач ALEKS KV или у SviMik прямо с сайта. Но на одних мультиках, конечно, лучше не тренировать, иначе на кинце будет плохо работать — надо и кинца бахнуть.

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

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

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

А ещё хороший способ одним махом запретить всю заграничную технику! Особенно эту вашу цифровую электронику с б-гомерзким ASCII и Unicode, у которых латиница кодируется с меньшей избыточностью, чем кириллица.

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

Вообще, тут ведь дело такое: MESECAM сам по себе на плёнке модулируется как PAL, поэтому специфичные для SECAM искажения могут быть ему вообще не присущи: они проистекают только из исходного телеэфира.

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

Кстати, с нейросетью, возможно не получается. Так как GAN работают только с отдельными изображениями, в нашем случае играет роль как минимум еще и предыдущий кадр.

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