Про стереовидео и AviSynth

Оценил возможности AviSynth по обработке видео. Например, вот так можно сделать анаглиф из интерлейсного стереоролика (с чередованием строк — левая-правая, левая-правая).

Clip=DirectShowSource("D:\My Downloads\The_French_Line_3D\VIDEO_TS\MJPEGexample.avi")

w=Width(Clip)
H=Height(Clip)

AssumeFrameBased(Clip)

Separated=Clip.SeparateFields()

Even=SelectEven(Separated)
Odd=SelectOdd(Separated)

Merge(ConvertToRGB(Even).RGBAdjust(0, 1.0, 1.0, 1.0), ConvertToRGB(Odd).RGBAdjust(1.0, 0, 0, 1.0))

Lanczos4Resize(W, H)

Levels(0, 2, 255, 0, 255)

На очереди — аналогичные скрипты для других форматов стереовидео.

Про стереовидео и AviSynth: 3 комментария

    1. Скриптом такое не сделаешь. Наверное, можно плагином, но это очень нетривиальная задача.

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

      Если же применять алгоритмы наподобие «предсказания» в видеокодеках, то результат будет сродни 2D-3D конверсии.

      Есть разработки kostasoft — http://kostasoft.com/index.php?mod=pages&page=deAnal , но там требуется, чтобы была одна из монокартинок.

      PS Точной цветопередачи, скорее всего, добиться не удастся — так что смысла в конверсии не очень много.

  1. Нарыл скрипт для создания стереопары из моно и анаглифа, провел некоторые эксперементы над фильмом «Мой кровавый Валентин», но результат желает лучшего
    vidL = AVISource(«D:\mono.avi»,false)
    vidROrig = AVISource(«D:\anaglif.avi»,false)
    VidL=ConvertToRGB(vidL)
    VidROrig=ConvertToRGB(vidROrig)
    VidR=VidROrig
    vidColor = AVISource(«D:\anaglif.avi»,false)
    vidColor= BilinearResize(VidColor,64, 64)
    vidColor= BilinearResize(VidColor,width(vidL), height(vidL))
    VidR=MergeRGB (Vidr.ShowGreen («YV12»),vidR.ShowGreen («YV12»),vidR.ShowGreen («YV12»))
    VidR=ConvertToYV12(VidR)
    VidR=mergechroma(vidr,VidColor)
    VidR=ConvertToRGB(vidR)
    Stackhorizontal(VidR,VidL)

    может внесете корективы для улучшения желаемого результата?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *